O
channel_token, o phone_number_id e o waba_id vêm em GET /api/channels. O proxy usa a versão v23.0 da Graph API; não coloque a versão na URL.
Enviar mensagem
idempotency_key no body. O Coexy remove o campo antes de repassar à Meta. A chave vale por canal, por 7 dias a partir do envio aceito:
- mesma chave e mesmo body: devolve a resposta original (com o
wamid) sem reenviar; - mesma chave com body diferente: 422
idempotency_key_reused, nada é enviado; - mesma chave enquanto o primeiro envio ainda está em andamento: o Coexy espera até 10 s e devolve o mesmo resultado; se passar disso, 409
idempotency_in_progress(repita a chamada sem mudar nada); - se a Meta recusar o envio, a chave é liberada e pode ser usada na retentativa.
Python
Listar templates
Template com imagem, vídeo ou documento no cabeçalho
O arquivo do cabeçalho é enviado em cada mensagem: cada cliente pode receber o próprio PDF, imagem ou vídeo com o mesmo template aprovado. Uselink (URL pública) ou o id de uma mídia enviada antes (seção abaixo).
{ "type": "image", "image": { "link": "..." } } ou { "type": "video", "video": { "link": "..." } }. O arquivo de exemplo enviado ao criar o template no painel serve só para a revisão da Meta.
Enviar mídia (upload)
Mesmo endpoint da Meta, emmultipart/form-data. Não defina o Content-Type manualmente; deixe a biblioteca HTTP gerar o boundary.
id retornado vai no envio da mensagem, por exemplo "image": { "id": "<media_id>" }.
Baixar mídia recebida
O webhook traz só oid da mídia (ex.: message.audio.id). O download segue os dois passos da Meta:
GET /meta-proxy/{media_id}devolveurl,mime_type,sha256efile_size. Aurljá aponta para o Coexy (https://api.coexy.com.br/functions/v1/meta-proxy/lookaside/...).GET <url>com o mesmoAuthorization: Bearer <channel_token>devolve o arquivo.
A
url expira em cerca de 5 minutos: baixe logo após obtê-la e, se expirar, repita o passo 1. Use a url exatamente como veio; acessar lookaside.fbsbx.com direto falha, porque exige o token da Meta.Sincronizar contatos e histórico (coexistência)
Em números conectados pelo app WhatsApp Business, peça a sincronização em até 24 horas depois da conexão (vejacoexistence.sync_deadline em GET /api/channels). Cada tipo só pode ser pedido uma vez. Se você já tinha um webhook assinando smb_app_state_sync ou history quando o canal conectou, o Coexy já pediu por você.
smb_app_state_sync e history. Veja Webhooks.
Erros
Demais erros vêm da Meta, no formato da Cloud API.
