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.
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.
track() volta na hora. O SDK põe o evento numa fila: uma mensagem da conversa sai na hora; os outros eventos saem em lotes de até 15 ou a cada segundo. A API só responde depois de gravar o lote, mascarado e cifrado, e a mensagem entra na camada ao vivo junto com a resposta (no primeiro contato de um número que a memória ainda não conhece, logo depois): 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 pelophone_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: um id novo entra no perfil na mesma resposta, e dois perfis que já existiam se unem antes da resposta.
3. Trate a conversa como conversa e deixe a Niadra dividir as sessões
O seuconversation_id é a conversa do WhatsApp, que pode durar meses. A Niadra divide essa conversa em sessões: no WhatsApp, turnos com menos de cerca de 20 minutos entre si são a mesma sessão (ajustável por canal). A sessão vira memória depois de 3 minutos sem turnos, e uma resposta do cliente dentro da janela a reabre e a extrai de novo; a cada reabertura a espera dobra (3, 6, 12 minutos), nunca além da janela do canal. Cada sessão vira memória por conta própria (uma regra decide no fim dela se vai ao modelo: um cumprimento não vai, uma troca curta que fixa um número de pedido ou um CEP vai), e a cobrança conta uma conversa por janela de atividade, não por mensagem.
Leia o contexto antes de cada resposta, no nível que a conversa provou: o turno do cliente com verification_hint: "V1" prova V1, porque chegou daquele número, e flush() garante que ele chegou antes da primeira leitura. 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 umverify 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.
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 osubject 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 comconversation.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.

