Webhook
A integração de Webhook permite que o assistente faça requisições HTTP para qualquer API externa durante a conversa. É a integração mais flexível da plataforma.
Configuração Básica
{
"type": "WEBHOOK",
"url": "https://api.seusite.com/endpoint",
"method": "POST",
"headers": [
{ "key": "Authorization", "value": "Bearer meu_token" },
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"campo": "valor"
},
"responseDirective": "Se o status for 'success', confirme ao usuário. Se for 'error', peça para tentar novamente."
}Métodos HTTP suportados
GET · POST · PUT · DELETE
Variáveis Disponíveis
Use $nomeDaVariavel em URLs, headers e body. As variáveis são substituídas automaticamente antes da requisição.
Variáveis de Sistema
| Variável | Valor |
|---|---|
$session.id |
UUID único da sessão |
$company.id |
ID da empresa na plataforma |
$assistant.id |
ID do assistente configurado |
Variáveis de ClientData
Qualquer chave enviada via client_data ao criar ou atualizar a sessão:
# Sessão com dados do cliente
curl -X PUT /session/{id} \
-F 'client_data={"usuario_id":"usr_999","plano":"enterprise"}'No webhook: $usuario_id, $plano
Variáveis de Argumentos do Trigger
Parâmetros que o LLM extraiu da conversa (definidos no JSON Schema do gatilho):
// Trigger definido com parâmetro "numero_pedido"
// No webhook: $numero_pedido
{
"url": "https://api.loja.com/pedidos/$numero_pedido/status",
"method": "GET"
}Variáveis de Imagens
Quando o usuário envia imagens na conversa:
| Variável | Valor |
|---|---|
$images[0] |
URL da 1ª imagem |
$images[1] |
URL da 2ª imagem |
$images |
JSON array com todas as URLs |
Exemplos Práticos
Consultar status de pedido
{
"url": "https://erp.empresa.com/api/pedidos/$numero_pedido",
"method": "GET",
"headers": [
{ "key": "Authorization", "value": "Bearer $token_erp" }
],
"responseDirective": "Informe o status do pedido ao cliente de forma clara. Se o status for 'entregue', parabenize. Se for 'em_transito', informe a previsão."
}Criar ticket de suporte
{
"url": "https://helpdesk.empresa.com/api/tickets",
"method": "POST",
"headers": [
{ "key": "Authorization", "value": "Bearer $api_key_helpdesk" },
{ "key": "X-Session-ID", "value": "$session.id" }
],
"body": {
"titulo": "$titulo_problema",
"descricao": "$descricao_problema",
"prioridade": "$prioridade",
"cliente": {
"nome": "$nome_cliente",
"email": "$email_cliente"
},
"origem": {
"canal": "whatsapp",
"sessao": "$session.id",
"empresa": "$company.id"
}
},
"responseDirective": "Confirme o número do ticket criado para o cliente e diga que nossa equipe entrará em contato em até 24h."
}Análise de imagem enviada pelo usuário
{
"url": "https://api.vision.empresa.com/analyze",
"method": "POST",
"headers": [
{ "key": "Authorization", "value": "Bearer $vision_api_key" }
],
"body": {
"image_url": "$images[0]",
"all_images": $images,
"session_ref": "$session.id"
},
"responseDirective": "Descreva o que foi identificado na imagem de forma útil para o usuário."
}`responseDirective`
O responseDirective é uma instrução para o LLM sobre como interpretar e usar a resposta do webhook ao formular a resposta ao usuário.
"responseDirective": "Se o campo 'disponivel' for true, ofereça os horários da lista 'horarios'. Se for false, informe que não há disponibilidade e pergunte se deseja ser notificado."Quando não especificado, o LLM usa a resposta do webhook como contexto adicional e decide livremente o que comunicar.
Se InterpretResponse estiver como false no gatilho, o responseDirective é ignorado.
Atualizando ClientData via Resposta
Seu webhook pode retornar dados que ficam disponíveis na sessão para chamadas subsequentes:
// Retorno do seu webhook
{
"status": "success",
"paciente_id": "pac_12345",
"session": {
"client_data": {
"paciente_id": "pac_12345",
"nome_paciente": "Ana Souza",
"ultima_consulta": "2025-02-15"
}
}
}Os valores de session.client_data são automaticamente mesclados à sessão. $paciente_id ficará disponível em webhooks seguintes.
Comportamento de Substituição de Variáveis
Ordenação por comprimento
As variáveis são substituídas do nome mais longo para o mais curto. Isso evita substituições parciais:
Variáveis: $session_id (10 chars) e $session (7 chars)
Texto: "Sessão: $session_id — empresa: $session.company"
Correto: substitui $session_id primeiro (nome mais longo)
Errado seria: substitui $session primeiro, gerando "$session_id" parcialEncoding automático
| Contexto | Tratamento |
|---|---|
URL path (/pedidos/$id) |
URL-encoded (%20, %2F, etc.) |
URL query params (?q=$busca) |
URL-encoded |
| Headers | Substituição literal |
| Body JSON (strings) | JSON-escaped (\n, \", etc.) |
Debug e Erros
O resultado de cada chamada de webhook é registrado nos logs da sessão com:
- Status HTTP da resposta
- Body retornado
- Variáveis utilizadas
- Tempo de execução
Os logs ficam disponíveis em Painel → Conversas → Sessão → Logs.