Skip to main content
O WhatsApp é onde o cliente escreve primeiro, e onde uma conversa pode durar meses. Este guia liga um agente de WhatsApp à Niadra: quais identificadores enviar, como tornar inofensivo o reenvio de webhook, como uma conversa de meses vira sessões, como um OTP no mesmo canal eleva o nível de verificação e como áudios e anexos viajam por referência. O exemplo é a mensagem da Marina Souza às 14h02: “O técnico não apareceu. Vou ligar para vocês.” Cinco minutos depois ela liga, e o agente de voz já sabe o que ela escreveu.

Identificadores no WhatsApp

A WhatsApp Cloud API informa vários ids para a mesma pessoa, e a Niadra guarda cada um como um tipo de handle próprio. Envie no mesmo evento todos os ids que você recebe: handles que chegam juntos no mesmo evento são ligados quando são fortes, não bloqueados e sem conflito. Com os nomes de usuário do WhatsApp, o remetente pode deixar de ser um telefone e virar um BSUID. A ligação entre BSUID e telefone nunca é presumida: ela exige uma asserção explícita, como o cliente digitar o número, um OTP ou o seu próprio cadastro. O nome de usuário é atributo de exibição e nunca identifica ninguém.
Um BSUID só é único dentro de uma conta comercial. Envie sempre com a conta em scope (as funções de handle do SDK recebem a conta como argumento).

Passo a passo

1. Registre cada mensagem recebida com o id do WhatsApp

Use o id da mensagem no provedor (wamid) como idempotency_key. A WhatsApp Cloud API reenvia webhooks por dias, e a Niadra deduplica por essa chave no banco: uma entrega repetida conta como duplicada e nunca é gravada duas vezes. Os eventos são ordenados por occurred_at, a hora em que a mensagem foi enviada, nunca pela chegada; assim, uma ressincronização que reenvia mensagens antigas coloca cada uma no lugar certo.
O track() volta na hora. O SDK põe o evento numa fila e envia em lotes de até 15 eventos ou a cada segundo. O evento bruto é gravado antes de a API responder, e a mensagem fica legível na camada ao vivo em menos de um segundo: quando a Marina liga às 14h07, o agente de voz recebe essa mensagem em live.

2. Ligue o id do WhatsApp ao telefone que o resto da empresa conhece

O agente de voz procura a Marina pelo phone_e164; o seu CRM conhece a Marina pelo id dele. Quando você sabe que os três são da mesma pessoa, diga isso com identify(). A chamada sai na hora, e o próximo context() já enxerga o perfil ligado.
Cada ligação é uma asserção com método e evidência. Uma ligação errada pode ser retirada, e a memória acompanha cada handle até a origem. Veja Identidade e verificação.

3. Trate a conversa como conversa e deixe a Niadra dividir as sessões

O seu conversation_id é a conversa do WhatsApp, que pode durar meses. A Niadra divide essa conversa em sessões: no WhatsApp, a sessão fecha depois de cerca de 20 minutos de inatividade (ajustável por canal). Cada sessão vira memória por conta própria, e a cobrança conta uma conversa por janela de atividade, não por mensagem. Leia o contexto antes de cada resposta. Dentro da sessão o contexto fica fixado: voltam os mesmos bytes, e o provedor do modelo mantém o início do prompt em cache. O SDK também guarda o contexto por conversa.

4. Eleve o nível de verificação com um OTP no WhatsApp

Uma mensagem vinda de um número de WhatsApp é plausível pelo canal. Dados da conta, documentos e pagamentos costumam exigir mais. Envie um código de uso único pelo WhatsApp; quando o cliente digitar o código certo, registre um verify com método otp_whatsapp e nível V3. O nível vale só para esta conversa, e o OTP no WhatsApp também prova a posse daquele número.
O verify sai na hora e descarta o contexto guardado daquela conversa. A leitura seguinte volta com os itens que a política libera em V3; antes disso, o contexto informava em withheld quantos itens estavam retidos, e o agente sabia que valia pedir a verificação. Um nível acima do teto da sua fonte volta como erro do item, verification_not_allowed.

5. Envie áudios e anexos por referência

Mídia nunca viaja dentro de um evento. Reserve um upload com o subject dono do arquivo, envie os bytes com PUT para a URL pré-assinada com exatamente os upload_headers da resposta (o armazenamento recusa qualquer outro) e depois mande o evento com media_ref e o SHA-256. Os SDKs fazem os dois primeiros passos em upload_media() e uploadMedia(). Para mensagens de voz, mande a sua transcrição em transcript, com stt_confidence.

6. Registre as respostas do agente e as transferências

Registre as mensagens enviadas com conversation.agent() (com o id da mensagem no WhatsApp como idempotency_key, quando houver), as mensagens de atendente com human_agent() em Python ou human() em TypeScript, e notas internas com visibility="internal": o cliente nunca viu essas notas, e o contexto as marca assim. Quando a conversa passa para uma pessoa, registre a transferência, para a medição saber se o destino leu o contexto.

Próximos passos

Eventos e o lote

idempotência, ordem e erro por item.

Identidade e verificação

asserções, uniões e os níveis.

Agentes de voz

a ligação das 14h07.

Enviar um lote

a requisição e a resposta completas.