Visão geral dos webhooks
Os webhooks permitem que o ChatLab notifique os seus sistemas no momento em que algo acontece nos seus chatbots. Em vez de consultar repetidamente a Management API ou exportar dados manualmente, regista um endpoint HTTPS e o ChatLab envia um pedido HTTP POST assinado para o mesmo em tempo real - quando um visitante deixa um lead, submete um formulário de contacto, avalia uma conversa, solicita um operador humano ou quando uma ação de IA é executada.
Utilizações típicas:
- enviar novos leads diretamente para o seu CRM no segundo em que são capturados
- notificar a sua equipa no Slack quando um visitante solicita Live Chat (chat em direto)
- alimentar as suas próprias ferramentas de análise com avaliações e resumos de conversas
- monitorizar a execução de ações de IA e alertar sobre erros
Disponibilidade: os webhooks estão disponíveis a partir do plano Standard (funcionalidade: Webhooks).
Onde configurar: na aplicação de administração, aceda a Account settings -> Webhooks (Definições de conta -> Webhooks) (logo ao lado da secção Management API). Os webhooks funcionam ao nível da conta - um único endpoint pode receber eventos de todos os seus bots ou de um subconjunto filtrado.
Configurar um endpoint
- Aceda a Account settings -> Webhooks (Definições de conta -> Webhooks) e clique em Create endpoint (Criar endpoint).
- Preencha o formulário do endpoint:
- Name (Nome) - uma etiqueta para sua própria referência, por exemplo, "Sincronização de CRM" ou "Alertas do Slack".
- URL - o endereço HTTPS para o qual o ChatLab enviará os eventos via POST.
- Events (Eventos) - selecione os tipos de eventos que este endpoint recebe (consulte o catálogo abaixo). Selecione apenas o necessário; eventos de grande volume como
ai_action.executedpodem gerar muito tráfego. - Bot filter (Filtro de bots) (opcional) - restrinja o endpoint a bots específicos. Deixe em branco para receber eventos de todos os bots da sua conta.
- Custom form filter (Filtro de formulário personalizado) (opcional) - encaminha as submissões de um formulário personalizado para este endpoint. Limita apenas o evento
custom_form.submitted; todos os outros eventos subscritos (leads, pedidos de contacto, conversas, Live Chat, ações de IA) são entregues independentemente desta definição.
- Submeta. O secret (segredo) do endpoint é apresentado exatamente uma vez na janela de confirmação - copie-o agora e guarde-o em segurança. Irá precisar dele para verificar assinaturas (consulte a secção Segurança abaixo). O texto simples não pode ser recuperado mais tarde.
Cada endpoint também possui:
- Controlo para ativar/desativar - pause as entregas sem eliminar o endpoint. Os endpoints desativados descartam eventos de forma silenciosa (não ficam em fila de espera para envio posterior).
- Send sample event (Enviar evento de exemplo) - envia um pedido de teste assinado para o seu URL para verificar o seu recetor de ponta a ponta. Pode escolher o tipo de evento e editar os valores de exemplo antes de enviar, para que o seu processador veja dados realistas. O teste chega como uma entrega normal com o
eventTypecorrespondente à sua seleção (ou comowebhook.testpara uma verificação simples de conectividade). - Roll secret (Renovar segredo) - gera um novo segredo e invalida o anterior. Utilize esta opção se o segredo tiver sido exposto. O novo segredo também é apresentado apenas uma vez. Atualize o seu recetor antes de proceder à renovação, caso contrário, as entregas falharão na verificação de assinatura do seu lado.
- Delivery log (Registo de entregas) - uma lista de entregas recentes por endpoint com data/hora, tipo de evento, estado HTTP devolvido pelo seu servidor e tempo de resposta. As entregas com falha e as pausas por circuit breaker são visíveis aqui. O registo é mantido durante 14 dias.
Envelope do evento
Cada entrega é um HTTP POST com Content-Type: application/json. O corpo do pedido tem sempre o mesmo envelope; o objeto data varia consoante o tipo de evento:
{
"eventId": "9f1c1c8e-6a2b-4b9e-9d2f-3f8a1e2b4c5d",
"eventType": "lead.created",
"timestamp": "2026-08-13T14:22:31Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": { }
}
eventId- identificador único por evento. Utilize-o para deduplicação se o seu processamento tiver de ser idempotente.eventType- um dos tipos documentados abaixo; enviado também no cabeçalhoX-ChatLab-Event.timestamp- data e hora UTC em formato ISO 8601 em que o evento ocorreu.botId/botName- o bot ao qual o evento pertence.conversationId/sessionId- o contexto da conversa, quando aplicável.
Catálogo de eventos
lead.created
Disparado quando um visitante submete os seus dados de contacto - através do formulário de recolha de leads, do pré-formulário de Live Chat ou de um formulário personalizado utilizado para recolha de leads.
{
"eventId": "9f1c1c8e-6a2b-4b9e-9d2f-3f8a1e2b4c5d",
"eventType": "lead.created",
"timestamp": "2026-08-13T14:22:31Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"email": "jane.doe@example.com",
"name": "Jane Doe",
"phone": "+1 555 0123",
"source": "LEAD_COLLECTION_FORM",
"formCodeName": "lead_form",
"formName": "Lead form",
"fields": [
{"name": "email", "value": "jane.doe@example.com", "type": "email"},
{"name": "company", "value": "Acme Inc.", "type": "text"},
{"name": "topics", "value": ["Billing", "Delivery"], "type": "multichoice"},
{"name": "attachment", "value": "https://api.chatlab.com/aichat/customform/download?key=...&token=...", "type": "file"}
],
"pageUrl": "https://acme.com/pricing"
}
}
source- como os dados de contacto foram capturados:LEAD_COLLECTION_FORM(formulário de recolha de leads),LIVE_CHAT_FORM(pré-formulário de Live Chat),CONVERSATION(a IA recolheu os detalhes durante a conversa),ADMIN_DATA_UPDATEouUPDATE_CLIENT_CONTEXT(editado do lado do ChatLab). As submissões do formulário de suporte humano nunca disparam este evento - disparamcontact_form.submitted.email,name,phone- os detalhes de contacto mapeados no registo do lead.- Quando é utilizado um formulário personalizado para recolha de leads, todos os campos definidos nesse formulário são incluídos em
fields, na ordem do formulário, eformCodeName/formNameidentificam o formulário. No formulário de leads clássico, ambos sãonullefieldsé um array vazio. - Cada entrada em
fieldssegue o formato{name, value, type}.nameé o nome técnico do campo, que permanece inalterado perante edições na etiqueta - utilize-o para mapeamento no seu CRM. - Para campos do tipo
multichoice,valueé um array das opções selecionadas. Os campos de caixa de seleção são entradas individuais com valores"true"/"false". - Para campos do tipo
file,valueé uma ligação para descarregar o ficheiro carregado; o webhook nunca transporta o conteúdo dos ficheiros. pageUrl- a página em que o visitante se encontrava no momento da submissão.
contact_form.submitted
Disparado quando um visitante submete o formulário de contacto para suporte humano ou um formulário personalizado utilizado para contacto humano.
{
"eventId": "3a7b9c2d-1e4f-4a6b-8c0d-5e2f7a9b1c3d",
"eventType": "contact_form.submitted",
"timestamp": "2026-08-13T14:25:02Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"email": "jane.doe@example.com",
"message": "I need help with my last invoice.",
"source": "CUSTOM_FORM",
"formCodeName": "contact_form",
"formName": "Contact form",
"fields": [
{"name": "email", "value": "jane.doe@example.com", "type": "email"},
{"name": "order_number", "value": "A-10293", "type": "text"},
{"name": "message", "value": "I need help with my last invoice.", "type": "textarea"}
]
}
}
email- o endereço indicado pelo visitante, para o qual a sua equipa de suporte deve responder.source-CUSTOM_FORMquando o formulário de contacto é baseado num formulário personalizado,CONTACT_FORMpara o formulário integrado predefinido.formCodeName/formName- identificam o formulário personalizado associado ao pedido; ambos sãonullpara o formulário integrado.- Quando é utilizado um formulário personalizado, todos os campos definidos nesse formulário são incluídos em
fields(no mesmo formato{name, value, type}delead.created). Com o formulário de contacto integrado, apenasemailemessagesão preenchidos,fieldsé um array vazio e os identificadores do formulário sãonull. message- o campo de mensagem mapeado, ou a junção de todos os valores preenchidos caso o formulário não defina um campo de mensagem específico.
custom_form.submitted
Disparado para todas as submissões de formulários personalizados, independentemente da finalidade do formulário. Tenha em atenção que os formulários cuja finalidade é a recolha de leads ou o contacto humano também disparam os respetivos eventos dedicados lead.created / contact_form.submitted - subscreva um ou outro dependendo de pretender a visão genérica ou especializada, e proceda à deduplicação através de conversationId + timestamp se subscrever ambos.
{
"eventId": "6c1d8e3f-2a5b-4c7d-9e0f-1a4b6c8d0e2f",
"eventType": "custom_form.submitted",
"timestamp": "2026-08-13T14:27:45Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"formCodeName": "warranty_claim",
"formName": "Warranty claim",
"fields": [
{"name": "order_number", "value": "A-10293", "type": "text"},
{"name": "issue", "value": "Damaged on arrival", "type": "textarea"},
{"name": "photo", "value": "https://api.chatlab.com/aichat/customform/download?key=...&token=...", "type": "file"}
],
"purpose": "STANDALONE"
}
}
formCodeName- o identificador técnico estável do formulário, inalterado quando muda o nome do formulário; utilize-o para encaminhar submissões no seu próprio sistema.formNameé a etiqueta de visualização apresentada aos visitantes.fieldsutiliza as mesmas entradas{name, value, type}quelead.created: os valores de seleção múltipla são arrays e os valores de ficheiros são ligações para descarregar.purpose-STANDALONE,LEAD_COLLECTIONouHUMAN_CONTACT, dependendo de como o formulário está associado ao chatbot.
conversation.started
Disparado quando um visitante envia a primeira mensagem de uma nova conversa.
{
"eventId": "8e2f0a4b-3c6d-4e8f-a1b2-2c5d7e9f1a3b",
"eventType": "conversation.started",
"timestamp": "2026-08-13T14:20:11Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"firstMessage": "Do you ship to Canada?",
"chatSource": "WIDGET",
"byAdmin": false,
"countryCode": "PL",
"ipAddress": "83.12.44.7"
}
}
firstMessage- o texto exato da mensagem de abertura do visitante.nullse a conversa tiver sido aberta sem conteúdo de mensagem.chatSource- o canal através do qual a conversa foi iniciada:WIDGET,WHATSAPP,MESSENGER,VOICE,VOICE_PHONE,API,BOOKING,AIRBNBouIDOBOOKING.byAdmin-truequando a conversa tem origem na pré-visualização do chatbot dentro do painel de administração do ChatLab e não de um visitante real. Utilize este campo para evitar o envio de conversas de teste para o seu CRM.countryCode- código de país ISO obtido através do endereço IP do visitante,nullse não foi possível determinar.ipAddress- o endereço IP do visitante tal como visto pelo ChatLab,nullquando indisponível. Trate-o como dado pessoal ao abrigo do RGPD e armazene-o apenas se possuir uma base de licitude válida.
conversation.rated
Disparado quando um visitante avalia a resposta de um bot com um polegar para cima ou para baixo (consulte Classificação de conversas).
{
"eventId": "1b4c6d8e-5f0a-4b2c-8d3e-4f7a9b1c3d5e",
"eventType": "conversation.rated",
"timestamp": "2026-08-13T14:31:09Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"rating": "POSITIVE"
}
}
rating-POSITIVEouNEGATIVE. Remover uma avaliação não dispara o evento, pelo que nunca receberá um valor neutro.
conversation.summarized
Disparado quando o ChatLab gera um resumo de uma conversa terminada.
{
"eventId": "4d7e9f1a-6b2c-4d4e-9f0a-5b8c0d2e4f6a",
"eventType": "conversation.summarized",
"timestamp": "2026-08-13T14:45:00Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"summary": "Visitor asked about shipping to Canada and delivery times. The bot confirmed availability and quoted 5-7 business days. Visitor left satisfied.",
"language": "en"
}
}
summary- o texto do resumo gerado. Os resumos são produzidos alguns minutos após a conversa ficar inativa, pelo que este evento chega mais tarde do que os restantes eventos da conversa.language- código ISO do idioma em que o resumo foi redigido, acompanhando o idioma da conversa.
client.summarized
Disparado quando o ChatLab atualiza o perfil de IA de um cliente. O perfil é reconstruído a partir do perfil anterior em conjunto com o resumo da conversa acabada de terminar, pelo que este evento segue o conversation.summarized para a mesma conversa. Os clientes são identificados por e-mail, razão pela qual o endereço é repetido no nível superior de data.
{
"eventId": "b5d8f1a3-7c2e-4d9b-a6f0-1e3c5a7b9d2f",
"eventType": "client.summarized",
"timestamp": "2026-08-18T09:12:04Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"clientEmail": "jane.doe@example.com",
"client": {
"email": "jane.doe@example.com",
"name": "Jane Doe",
"phone": "+1 555 0123",
"countryCode": "PL",
"ipAddress": "83.12.44.7"
},
"clientSummary": "Returning customer interested in international shipping. Asked about delivery times to Canada twice and about return costs once."
}
}
clientEmail- o identificador para associar o cliente ao seu próprio CRM. Énullpara visitantes anónimos que nunca indicaram um endereço, sendo que o evento ainda assim é disparado para estes - ignore essas entregas caso a sua integração seja indexada por e-mail.client- o registo de contacto que o ChatLab mantém para esta pessoa:email,name,phone,countryCodeeipAddress. Todas as chaves estão sempre presentes; os valores desconhecidos sãonull.clientSummary- o texto integral do perfil em texto simples, não um diff. Substitui qualquer resumo anterior, pelo que deve guardá-lo sobrescrevendo o registo existente em vez de anexar.- O perfil é reconstruído apenas para bots com a funcionalidade memória de chat ativa, e apenas para conversas que estiveram inativas tempo suficiente para serem resumidas - conte receber este evento alguns minutos após o fim da conversa, não de forma imediata.
live_chat.requested
Disparado quando a IA transfere a conversa para o Live Chat, quer porque o visitante solicitou um assistente humano, quer porque o bot determinou que era necessária intervenção humana.
{
"eventId": "7a0b2c4d-8e3f-4a5b-b0c1-6d9e1f3a5b7c",
"eventType": "live_chat.requested",
"timestamp": "2026-08-13T14:33:20Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"requestedBy": "AI"
}
}
requestedBy- atualmente sempreAI, dado que a transferência é sempre desencadeada pela ação de Live Chat do bot, incluindo nos casos em que o visitante o solicita expressamente por palavras. Trate-o como um enum aberto: processe valores desconhecidos em vez de validar estritamente com base emAI.- O evento indica que foi solicitada uma transferência, não que um operador tenha aceitado a mesma. Aguarde pelo evento
live_chat.startedpara essa confirmação.
live_chat.started
Disparado quando um operador entra na sessão e o Live Chat tem início efetivo.
{
"eventId": "0c3d5e7f-9a4b-4c6d-a1b2-7e0f2a4b6c8d",
"eventType": "live_chat.started",
"timestamp": "2026-08-13T14:33:55Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {}
}
- O objeto
dataencontra-se propositadamente vazio. Tudo o que precisa está no envelope:botIdidentifica o chatbot econversationId/sessionIdassociam o evento à conversa para a qual já recebeu o eventolive_chat.requested.
live_chat.ended
Disparado quando a sessão de Live Chat termina.
{
"eventId": "2e5f7a9b-0c5d-4e7f-b2c3-8f1a3b5c7d9e",
"eventType": "live_chat.ended",
"timestamp": "2026-08-13T14:52:41Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"durationSeconds": 1126
}
}
durationSeconds- tempo em segundos durante o qual o operador esteve na conversa, contabilizado a partir do momento em que a sessão teve início. O campo é omitido na circunstância excecional em que uma sessão é encerrada sem ter chegado a ser iniciada.
ai_action.executed
Disparado sempre que o bot executa uma ação de IA - uma chamada de integração gerida ou uma função de API personalizada. Este é um evento de tráfego elevado: um bot de comércio eletrónico ativo pode executar centenas de ações por dia, e uma única interação de um visitante pode acionar várias. Subscreva este evento num endpoint dedicado, ou certifique-se de que o seu recetor tem capacidade para processar o volume gerado.
{
"eventId": "5f8a0b2c-1d6e-4f8a-c3d4-9a2b4c6d8e0f",
"eventType": "ai_action.executed",
"timestamp": "2026-08-13T14:21:03Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"actionName": "search_products",
"status": "SUCCESS",
"durationMs": 842,
"errorMessage": null
}
}
actionName- o nome da ação executada tal como a IA a reconhece, por exemplosearch_productspara uma integração gerida ou o nome que atribuiu a uma ação de API personalizada.status-SUCCESSouERROR.durationMs- a duração da execução da ação, em milissegundos. Útil para identificar integrações lentas antes que os visitantes apresentem queixas.errorMessage- o motivo da falha, preenchido apenas quandostatuséERROR; caso contrário, énull.
webhook.test
Enviado através do botão Send sample event (Enviar evento de exemplo) quando efetua um teste simples de conectividade. É assinado exatamente como um evento real.
{
"eventId": "9b2c4d6e-3f8a-4b0c-d5e6-0b3c5d7e9f1a",
"eventType": "webhook.test",
"timestamp": "2026-08-13T14:10:00Z",
"botId": 1234,
"botName": "Support Bot",
"conversationId": "conv_a1b2c3",
"sessionId": "sess_x9y8z7",
"data": {
"message": "Test delivery from ChatLab"
}
}
message- texto estático, sempre idêntico. Os campos do envelope incluem valores de exemplo, pelo que nunca deve processar uma entrega dewebhook.testcomo dados reais.- Este é o único tipo de evento que não pode subscrever num endpoint: é enviado a pedido a partir do painel de administração e chega sempre ao endpoint onde clicou, independentemente dos eventos aos quais este está associado.
Segurança: verificar envios
Cada envio inclui quatro cabeçalhos:
| Cabeçalho | Valor |
|---|---|
X-ChatLab-Signature |
sha256=<hex hmac> - assinatura HMAC-SHA256 do payload |
X-ChatLab-Timestamp |
Hora Unix em segundos de quando o envio foi assinado |
X-ChatLab-Event |
O tipo de evento, por exemplo, lead.created |
X-ChatLab-Delivery |
ID de envio exclusivo, igual ao eventId do corpo |
A assinatura é calculada como HMAC-SHA256 sobre a cadeia de carateres {timestamp}.{rawBody} utilizando o segredo do seu endpoint, onde {timestamp} é o valor de X-ChatLab-Timestamp e {rawBody} é o corpo bruto e não processado do pedido. Verifique sempre em relação aos bytes brutos - voltar a serializar o JSON analisado alterará a sequência de bytes e invalidará a assinatura.
Para se proteger contra ataques de repetição, rejeite envios cujo X-ChatLab-Timestamp tenha mais de 5 minutos.
Node.js
const crypto = require('crypto');
function verifyChatLabSignature(req, secret) {
const signature = req.headers['x-chatlab-signature'];
const timestamp = req.headers['x-chatlab-timestamp'];
if (!signature || !timestamp) return false;
// Reject stale deliveries (older than 5 minutes)
const ageSeconds = Math.abs(Date.now() / 1000 - Number(timestamp));
if (ageSeconds > 300) return false;
// rawBody must be the raw request body bytes, not re-serialized JSON.
// With Express: app.use(express.json({ verify: (req, res, buf) => { req.rawBody = buf; } }))
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(timestamp + '.' + req.rawBody)
.digest('hex');
const a = Buffer.from(signature);
const b = Buffer.from(expected);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
PHP
<?php
function verifyChatLabSignature(string $secret): bool
{
$signature = $_SERVER['HTTP_X_CHATLAB_SIGNATURE'] ?? '';
$timestamp = $_SERVER['HTTP_X_CHATLAB_TIMESTAMP'] ?? '';
if ($signature === '' || $timestamp === '') {
return false;
}
// Reject stale deliveries (older than 5 minutes)
if (abs(time() - (int) $timestamp) > 300) {
return false;
}
$rawBody = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $rawBody, $secret);
return hash_equals($expected, $signature);
}
Se a verificação falhar, responda com 401 e descarte o payload. Nunca processe envios não verificados - qualquer pessoa que descubra o seu URL pode enviar pedidos POST com JSON arbitrário para o mesmo.
Comportamento de envio
Compreenda estas garantias antes de criar integrações com webhooks:
- Responda rapidamente. O seu endpoint tem de responder dentro de 3 segundos, caso contrário o envio é considerado com falha. Responda
2xximediatamente e processe o payload de forma assíncrona (coloque-o em fila e, em seguida, confirme) - não faça chamadas de CRM nem operações de escrita na base de dados antes de responder. - Disparo único (fire-and-forget), no máximo uma vez. Cada evento tem exatamente uma tentativa de envio - não existem repetições. Se o seu endpoint estiver indisponível, expirar o tempo limite ou devolver um estado diferente de 2xx, esse evento é perdido e não será reenviado. Os webhooks são notificações, não um armazenamento de dados replicado: quando necessitar de integridade garantida, faça a reconciliação através da Management API ou das suas exportações de leads.
- Disjuntor (circuit breaker). Após 5 falhas consecutivas de envio num bot, os envios para esse bot são pausados durante 5 minutos. Os eventos que ocorram durante a pausa são descartados, e o registo de envios apresenta entradas
CIRCUIT_OPENpara que possa ver exatamente quando e por que razão o tráfego foi suprimido. Os envios ignorados por um disjuntor aberto não contam para a desativação automática. - Desativação automática. A verificação é executada no momento em que um envio falha, nunca com base num temporizador. Se um envio falhar e não houver nenhum envio bem-sucedido há 7 dias - contados a partir do último sucesso, ou da data de criação do endpoint se nunca tiver tido sucesso - o endpoint é desativado e recebe uma notificação por e-mail. Um único
2xxem qualquer momento repõe essa contagem. Um endpoint que não receba tráfego nunca é desativado, porque nada falha. Volte a ativá-lo nas Account settings (Definições de conta) assim que o seu recetor estiver corrigido; o contador de falhas e a marcação de desativação automática são repostos a zero ao voltar a ligá-lo, e os eventos perdidos enquanto esteve desativado não são preenchidos retroativamente. - 410 Gone. Se o seu endpoint responder com o estado HTTP
410 Gone, o ChatLab desativa-o imediatamente. Utilize isto para desativar programaticamente um endpoint a partir do lado do recetor. - Idempotência. Não são esperados envios duplicados no funcionamento normal, mas se o seu processamento tiver de ser estritamente idempotente, elimine duplicados através de
eventId(também disponível no cabeçalhoX-ChatLab-Delivery).
Limites
- Até 10 endpoints de webhook por conta.
- Retenção do registo de envios: 14 dias. As entradas mais antigas são removidas automaticamente.
Artigos relacionados
- Recolha de leads - o formulário associado a
lead.created - Human Support Contact form (Formulário de contacto com suporte humano) - o formulário associado a
contact_form.submitted - Live Chat - o fluxo associado aos eventos
live_chat.* - Classificação da conversa - a avaliação positiva/negativa associada a
conversation.rated - AI Actions - as integrações associadas a
ai_action.executed - Chat API - callbacks do widget no navegador (equivalente do lado do cliente aos webhooks)
- Management API - API REST para gestão de bots e dados de utilização