Disponibilidade do plano
Clientes do Plano Escala podem receber respostas de pesquisas e respostas de feedback.
Clientes do Plano Observar podem receber gravações com base em segmentos de gravação. Disponível nos planos
. Agende uma ligação com nossa equipe de vendas para saber mais sobre os recursos do Plano Escala.
Clientes do Plano Escala podem receber respostas de pesquisas e respostas de feedback.
Clientes do Plano Observar podem receber gravações com base em segmentos de gravação.
Visão geral
Os Webhooks do Hotjar permitem que você seja notificado quando um evento ocorre, como quando um visitante do seu site envia uma nova resposta de pesquisa. Você configura um "webhook" (uma URL) no seu próprio site ou no site de uma empresa parceira, compartilha esse webhook com o Hotjar e, em seguida, recebe cargas de eventos quando os eventos ocorrem. Portanto, os Webhooks são uma maneira de enviar dados para seus sistemas em tempo real.
Em termos técnicos:
- Você configura um webhook, geralmente no seu próprio servidor/site, com uma URL única.
- Dentro da interface do Hotjar, você insere a URL do webhook em um widget de Pesquisa, widget de Feedback ou um Segmento de Gravação.
- O Hotjar então envia solicitações POST HTTP para a URL do seu webhook sempre que uma nova pesquisa ou resposta de feedback é criada, ou quando uma nova gravação que corresponde ao seu segmento de gravação é criada.
Por que usar Webhooks?
Os Webhooks complementam a API do Hotjar. Enquanto a API é mais útil para exportação em massa (download), os Webhooks são úteis para receber imediatamente respostas de pesquisas e feedback, ou gravações com base em segmentos de gravação conforme são criadas. Você deve considerar o uso de Webhooks se:
- Você deseja receber dados imediatamente.
- Você deseja enviar dados para seus sistemas, talvez um data warehouse, sem precisar consultar nossa API.
- Um parceiro oferece uma integração com o Hotjar via Webhooks.
Como os Webhooks funcionam
Quando um evento ocorre, o Hotjar enviará uma mensagem para cada Webhook configurado:
- A mensagem é enviada como uma solicitação POST HTTP para o seu webhook.
- A solicitação será codificada como UTF-8.
- O tipo de conteúdo será
application/json. - O corpo da solicitação será, portanto, um objeto JSON com as seguintes propriedades:
-
event- string. O valor desta propriedade é o nome do evento. No momento da escrita, serásurvey_response,feedback_response,recordingoutest_message. -
version- inteiro. Esta propriedade está reservada para uso futuro, atualmente sempre será definida como o número 1. -
data- O valor desta propriedade será um objeto JSON com os dados do evento. Os campos do objeto são específicos para cada evento (veja abaixo).
-
Enviamos os eventos assim que possível após sua ocorrência; na prática, você deve receber uma mensagem em apenas alguns segundos. Em circunstâncias raras, as mensagens podem ser atrasadas, mas cada evento inclui a data e hora em que ocorreram, então recomendamos usar isso em vez da data e hora em que seu webhook recebe uma mensagem.
O Hotjar não garante que a ordem das mensagens recebidas corresponda à ordem em que os eventos ocorreram. Alguns eventos contêm um parâmetro index que pode ser usado para ordenação.
Requisitos do Webhook
Seu webhook deve atender aos seguintes requisitos:
- O webhook deve ser HTTPS (TLS).
- O servidor deve responder dentro de 10 segundos.
- O servidor deve responder com qualquer código de status HTTP 2XX (qualquer código de status HTTP entre 200 e 299).
- O servidor deve aceitar qualquer tipo de evento inesperado sem retornar um erro.
- O servidor deve lidar com mensagens duplicadas acidentais. Embora o Hotjar faça todo o esforço para enviar uma mensagem para seu webhook apenas uma vez, não podemos garantir. Portanto, seu webhook deve confiar no identificador único na mensagem para deduplicação.
Tentativas
O Hotjar tentará reenviar o envio de um webhook no caso de um erro. O Hotjar tentará até seis vezes, pausando entre as tentativas:
| Tentativa de reenvio | Atraso antes de reenviar |
| 1 | 30 segundos |
| 2 | 1 minuto |
| 3 | 2 minutos |
| 4 | 5 minutos |
| 5 | 10 minutos |
| 6 | 20 minutos |
O Hotjar tentará reenviar o envio até que ocorra uma das seguintes situações:
- O webhook responde com um código de status 2XX (ou seja, uma resposta bem-sucedida).
- O webhook responde com um código de status 410 (no qual o Hotjar excluirá o webhook do seu widget de pesquisa, widget de feedback ou segmento de gravação).
- O máximo de 6 tentativas é atingido.
Assinaturas e prevenção de replay
Os webhooks do Hotjar usam duas técnicas de segurança para garantir que você possa verificar se os payloads que você recebe são realmente do Hotjar:
- Todos os payloads enviados para seus webhooks são assinados por HMAC; é altamente recomendável que você verifique a assinatura para ter certeza de que os dados realmente vieram do Hotjar
- Todos os payloads incluem um carimbo de data/hora para que você possa verificar se os dados foram enviados pelo Hotjar nos últimos minutos. Isso permite que você mitigue ataques de replay, pois você pode ter certeza de que o Hotjar enviou esses dados para você nos últimos minutos.
Verificando a assinatura do payload
A assinatura é enviada para seu webhook como um cabeçalho personalizado chamado com-hotjar-signature. Para verificar se a assinatura é válida, você precisa:
- Gerar uma assinatura a partir do payload que você recebeu
- Verificar se sua assinatura gerada corresponde à assinatura no cabeçalho
Você pode gerar uma assinatura usando HMAC-SHA3-256, o payload (como bytes) e uma chave de assinatura. Para obter a chave de assinatura para o seu site Hotjar, abra as Configurações de Integração de Webhooks dentro do aplicativo Hotjar e clique em "Visualizar chave do webhook".
Depois de gerar uma assinatura, você pode compará-la com a assinatura enviada no cabeçalho com-hotjar-signature. Se os dois valores corresponderem, a assinatura foi validada com sucesso; se não corresponderem, você deve descartar o payload e não agir sobre ele.
Protegendo contra ataques de replay
A assinatura HMAC permite que você verifique que o Hotjar criou o payload do webhook, mas um atacante poderia enviar o mesmo payload novamente (e novamente!) e a verificação da assinatura seria bem-sucedida. Para se proteger contra esses "ataques de replay", também enviamos um carimbo de data/hora dentro do payload; se a data e hora especificadas no carimbo de data/hora forem muito antigas (sugerimos mais de 5 minutos no passado), você deve descartar o payload.
Para verificar o carimbo de data/hora, você deve primeiro verificar a assinatura HMAC, conforme descrito acima, antes de verificar o carimbo de data/hora, pois um atacante poderia simplesmente enviar um carimbo de data/hora válido dentro de um payload. O carimbo de data/hora é um carimbo de data/hora UNIX, o que significa que é o número de segundos desde o início do Unix. Você pode ver exemplos de carimbos de data/hora nos payloads de exemplo abaixo.
Payloads
O Hotjar pode adicionar campos adicionais a esses payloads no futuro, portanto, seu webhook não deve gerar um erro quando um campo estiver presente e você não estiver esperando. Observe que qualquer campo pode ser definido como nulo, além do tipo declarado.
Resposta de Feedback
Nome do evento: feedback_response
-
IDinteiro - O identificador único da resposta de feedback. -
índiceinteiro - O índice desta resposta de feedback dentro do widget de feedback. -
feedback_response_urlstring - O link para visualizar a resposta no aplicativo Hotjar. -
mensagemstring - A mensagem inserida pelo usuário. -
e-mailstring - O endereço de e-mail inserido pelo usuário, se houver. -
emoçãointeiro - O score de emoção/reação (1 a 5) selecionado pelo usuário. -
criado_strstring - A data e hora em que a resposta de feedback foi criada como uma string ISO 8601. -
criado_timestampinteiro - A data e hora em que a resposta de feedback foi criada como um carimbo de data/hora UNIX. -
perguntastring - A pergunta no widget de feedback que o usuário respondeu. -
ID_siteinteiro - O identificador único do Site Hotjar. -
ID_feedbackinteiro - O identificador único do widget de feedback. -
nome_feedbackstring - O nome do widget de feedback. -
URL_feedbackstring - O link para visualizar o widget de feedback no aplicativo Hotjar. -
navegadorstring - O nome do tipo de navegador usado para enviar a resposta de feedback. -
dispositivostring - O tipo de dispositivo usado para enviar a resposta de feedback. Será "tablet", "mobile" ou "desktop". -
SOstring - O nome do sistema operacional usado para enviar a resposta de feedback. -
nome_paísstring - O país de onde a resposta de feedback foi criada. -
código_paísstring - O código do país de onde a resposta de feedback foi criada. Consulte os códigos de país ISO 3166 para obter uma lista desses códigos. -
largura_janelainteiro - A largura da janela do usuário ao enviar a resposta de feedback. -
altura_janelainteiro - A altura da janela do usuário ao enviar a resposta de feedback. -
ID_usuário_hotjarstring - O ID de usuário Hotjar para o usuário que enviou a resposta de feedback (um UUID).
Resposta da Pesquisa
Nome do evento: resposta_pesquisa
-
IDnúmero inteiro - O identificador único da resposta da pesquisa. -
índicenúmero inteiro - O índice desta resposta da pesquisa dentro da pesquisa. -
api_idstring - O ID público (inclui UUID) referente a esta resposta da pesquisa. -
response_urlstring - O link para visualizar a resposta dentro do aplicativo Hotjar. -
site_idnúmero inteiro - O identificador único do Site Hotjar. -
survey_idnúmero inteiro - O identificador único da pesquisa. -
survey_namestring - O nome da pesquisa. -
survey_urlstring - O link para visualizar a pesquisa dentro do aplicativo Hotjar. -
dispositivostring - O tipo de dispositivo usado para enviar a resposta da pesquisa. Será "tablet", "mobile" ou "desktop". -
navegadorstring - O nome do tipo de navegador usado para enviar a resposta da pesquisa. -
sostring - O nome do sistema operacional usado para enviar a resposta da pesquisa. -
código_do_paísstring - O código do país de onde a resposta da pesquisa foi criada. Consulte os códigos de país ISO 3166 para obter uma lista desses códigos. -
nome_do_paísstring - O país de onde a resposta da pesquisa foi criada. -
ID_de_usuário_Hotjarstring - O ID de usuário Hotjar para o usuário que enviou a resposta da pesquisa (um UUID). -
criado_strstring - A data e hora em que a resposta da pesquisa foi criada como uma string ISO 8601. -
criado_timestampnúmero inteiro - A data e hora em que a resposta da pesquisa foi criada como um carimbo de data/hora UNIX. -
está_completoboolean - Indica se a resposta da pesquisa está concluída ou não. -
url_de_gravaçãostring - O link para a Gravação Hotjar que contém essa resposta da pesquisa, se existir. -
url_de_origem_da_respostastring - O URL do site onde o usuário enviou a resposta da pesquisa. -
largura_da_janelanúmero inteiro - A largura da janela do usuário ao enviar a resposta da pesquisa. -
altura_da_janelanúmero inteiro - A altura da janela do usuário ao enviar a resposta da pesquisa. -
atributos_do_usuárioobjeto - Os atributos do usuário fornecidos pela API de identificação do Hotjar. Cada chave e valor no objeto representam o seguinte:-
chavestring - O nome do atributo do usuário. -
valorstring/número inteiro/número decimal/booleano/data e hora - O valor do atributo do usuário.
-
-
perguntasarray/list - As perguntas e respostas da pesquisa. Cada elemento possui os seguintes campos:-
id_perguntanúmero inteiro - O ID único da pergunta. -
texto_perguntatexto - O texto da pergunta. -
tipo_perguntatexto - O tipo de pergunta. Isso será um dosreação,texto-longo,texto-curto,opção-única,opção-múltipla,e-mail,avaliação-1-5,avaliação-1-7,npsoudesconhecido. -
respostasarray/list - As respostas para a pergunta. Cada resposta possui os seguintes campos:-
respostatexto - A resposta que o usuário deu. -
comentáriotexto - O comentário que o usuário deixou (se houver).
-
-
Por favor, observe que as perguntas que o usuário não respondeu não estão incluídas na carga útil.
Gravação
Nome do evento: gravação
-
IDinteiro - O identificador único da gravação. -
site_idinteiro - O identificador único do Site Hotjar. -
country_namestring - O país de onde ocorreu a sessão que foi gravada. -
country_codestring - O código do país de onde ocorreu a sessão que foi gravada. Consulte os códigos de país ISO 3166 para obter uma lista desses códigos. -
hotjar_user_idstring - O ID de usuário Hotjar do usuário cuja sessão foi gravada (um UUID). -
devicestring - O tipo de dispositivo usado pelo usuário cuja sessão foi gravada. Será "tablet", "mobile" ou "desktop". -
browserstring - O nome do tipo de navegador usado pelo usuário cuja sessão foi gravada. -
browser_versionstring - A versão do navegador usada pelo usuário cuja sessão foi gravada. -
osstring - O nome do sistema operacional usado pelo usuário cuja sessão foi gravada. -
os_versionstring - A versão do sistema operacional usado pelo usuário cuja sessão foi gravada. -
action_countinteiro - O número de ações realizadas pelo usuário na sessão. -
rageclick_occurredbooleano - Um clique de raiva ocorreu durante a sessão que foi gravada. -
uturn_occurredbooleano - Um retorno rápido ocorreu durante a sessão que foi gravada. -
created_strstring - A data e hora em que a gravação foi criada como uma string ISO 8601. -
created_timestampinteiro - A data e hora em que a gravação foi criada como um carimbo de data/hora UNIX. -
referrerstring - A página em que o usuário estava antes de iniciar sua sessão no Hotjar, se disponível. -
window_widthinteiro - A largura da janela do usuário quando a sessão foi gravada. -
window_heightinteiro - A altura da janela do usuário quando a sessão foi gravada. -
durationinteiro - O comprimento da sessão gravada em milissegundos. -
relevance_scoreinteiro - O score de relevância é baseado em diversos fatores para determinar o quão útil uma gravação provavelmente será. Esses fatores incluem duração da sessão, número de páginas visitadas, número de ações, cliques de raiva, retornos rápidos, erros do console, digitação, eventos enviados via JavaScript, e interação com formulários. -
page_urlsarray/lista - A lista de URLs das páginas visitadas durante a sessão. -
event_namesarray/lista - Os eventos que ocorreram durante a sessão gravada conforme fornecido pela API de eventos Hotjar. -
landing_page_urlstring - A página em que o usuário estava quando sua sessão no Hotjar começou. -
exit_page_urlstring - A página em que o usuário estava quando sua sessão no Hotjar terminou. -
recording_urlstring - O link para visualizar a gravação dentro do aplicativo Hotjar. -
user_attributesobject - Os atributos do usuário fornecidos pela API de identificação do Hotjar. Cada chave e valor no objeto representam o seguinte:-
keystring - O nome do atributo do usuário. -
valuestring/integer/float/boolean/datetime - O valor do atributo do usuário.
-
Mensagem de Teste
Nome do evento: test_message
Este evento é enviado ao usar o aplicativo Hotjar para enviar uma mensagem de teste para o webhook.
amostra string - Sempre definido como a string "dados".
Downgrade do Site
Nome do evento: site_downgrade
Este evento é enviado quando o plano assinado do Site Hotjar é reduzido e não pode mais enviar mensagens para webhooks. Até que o site faça um upgrade novamente, nenhuma outra mensagem será enviada.
site_id inteiro - O ID único do site que foi reduzido.
Exemplos de payloads
Resposta de Feedback
{
"event": "feedback_response",
"data": {
"id": 32,
"index": 1,
"feedback_response_url": "https://fictitious.feedback-response.com/14/32",
"message": "Mensagem padrão",
"email": null,
"emotion": 4,
"created_str": "2023-06-07T11:26:42.287596Z",
"created_timestamp": 1686137202,
"question": "Esta é a pergunta inicial",
"site_id": 42,
"feedback_id": 42,
"feedback_name": "Feedback Padrão",
"feedback_url": "https://insights.hotjar.com/url/goes/here",
"navegador": "Chrome",
"dispositivo": "Desktop",
"sistema_operacional": "Windows",
"nome_do_país": "Malta",
"código_do_país": "MT",
"largura_da_janela": 1024,
"altura_da_janela": 768,
"ID_do_hotjar_user": "dbbc63df-1b09-4631-a837-255e162788c0"
},
"versão": 1,
"timestamp": 473385600
}Resposta da Pesquisa
{
"event": "survey_response",
"data": {
"id": 42,
"index": 1,
"api_id": "response_f8ccb724-8110-48d0-8715-2138be7a9c06",
"response_url": "https://insights.hotjar.com/link/goes/here",
"site_id": 42,
"survey_id": 42,
"survey_name": "Test survey",
"survey_url": "https://insights.hotjar.com/link/goes/here",
"device": "Desktop",
"browser": "Chrome",
"os": "Windows",
"country_code": "MT",
"country_name": "Malta",
"hotjar_user_id": "90fc1180-90b4-463c-9d1f-3415477f0168",
"created_str": "2023-06-07T11:13:05.193076Z",
"created_timestamp": 1686136385,
"is_complete": false,
"recording_url": "https://insights.hotjar.com/r?site=14&recording=12345",
"response_origin_url": "https://www.example.com",
"window_width": 1280,
"window_height": 1024,
"user_attributes": {
"test_ua_one": "value",
"test_ua_two": true
},
"questions": [
{
"question_id": 1,
"questiom_text": "Question 1",
"question_type": "short-text",
"answers": [
{
"answer": "Answer to question 1 goes here",
"comment": null
}
]
},
{
"question_id": 2,
"questiom_text": "Question 2",
"question_type": "long-text",
"answers": [
{
"answer": "Answer to question 2 goes here\n\n new line",
"comment": null
}
]
},
{
"question_id": 3,
"questiom_text": "Question 3",
"question_type": "email",
"answers": [
{
"answer": "example@example.com",
"comment": null
}
]
},
{
"question_id": 4,
"questiom_text": "Question 4",
"question_type": "single-option",
"answers": [
{
"answer": "radio button?",
"comment": "comment"
}
]
},
{
"question_id": 5,
"questiom_text": "Question 5",
"question_type": "multiple-option",
"answers": [
{
"answer": "this",
"comment": "comment"
},
{
"answer": "that",
"comment": "comment"
}
]
},
{
"question_id": 6,
"questiom_text": "Question 6",
"question_type": "1-5-rating",
"answers": [
{
"answer": "3",
"comment": null
}
]
},
{
"question_id": 7,
"questiom_text": "Question 7",
"question_type": "1-7-rating",
"answers": [
{
"answer": "3",
"comment": null
}
]
},
{
"question_id": 8,
"questiom_text": "Question 8",
"question_type": "nps",
"answers": [
{
"answer": "3",
"comment": null
}
]
},
{
"question_id": 9,
"questiom_text": "Question 9",
"question_type": "reaction",
"answers": [
{
"answer": "3",
"comment": null
}
]
},
{
"question_id": 10,
"questiom_text": "Question 10",
"question_type": "short-text",
"answers": [
{
"answer": "",
"comment": null
}
]
}
]
},
"version": 1,
"timestamp": 473385600
}Gravação
{
"event": "recording",
"data": {
"id": 42,
"site_id":14,
"country_name":"Malta",
"country_code":"MT",
"hotjar_user_id":"90fc1180-90b4-463c-9d1f-3415477f0168",
"device":"desktop",
"browser":"Chrome",
"browser_version":"51.0.2704",
"os":"Mac OS X",
"os_version":"10.11.2",
"action_count":42,
"user_attributes":{
"test_ua_one":"value",
"test_ua_two":true
},
"rageclick_occurred":true,
"uturn_occurred":true,
"created_str":"2023-06-07T11:13:05.193076Z",
"created_timestamp":1686136385,
"referrer":"https://www.example.com",
"window_width":1024,
"window_height":1280,
"duration":50000,
"relevance_score":4,
"page_urls":[
"https://www.mysite.com",
"https://www.mysite.com/login"
],
"event_names":[
"Pricing Element Viewed",
"Clicked Login Button"
],
"landing_page_url":"https://www.mysite.com",
"exit_page_url":"https://www.mysite.com/login",
"recording_url":"https://insights.hotjar.com/r?site=14&recording=123456"
},
"version": 1,
"timestamp": 473385600
}Mensagem de Teste
{
"event": "test_message",
"version": 1,
"timestamp": 473385600,
"data": {
"sample": "data"
}
}Downgrade do Site
{
"event": "site_downgrade",
"version": 1,
"timestamp": 473385600
"data": {
"site_id": 12345
}
}