Instalar
@niadra/sdk no npm.
As cinco primitivas
subscribe() (Python) e whatsAppChallenge() (TypeScript) respondem ao desafio de assinatura da Meta no GET.
Exemplo mínimo
examples/whatsapp_webhook.py e examples/whatsapp-cloud.ts. O flush() depois de record() faz o turno, e o V1 que ele prova, chegarem antes da primeira leitura.
Limites
- O adaptador nunca envia mensagem nem chama a Graph API; ele traduz o webhook e registra o que o seu código enviou.
- Mídia chega como referência (
id, tipo MIME, SHA-256): baixe os bytes da Graph API, passe aupload_media()e entregue o resultado emupload=(com a suatranscript=de uma nota de voz). O texto de um PDF, de uma imagem ou de um arquivo do Office (DOCX, XLSX, PPTX) só é lido dentro da célula, e só quando o espaço lista o tipo emmedia.extract_text_from; o tipo vem dos bytes, nunca do MIME declarado. Toda a leitura acontece no servidor de modelos, num processo filho por documento, um por vez: a camada de texto do PDF, e OCR (RapidOCR com o reconhecedor PP-OCRv6 small) da imagem, redimensionada, e de cada página digitalizada do PDF, renderizada a 200 dpi; um arquivo do Office com macros é recusado. Um arquivo que falha (413 ou 422) é tratado como arquivo sem texto, e nenhum arquivo sai da região. O texto mantém as quebras de linha, passa pelo redator antes da extração e vira um turno derivado. - Cada
WhatsAppMessagetraz owa_ide, para um nome de usuário do WhatsApp, o id com escopo da conta Business (BSUID); statuses e outros campos do webhook ficam de fora. - Testado com cargas públicas do formato da Meta e assinaturas calculadas no teste; nenhuma conta da Meta é necessária.
Próximos passos
Agentes de WhatsApp
identidade pelo número, V1 pelo canal e o turno legível pelos outros agentes.
Twilio
WhatsApp e SMS pela Twilio, com o mesmo desenho.

