Skip to main content
Quando o agente chama uma tool HTTP, quem lê a resposta da sua API é um modelo de linguagem, não um programa. Ele lê o JSON inteiro, como texto, e usa o que entendeu para responder ao lead. Uma API boa para o agente devolve pouco, claro e já pronto para virar resposta. Esta página é o contrato que a API precisa cumprir e o jeito de fazê-la bem. Serve para quem desenvolve a API, para o assistente que vai escrevê-la, ou para pedir a um fornecedor do cliente final.

O contrato

O que a Zatten envia

Depende de como a tool foi configurada. Com Enviar dados da conversa ligado, o corpo sempre traz a identidade do lead, além dos campos da tool:
Use leadNumber (o WhatsApp) ou leadId para achar o cliente no seu sistema. Não confie em name: é o nome do WhatsApp e pode estar vazio ou ser um apelido.

O que devolver

O modelo vai ler a resposta e falar com o lead a partir dela. Então:
  • Só o que o modelo precisa dizer ou decidir. Não devolva o registro inteiro do banco.
  • Nomes de campo claros, em português ou inglês legível. horarios_livres, não hl. status_entrega, não st.
  • Valores prontos para falar. "10 de outubro, às 14h" ajuda mais que 1728568800. Se o modelo precisa repassar um valor a outra tool, mande também o formato técnico (ISO 8601).
  • Uma mensagem de resumo quando ajuda: "mensagem": "Agendado para sexta, 10/10, às 14h, com a Dra. Ana."
  • Nada sensível que não é necessário. CPF completo, endereço de outros clientes, dados internos. Tudo o que você devolve fica no histórico da conversa e pode ser repetido ao lead.
  • Limite listas. Devolva os 5 a 10 itens mais relevantes, não 500.

Exemplo 1: consultar horários disponíveis

Tool consultar_horarios, GET, com o dado do modo IA data (texto, “Data pedida pelo cliente, no formato AAAA-MM-DD”) e o fixo servico. O que a Zatten envia:
Resposta ideal (200):
O modelo lê os rótulos para oferecer ao lead e guarda o inicio para passar à tool de agendamento. Sem horário naquele dia (200, não erro):
“Não tem horário” é uma resposta válida, não uma falha. Devolva 200 e diga o que oferecer no lugar.

Exemplo 2: criar agendamento

Tool criar_agendamento, POST, com Enviar dados da conversa ligado e o dado do modo IA inicio. O que a Zatten envia:
Resposta ideal (201):
Horário tomado entre a consulta e o agendamento (409):

Exemplo 3: consultar pedido

Tool consultar_pedido, GET, URL https://api.loja-exemplo.com.br/v1/pedidos/{{args.numero}}, com o dado do modo IA numero (“Número do pedido, só dígitos”). Resposta ideal (200):
Repare no que não está aí: endereço completo, CPF, valor pago, dados do cartão. Se o modelo não precisa, não mande. Pedido de outra pessoa ou inexistente (404):
Para não expor pedidos de outros clientes, mande o leadNumber (variável {{wa_id}} num parâmetro da URL) e confira na sua API se o pedido é daquele número.

Erros que o modelo entende

Quando a resposta não é 2xx, o modelo recebe uma mensagem como esta:
Para o modelo agir bem:
  • Use o status certo. 400 para dado inválido, 404 para não encontrado, 409 para conflito, 5xx para falha sua. Nunca devolva 200 com erro dentro, porque o modelo trata como sucesso.
  • Ponha a mensagem no começo do corpo e em até 500 caracteres: o resto é cortado.
  • Diga o que fazer, não só o que deu errado: “Peça o CPF com 11 dígitos”, “Ofereça outro horário”.
  • Nada de stack trace ou HTML. Página de erro do servidor ocupa os 500 caracteres e não diz nada ao modelo.
  • Dado inválido pede correção. Com uma mensagem clara, o modelo pergunta de novo ao lead e chama a tool outra vez.
O corpo do erro chega ao modelo marcado como dado externo, não instrução. A instrução de verdade fica na Mensagem para a IA se a chamada falhar da tool. Use a mensagem da API para dizer o que aconteceu e a da tool para dizer como o agente deve agir.

Idempotência

O modelo pode chamar a mesma tool duas vezes: porque a primeira resposta não foi clara, porque o lead repetiu o pedido, ou por uma nova tentativa automática. Uma API que cria coisas precisa aguentar isso:
  • Recuse duplicata pelo que identifica o pedido: mesmo leadNumber + mesmo inicio já agendado → devolva o agendamento existente com 200, não crie outro.
  • Ou use o threadId (com Enviar dados da conversa) como parte da chave: uma conversa, um pedido.
  • Consultas (GET) já são seguras para repetir.

Um servidor mínimo

Os dois exemplos fazem a mesma coisa: conferem a chave no cabeçalho, consultam horários e criam agendamento com proteção contra duplicata. O banco é um exemplo em memória.
Campos extras que a Zatten manda no corpo (como attendantId e threadId) são ignorados pelos dois exemplos. Faça o mesmo: não recuse campo desconhecido.

Armadilhas

  • 200 com erro dentro. O modelo acha que deu certo e confirma ao lead.
  • Resposta gigante. Cada caractere vira token pago e espaço a menos no contexto. Acima de 100.000 caracteres, ainda é cortada.
  • API lenta. O lead espera em silêncio; acima de 180 segundos, o agente desiste.
  • Recusar campos desconhecidos. Com Enviar dados da conversa, o corpo traz campos a mais. Uma API que valida “nenhum campo extra” responde 400 sempre.
  • Redirecionamento (http → https, barra no fim). Use a URL final.
  • Data sem fuso. Devolva e aceite datas com fuso (-03:00), ou deixe claro que é horário de Brasília.
  • Dados de outro cliente. Confira na API se o recurso pedido é do WhatsApp que chamou.

Para saber mais