Visão geral da API dos Webhooks, que permite a você assinar eventos que acontecem em uma conta da HubSpot com sua integração instalada.
crm.objects.contacts.read
.
POST
para o ponto de extremidade /webhooks/v3/{appId}/subscriptions
, a resposta incluirá um erro contendo o nome do escopo que você precisará definir nas configurações da interface do usuário do seu aplicativo público.GET
para webhooks/v3/{appId}/settings
.
Você precisará incluir o ID do aplicativo na solicitação, que pode ser encontrado abaixo do nome do aplicativo no painel Aplicativos ou na guia Autenticação nas configurações do aplicativo.
O objeto de configuração contém os seguintes campos:
Campo | Description |
---|---|
webhookUrl | A URL para a qual o HubSpot enviará notificações de webhook. A URL deve ser atendida por HTTPS. |
maxConcurrentRequests | O limite de concorrência para a URL do webhook. Este valor deve ser um número maior que cinco. |
PUT
para webhooks/v3/{appId}/settings
e inclua os seguintes campos no corpo da solicitação:
Campo | Description |
---|---|
targetUrl | A URL disponível publicamente para que o HubSpot indique onde as payloads do evento serão entregues. |
acúmulo | Configure os detalhes de acúmulo do webhook neste objeto. O objeto de acúmulo inclui os campos period e maxConcurrentRequests . |
período | Escala de tempo para esta configuração. Pode ser SECONDLY (por segundo) ou ROLLING_MINUTE (por minuto). |
maxConcurrentRequests | O número máximo de solicitações HTTP que o HubSpot tentará fazer para o seu aplicativo em um período de tempo determinado por period . |
associationChange
, o webhook disparará dois eventos para ambos os lados da associação.
contact.associationChange
disparará dois eventos, representando contact 1 to contact 2
e contact 2 to contact 1
.contact.associationChange
e company.associationChange
, receberá dois eventos. Estes representarão contact 1 to company 1
e company 1 to contact 1
.eventType
ao criar assinaturas por meio da API:
Tipo de assinatura | Escopo obrigatório | Descrição |
---|---|---|
contact.creation | crm.objects.contacts.read | Receba uma notificação se um contato for criado na conta de um cliente. |
contact.deletion | Receba uma notificação se um contato for excluído na conta de um cliente. | |
contact.merge | Receba uma notificação se um contato for mesclado com outro. | |
contact.associationChange | Receba uma notificação se um contato tiver uma associação adicionada ou removida entre ele e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto). | |
contact.restore | Receba uma notificação se um contato for restaurado da exclusão. | |
contact.privacyDeletion | Receba uma notificação se um contato for excluído por motivos de conformidade com a privacidade. | |
contact.propertyChange | Receba uma notificação se uma propriedade específica for alterada para um contato em uma conta. | |
company.creation | crm.objects.companies.read | Receba uma notificação se uma empresa for criada na conta de um cliente. |
company.deletion | Receba uma notificação se uma empresa for excluída na conta de um cliente. | |
company.propertyChange | Receba uma notificação se uma propriedade específica for alterada para uma empresa na conta de um cliente. | |
company.associationChange | Receba uma notificação se uma empresa tiver uma associação adicionada ou removida entre ela e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto). | |
company.restore | Receba uma notificação se uma empresa for restaurada da exclusão. | |
company.merge | Receba uma notificação se uma empresa for mesclada com outra. | |
deal.creation | crm.objects.deals.read | Receba uma notificação se um negócio for criado na conta de um cliente. |
deal.deletion | Receba uma notificação se um negócio for excluído na conta de um cliente. | |
deal.associationChange | Receba uma notificação se um negócio tiver uma associação adicionada ou removida entre ele e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto). | |
deal.restore | Receba uma notificação se um negócio for restaurado da exclusão. | |
deal.merge | Receba uma notificação se um negócio for mesclado com outro. | |
deal.propertyChange | Receba uma notificação se uma propriedade específica for alterada para um negócio na conta de um cliente. | |
ticket.creation | tickets | Receba uma notificação se um ticket for criado na conta de um cliente. |
ticket.deletion | Receba uma notificação se um ticket for excluído na conta de um cliente. | |
ticket.propertyChange | Receba uma notificação se uma propriedade específica for alterada para um ticket na conta de um cliente. | |
ticket.associationChange | Receba uma notificação se um ticket tiver uma associação adicionada ou removida entre ele e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto). | |
ticket.restore | Receba uma notificação se um tíquete for restaurado da exclusão. | |
ticket.merge | Receba uma notificação se um ticket for mesclado com outro. | |
product.creation | e-commerce | Receba uma notificação se um produto for criado na conta de um cliente. |
product.deletion | Receba uma notificação se um produto for excluído na conta de um cliente. | |
product.restore | Receba uma notificação se um produto for restaurado da exclusão. | |
product.merge | Receba uma notificação se um produto for mesclado com outro. | |
product.propertyChange | Receba uma notificação se um produto específico for alterado para um produto na conta de um cliente. | |
line_item.creation | Receba uma notificação se um item de linha for criado na conta de um cliente. | |
line_item.deletion | Receba uma notificação se um item de linha for excluído na conta de um cliente. | |
line_item.associationChange | Receba uma notificação se um item de linha tiver uma associação adicionada ou removida entre ele e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto). | |
line_item.restore | Receba uma notificação se um item de linha for restaurado da exclusão. | |
line_item.merge | Receba uma notificação se um item de linha for mesclado com outro. | |
line_item.propertyChange | Receba uma notificação se uma propriedade específica for alterada para um item de linha na conta de um cliente. |
Tipo de assinatura | Scope | Descrição |
---|---|---|
conversation.creation | conversations.read | Receba uma notificação se um novo thread for criado em uma conta. |
conversation.deletion | Receba uma notificação se um thread for arquivado ou excluído de forma reversível em uma conta. | |
conversation.privacyDeletion | Receba uma notificação se um thread for excluído permanentemente em uma conta. | |
conversation.propertyChange | Receba uma notificação se uma propriedade em um thread for alterada. | |
conversation.newMessage | Receba uma notificação se uma nova mensagem for recebida em um thread. |
num_unique_conversion_events
hs_lastmodifieddate
assignedTo
: o thread da conversa foi reatribuído ou teve sua atribuição cancelada. Se o thread foi reatribuído, propertyValue
será um ID de ator na payload dos webhooks; se teve sua atribuição cancelada, a propriedade estará vazia.status
: o status do thread de conversas foi alterado. Na carga útil dos webhooks, propertyValue
será OPEN
ou CLOSED
.isArchived
: o thread da conversa foi restaurado. O propertyValue
na payload dos webhooks sempre será FALSE
.Campo | Description |
---|---|
id | Um número que representa o ID exclusivo de uma assinatura. |
createdAt | A hora em milissegundos em que essa assinatura foi criada. |
createdBy | O ID associado ao usuário que criou a assinatura. |
inteligente | Indica se a assinatura está ativada e disparando notificações de forma ativa. O valor pode ser true ou false . |
eventType | O tipo de assinatura. A tabela no início desta seção inclui os tipos de assinatura disponíveis. |
propertyName | O nome da propriedade em que a assinatura monitorará as alterações. Isso é necessário apenas para tipos de assinatura de alteração de propriedade. |
GET
para webhooks/v3/{appId}/subscriptions
.
A resposta será um conjunto de objetos que representam suas assinaturas. Cada objeto conterá informações sobre a assinatura, como o ID, a data de criação, o tipo e se a assinatura está ou não ativa no momento. Veja a seguir o exemplo de uma resposta:
POST
para webhooks/v3/{appId}/subscriptions
.
No corpo da solicitação, você pode incluir os seguintes campos:
Campo | Description |
---|---|
eventType | O tipo de assinatura. |
propertyName | O nome da propriedade em que a assinatura monitorará as alterações. Isso é necessário apenas para tipos de assinatura de alteração de propriedade. |
inteligente | Indica se a assinatura está ativada e disparando notificações de forma ativa. O valor pode ser true ou false . |
id
, createdAt
ou createdBy
, pois esses campos são definidos automaticamente.
Por exemplo, o corpo da solicitação pode ser parecido com o seguinte:
eventType
deve ser um tipo de assinatura válido, conforme definido na seção acima, e propertyName
deve ser um nome de propriedade válido. Se um cliente não tiver uma propriedade definida que corresponda a esse valor, essa assinatura não resultará em notificação.
PUT
para webhooks/v3/{appId}/subscriptions/{subscriptionId}
.
No corpo da solicitação, inclua o seguinte:
Campo | Description |
---|---|
inteligente | Indica se a assinatura está ativada e disparando notificações de forma ativa. O valor pode ser true ou false . |
DELETE
para webhooks/v3/{appId}/subscriptions/{subscriptionId}
.
POST
contendo dados em formato JSON.
Para garantir que as solicitações que você está recebendo no ponto de extremidade do webhook sejam provenientes do HubSpot, o HubSpot preenche um cabeçalho X-HubSpot-Signature
com um hash SHA-256 criado usando o segredo do cliente do seu aplicativo combinado com os detalhes da solicitação. Saiba mais sobre como validar assinaturas de solicitação.
Use as tabelas abaixo para visualizar detalhes sobre os campos que podem estar contidos no conteúdo.
Campo | Description |
---|---|
objectId | O ID do objeto que foi criado, alterado ou excluído. Para contatos, é o ID do contato; para empresas, é o ID da empresa; para negócios, é o ID do negócio; e para conversas, é o ID do thread. |
propertyName | É enviado apenas para assinaturas de alteração de propriedade e é o nome da propriedade que foi alterada. |
propertyValue | É enviado apenas para assinaturas de alteração de propriedade e representa o novo valor definido para a propriedade que disparou a notificação. |
changeSource | A origem da alteração. Pode ser qualquer uma das origens de alteração que aparecem nos históricos de propriedades de contato. |
eventId | O ID do evento que disparou essa notificação. Não há garantias de que esse valor seja exclusivo. |
subscriptionId | O ID da assinatura que disparou uma notificação sobre o evento. |
portalId | O ID da conta da HubSpot do cliente onde o evento ocorreu. |
appId | O ID do aplicativo. Isso é usado caso você tenha vários aplicativos apontando para a mesmo URL de Webhook. |
occurredAt | Quando esse evento ocorreu, como uma marca de data/hora em milissegundos. |
eventType | O tipo de evento para o qual esta notificação se destina. Revise a lista de tipos de assinatura permitidos na seção de assinatura de webhooks acima. |
attemptNumber | Começando em 0, o número desta tentativa de notificação do seu serviço sobre esse evento. Se o serviço atingir o tempo limite ou lançar um erro conforme descrito na seção Tentativas abaixo, o HubSpot tentará enviar a notificação novamente. |
messageId | Somente será enviado quando um webhook estiver monitorando novas mensagens para um thread. É o ID da nova mensagem. |
messageType | Somente será enviado quando um webhook estiver monitorando novas mensagens para um thread. Representa o tipo de mensagem que você está enviando. Este valor pode ser MESSAGE ou COMMENT . |
Campo | Description |
---|---|
primaryObjectId | O ID do vencedor da mesclagem, que é o registro que permanece após a mesclagem. Na interface de mesclagem do HubSpot, é o registro à direita. |
mergedObjectIds | Uma matriz de IDs que representam os registros mesclados no vencedor da mesclagem. Na interface de mesclagem do HubSpot, é o registro à esquerda. |
newObjectId | O ID do registro criado como resultado da mesclagem. Isso é separado do primaryObjectId porque, em alguns casos, um novo registro é criado como resultado da mesclagem. |
numberOfPropertiesMoved | Um número inteiro que representa quantas propriedades foram transferidas durante a mesclagem. |
Campo | Description |
---|---|
associationType | O tipo de associação, que será um dos seguintes:
|
fromObjectId | O ID do registro do qual a alteração da associação foi feita. |
toObjectId | O ID do registro secundário no evento de associação. |
associationRemoved | Um booleano que representa o seguinte:
|
isPrimaryAssociation | Um booleano que representa o seguinte:
|
occurredAt
para cada notificação a fim de determinar quando o evento que disparou a notificação ocorreu.
O HubSpot também não garante que você receberá somente uma notificação para cada evento. Pode acontecer de o HubSpot enviar a mesma notificação várias vezes, embora isso provavelmente não ocorrerá.
contact.privacyDeletion
para receber notificações de Webhook quando um usuário realizar a exclusão de um contato em conformidade com a privacidade.
As notificações de exclusão de privacidade têm comportamentos especiais:
X-HubSpot-Signature
com um hash SHA-256 da concatenação do segredo do aplicativo e do corpo da solicitação que estamos enviando.
Para verificar essa assinatura, concatene o segredo do aplicativo e o corpo de solicitação não analisado da solicitação que você está gerenciando e obtenha um hash SHA-256 do resultado. Compare o hash resultante com o valor do cabeçalho X-HubSpot-Signature
. Se esses valores corresponderem, isso confirmará que essa solicitação veio da HubSpot. Ou a solicitação veio de outra pessoa que conhece o segredo do seu aplicativo. É importante manter esse valor em segredo.
Se esses valores forem diferentes, essa solicitação pode ter sido alterada em trânsito ou alguém pode ter falsificado as notificações de webhook no seu ponto de extremidade.
Saiba mais sobre como validar solicitações de assinatura.
POST
que o HubSpot envia ao seu serviço por meio das assinaturas de webhook não serão contabilizadas nos limites de taxa de API do aplicativo.
Você pode criar no máximo de 1.000 assinaturas por aplicativo. Se tentar criar mais de 1.000 assinaturas, você receberá uma solicitação 400 inválida com a seguinte mensagem: