Tokens e webhook de comandos
Tokens de integração
Seção intitulada “Tokens de integração”Um token identifica a empresa e autoriza chamadas à API. Ele é gerado em Configurações → Integrações → Gerar token (ou por POST /integration-tokens com a sessão do painel).
| Propriedade | Valores |
|---|---|
| Formato | da_ seguido de 64 caracteres. Só é exibido na criação; o Altchat guarda apenas uma assinatura. |
| Escopo | full (padrão): age como administrador da empresa em toda a API. webchat_links: só serve para o app do provedor. Um token não serve fora do seu escopo. |
| Expiração | 30 dias, 90 dias, 180 dias, 1 ano ou nunca. Prefira prazos definidos e renove. |
| Estados | active, expired, revoked. Revogar invalida na hora. |
Como enviar o token
Seção intitulada “Como enviar o token”Em todas as chamadas:
Authorization: Bearer da_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxContent-Type: application/jsonToken inválido, expirado, revogado ou com escopo errado devolve 401 com {"error":"ERR_SESSION_EXPIRED"}. Erros 403 e 503 vêm do licenciamento da instalação e não dependem do token.
Webhook de comandos (entrada)
Seção intitulada “Webhook de comandos (entrada)”POST /integrations/webhook recebe comandos para um atendimento existente. É a rota que o n8n e outros fluxos usam para agir depois de receber uma mensagem. Autenticação: token full.
Identificar o atendimento
Seção intitulada “Identificar o atendimento”Informe o atendimento na query (?ticketId=123) ou no corpo (ticketId, ticket_id, ticket.id). Sem um atendimento válido, a resposta avisa Command ignored because ticketId was not found in payload. e nada é executado.
Formatos aceitos
Seção intitulada “Formatos aceitos”"Obrigado pelo contato! Em instantes um técnico vai atender."Uma string vira mensagem de texto ao cliente. Também pode ser uma lista de strings.
{ "type": "image", "content": "Segue a fatura", "mediaUrl": "https://exemplo.com/fatura.png" }type pode ser text, image, video, audio, ptt, gif, document ou file. A mídia é baixada da URL (limite de 20 segundos).
{ "messages": [ "Primeira mensagem", { "type": "document", "mediaUrl": "https://exemplo.com/contrato.pdf" } ] }{ "action": "menu", "menuOptions": [ { "id": "1", "text": "Suporte" }, { "id": "2", "text": "Financeiro" } ] }Comandos (action)
Seção intitulada “Comandos (action)”| Comando | Campos | Efeito |
|---|---|---|
menu |
menuOptions[] (id, text, opcional description, url), menuButtonText, menuHeader, menuFooter |
Menu interativo na API oficial; texto numerado nos outros canais. |
wait |
seconds (até 120) |
Pausa entre mensagens. |
note |
content |
Anotação interna no atendimento. |
updateTicket |
ticketData: { status, userId, queueId, justClose, pauseAutomation, resumeAutomation, annotation } |
Altera o atendimento. status: pending, open, closed. |
| (transferir) | queueId, opcional userId, pauseAutomation |
Transfere. Com userId fica Atendendo; sem, fica Aguardando. |
addTag / removeTag / clearTags |
tagId |
Etiquetas do atendimento. |
closeTicket: true |
Encerra. | |
endSession ou stopbot: true |
Encerra a sessão do Typebot. | |
ping |
Responde pong (teste). |
Resposta
Seção intitulada “Resposta”{ "ok": true, "ticketId": 123, "executed": ["text", "queueId"], "warnings": [], "unsupported": [] }unsupported lista comandos ignorados (por exemplo, etiquetas de contato, que a rota não altera).
Exemplo: transferir e avisar
Seção intitulada “Exemplo: transferir e avisar”curl -X POST "https://app.altchat.com.br/integrations/webhook?ticketId=123" \ -H "Authorization: Bearer SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "messages": [ "Vou te passar para o Financeiro.", { "queueId": 2 } ] }'