Resumen para la API de Webhooks, que te permite suscribirte a eventos que suceden en una cuenta de HubSpot con tu integración instalada.
crm.objects.contacts.read
.
POST
al punto de terminación/webhooks/v3/{appId}/subscriptions
, la respuesta incluirá un error que proporcionará el nombre del ámbito que tendrás que configurar en la interfaz de usuario de configuración de tu aplicación pública.GET
a webhooks/v3/{appId}/settings
.
Deberás incluir el ID de la aplicación en la solicitud, que puedes encontrar debajo del nombre de la aplicación en tu panel de control de Aplicaciones o en la pestaña Autenticación en la configuración de tu aplicación.
El objeto de configuración contiene los siguientes campos:
Campo | Description |
---|---|
webhookUrl | La URL a la que HubSpot enviará notificaciones de webhook. Esta URL se debe notificar por HTTPS. |
maxConcurrentRequests | El límite de concurrencia para la URL del webhook. Este valor debe ser un número mayor que cinco. |
PUT
a webhooks/v3/{appId}/settings
e incluye los siguientes campos en el cuerpo de la solicitud:
Campo | Description |
---|---|
targetUrl | La URL disponible públicamente para que HubSpot llame donde se entregarán las cargas útiles de eventos. |
throttling | Configurar los detalles de la supresión de webhooks en este objeto. El objeto de supresión incluye los campos period y maxConcurrentRequests . |
period | Escala de tiempo para esta configuración. Puede ser SECONDLY (por segundo) o ROLLING_MINUTE (por minuto). |
maxConcurrentRequests | El número máximo de solicitudes HTTP que HubSpot intentará hacer a tu aplicación en un plazo determinado por period . |
associationChange
, el webhook activará dos eventos para ambos lados de la asociación.
contact.associationChange
activará dos eventos, que representan el contacto 1 al contacto 2
y el contacto 2 al contacto 1
.contact.associationChange
y company.associationChange
, recibirás dos eventos. Estos representarán el contacto 1 a la empresa 1
y la empresa 1 al contacto 1
.eventType
al crear suscripciones a través de API:
Tipo de suscripción | Alcance requerido | Descripción |
---|---|---|
contact.creation | crm.objects.contacts.read | Recibir una notificación si se crea algún contacto en la cuenta de un cliente. |
contact.deletion | Recibe una notificación si se elimina algún contacto en la cuenta de un cliente. | |
contact.merge | Recibe una notificación si se combinó un contacto con otro. | |
contact.associationChange | Recibe una notificación si un contacto tiene una asociación agregada o eliminada entre él y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto). | |
contact.restore | Recibe una notificación si se restaura un contacto después de la eliminación. | |
contact.privacyDeletion | Recibe una notificación si se elimina un contacto por motivos de cumplimiento de la privacidad. | |
contact.propertyChange | Recibe una notificación si se cambia una propiedad específica para cualquier contacto en una cuenta. | |
company.creation | crm.objects.companies.read | Recibe una notificación si se crea alguna empresa en la cuenta de un cliente. |
company.deletion | Recibe una notificación si se elimina alguna empresa en la cuenta de un cliente. | |
company.propertyChange | Recibe una notificación si se cambia una propiedad específica para cualquier empresa en la cuenta de un cliente. | |
company.associationChange | Recibe una notificación si una empresa tiene una asociación agregada o eliminada entre ella y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto). | |
company.restore | Recibe una notificación si una empresa se restaura después de la eliminación. | |
company.merge | Recibir una notificación si una empresa se fusionó con otra. | |
deal.creation | crm.objects.deals.read | Recibe una notificación si se crea un negocio en la cuenta de un cliente. |
deal.deletion | Recibe una notificación si se elimina algún negocio en la cuenta de un cliente. | |
deal.associationChange | Recibir una notificación si un negocio tiene una asociación agregada o eliminada entre él y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto). | |
deal.restore | Recibe una notificación si se restaura un negocio después de la eliminación. | |
deal.merge | Recibe una notificación si un negocio se fusiona con otro. | |
deal.propertyChange | Recibe una notificación si se cambia una propiedad específica para cualquier negocio en la cuenta de un cliente. | |
ticket.creation | tickets | Recibe una notificación si se crea un ticket en la cuenta de un cliente. |
ticket.deletion | Recibe una notificación si se elimina algún ticket en la cuenta de un cliente. | |
ticket.propertyChange | Recibir una notificación si se cambia una propiedad específica para cualquier ticket en la cuenta de un cliente. | |
ticket.associationChange | Recibe una notificación si un ticket tiene una asociación agregada o eliminada entre él y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto). | |
ticket.restore | Recibe una notificación si se restaura un ticket después de su eliminación. | |
ticket.merge | Recibe una notificación si un ticket se combinó con otro. | |
product.creation | e-commerce | Recibe una notificación si se crea algún producto en la cuenta de un cliente. |
product.deletion | Recibe una notificación si se elimina algún producto en la cuenta de un cliente. | |
product.restore | Recibe una notificación si un producto se restaura después de su eliminación. | |
product.merge | Recibe una notificación si un producto se combinó con otro. | |
product.propertyChange | Recibe una notificación si se cambia un producto específico para cualquier producto en la cuenta de un cliente. | |
line_item.creation | Recibe una notificación si se crea algún elemento de línea en la cuenta de un cliente. | |
line_item.deletion | Recibe una notificación si se elimina algún elemento de línea en la cuenta de un cliente. | |
line_item.associationChange | Recibe una notificación si un elemento de línea tiene una asociación agregada o eliminada entre él y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto). | |
line_item.restore | Recibe una notificación si un elemento de línea se restaura después de la eliminación. | |
line_item.merge | Recibe una notificación si un elemento de línea se combinó con otro. | |
line_item.propertyChange | Recibe una notificación si se cambia una propiedad específica para cualquier elemento de línea en la cuenta de un cliente. |
Tipo de suscripción | Alcance | Descripción |
---|---|---|
conversation.creation | conversations.read | Recibe notificaciones si se crea un nuevo hilo en una cuenta. |
conversation.deletion | Recibe una notificación si un hilo se archiva o se elimina temporalmente en una cuenta. | |
conversation.privacyDeletion | Recibe una notificación si un hilo se elimina permanentemente en una cuenta. | |
conversation.propertyChange | Recibe una notificación si se ha cambiado una propiedad en un hilo. | |
conversation.newMessage | Recibe una notificación si se ha recibido un nuevo mensaje en un hilo. |
num_unique_conversion_events
hs_lastmodifieddate
assignedTo
: el hilo de conversación se ha reasignado o no asignado. Si se reasignó el hilo, el valor propertyValue
será un ID de actor en la carga útil de webhooks; si no se asigna, estará vacío.status
: el estado del hilo de conversación ha cambiado. En la carga útil de webhooks, el valor propertyValue
estará OPEN
o CLOSED
.isArchived
: se ha restaurado el hilo de conversación. El valor propertyValue
en la carga útil de webhooks siempre será FALSE
.Campo | Description |
---|---|
id | Un número que representa el ID único de una suscripción. |
createdAt | El tiempo en milisegundos en que se creó esta suscripción. |
createdBy | El ID de usuario asociado con el usuario que creó la suscripción. |
active | Esto indica si la suscripción está activada o no y si activa notificaciones de forma activa. El valor puede ser true o false . |
eventType | El tipo de suscripción. La tabla al comienzo de esta sección incluye los tipos de suscripción disponibles. |
propertyName | El nombre de la propiedad en la que la suscripción escuchará los cambios. Esto solo es necesario para los tipos de suscripción de cambio de propiedad. |
GET
a webhooks/v3/{appId}/subscriptions
.
La respuesta será una matriz de objetos que representan tus suscripciones. Cada objeto incluirá información sobre la suscripción, como el ID, la fecha de creación, el tipo y si está habilitado actualmente. Así es como se vería un ejemplo de respuesta:
POST
a webhooks/v3/{appId}/subscriptions
.
En el cuerpo de la solicitud, puedes incluir los siguientes campos:
Campo | Description |
---|---|
eventType | El tipo de suscripción. |
propertyName | El nombre de la propiedad en la que la suscripción escuchará los cambios. Esto solo es necesario para los tipos de suscripción de cambio de propiedad. |
active | Esto indica si la suscripción está activada o no y si activa notificaciones de forma activa. El valor puede ser true o false . |
id
, createdAt
o createdBy
, ya que esos campos se establecen automáticamente.
Por ejemplo, el cuerpo de tu solicitud puede tener un aspecto similar al siguiente:
eventType
debe ser un tipo de suscripción válido según se define en la sección anterior y el propertyName
debe ser un nombre de propiedad válido. Si un cliente no tiene una propiedad definida que coincida con este valor, esta suscripción no generará notificaciones.
PUT
a webhooks/v3/{appId}/subscriptions/{subscriptionId}
.
En el cuerpo de la solicitud, incluye lo siguiente:
Campo | Description |
---|---|
active | Esto indica si la suscripción está activada o no y si activa notificaciones de forma activa. El valor puede ser true o false . |
DELETE
a webhooks/v3/{appId}/subscriptions/{subscriptionId}
.
POST
que contienen datos con formato JSON de HubSpot.
Para asegurarte de que las solicitudes que recibes en tu punto de terminación de webhook provengan de HubSpot, HubSpot rellena un encabezado de X-HubSpot-Signature
con un hash SHA-256 creado con el secreto del cliente de tu aplicación combinado con los detalles de la solicitud. Más información sobre cómo validar firmas de solicitudes.
Utiliza las tablas a continuación para ver detalles sobre los campos que pueden estar contenidos en la carga útil.
Campo | Description |
---|---|
objectId | El ID del objeto que fue creado, cambiado o eliminado. Para contactos, este es el ID de contacto; para empresas, el ID de empresa; para negocios, el ID de negocio; y para conversaciones el ID de hilo. |
propertyName | Esto solo se envía para las suscripciones de cambio de propiedad y es el nombre de la propiedad que se cambió. |
propertyValue | Esto solo se envía para suscripciones de cambio de propiedad y representa el nuevo valor establecido para la propiedad que desencadenó la notificación. |
changeSource | La fuente del cambio. Puede ser cualquiera de las fuentes de cambios que aparecen en los historiales de las propiedades de contactos. |
eventId | El ID único del evento que desencadenó esta notificación. No se garantiza que este valor sea único. |
subscriptionId | El ID de la suscripción que desencadenó una notificación sobre el evento. |
portalId | El ID de cuenta de HubSpot del cliente donde ocurrió el evento. |
appId | El ID de tu aplicación. Esto se usa en caso de que tengas varias aplicaciones que apunten a la misma URL de webhook. |
occurredAt | Cuándo ocurrió este evento como una marca de tiempo de milisegundos. |
eventType | El tipo de evento para el que es esta notificación. Revisa la lista de tipos de suscripción admitidos en la sección de suscripción de webhooks anterior. |
attemptNumber | A partir de 0, el número de intentos es para notificar a su servicio de este evento. Si se vence el tiempo de espera de tu servicio o emite un mensaje de error, tal como se describe en la sección Reintentos a continuación, HubSpot intentará enviar la notificación de nuevo. |
messageId | Esto solo se envía cuando un webhook está escuchando nuevos mensajes en un hilo. Es el ID del nuevo mensaje. |
messageType | Esto solo se envía cuando un webhook está escuchando nuevos mensajes en un hilo. Representa el tipo de mensaje que estás enviando. Este valor puede ser MESSAGE o COMMENT . |
Campo | Description |
---|---|
primaryObjectId | El ID del ganador de la combinación, que es el registro que permanece después de la combinación. En la interfaz de usuario de fusión de HubSpot, este es el registro de la derecha. |
mergedObjectIds | Una matriz de identificadores que representan los registros que se fusionan en el ganador de la fusión. En la interfaz de usuario de fusión de HubSpot, este es el registro a la izquierda. |
newObjectId | El ID del registro que se crea como resultado de la combinación. Esto es independiente de primaryObjectId porque en algunos casos se crea un nuevo registro como resultado de la combinación. |
numberOfPropertiesMoved | Un entero que representa cuántas propiedades se transfirieron durante la combinación. |
Campo | Description |
---|---|
associationType | El tipo de asociación, que será una de las siguientes:
|
fromObjectId | El ID del registro desde el que se realizó el cambio de asociación. |
toObjectId | El ID del registro secundario en el evento de asociación. |
associationRemoved | Un booleano que representa lo siguiente:
|
isPrimaryAssociation | Un booleano que representa lo siguiente:
|
occurredAt
para cada notificación para determinar cuándo ocurrió el evento que desencadenó la notificación.
Además, HubSpot no garantiza que solo recibas una notificación para un evento. Aunque esto debería ser poco común, es posible que HubSpot te envíe la misma notificación varias veces.
contact.privacyDeletion
para recibir notificaciones de webhook cuando un usuario realice una eliminación de contactos conforme con la privacidad.
Las notificaciones de eliminación conforme con la privacidad tienen un comportamiento especial
X-HubSpot-Signature
con un hash SHA-256 de la concatenación del secreto de aplicación para tu aplicación y el cuerpo de la solicitud que estamos enviando.
Para verificar esta firma, concatena el secreto de la aplicación de tu aplicación y el cuerpo de solicitud no interpretado de la solicitud que estás manejando y obtén un hash SHA-256 del resultado. Compara el hash resultante con el valor de X-HubSpot-Signature
. Si estos valores coinciden, se confirma que esta solicitud es proveniente de HubSpot. O bien, la solicitud provino de otra persona que conoce el secreto de tu aplicación. Es importante mantener este valor en secreto.
Si estos valores no coinciden, es posible que esta solicitud haya sido manipulada en tránsito o que alguien esté falsificando notificaciones de webhook a tu punto de terminación.
Más información sobre la validación de solicitudes de firmas.
POST
que HubSpot envía a tu servicio a través de tus suscripciones de webhook no contarán para los límites de tasa de API de tu aplicación.
Puedes crear un máximo de 1000 suscripciones por aplicación. Si intentas crear más, recibirá una solicitud incorrecta 400 con el siguiente cuerpo: