python | Enviar e receber WhatsApp a partir do Python
Receber é uma rota no seu framework web que responde ao GET de verificação da Meta e aceita POSTs. Enviar é uma requisição HTTPS para a Cloud API com o phone number id e o token do número. Nenhum SDK nosso, e nada para instalar.
Um GET para a verificação da Meta e um POST para os eventos. Esse é o lado de recebimento.
Janela depois da mensagem do cliente em que o texto livre é enviado.
O erro devolvido quando você envia texto livre fora dessa janela.
Como receber mensagens em Python?
Com dois handlers numa mesma rota, em qualquer framework que você já use.
O handler de GET responde à verificação da Meta. Ele lê hub.mode, hub.verify_token e hub.challenge da query string, confere o token contra o seu, e devolve o challenge como corpo bruto. Devolver JSON aqui é o erro mais comum, e ele falha em silêncio.
O handler de POST recebe os eventos. Devolva 200 rápido e faça o trabalho depois, porque a Meta trata uma resposta lenta como falha e vai repetir, o que significa tratar a mesma mensagem duas vezes. Enfileire, ou entregue a uma tarefa em segundo plano, em vez de processar ali mesmo.
As mensagens chegam com um id de mensagem wamid. Vale deduplicar por ele desde o começo, já que as repetições são normais, e não excepcionais.
Como enviar?
Um POST para o endpoint de mensagens da Cloud API do phone number id, com um bearer token.
Os dois valores vêm da conexão: o painel mostra eles, e o get_api_credentials devolve eles se você preferir que um assistente busque. Nada na chamada é específico nosso, então qualquer biblioteca HTTP funciona e a requisição fica exatamente igual à documentação da própria Meta.
O que muda com o tempo é o corpo. Dentro de 24 horas da última mensagem do cliente você envia um objeto de texto. Fora disso você envia um objeto de template nomeando um template aprovado e o idioma dele. Um cliente que só conhece o primeiro formato funciona perfeitamente nos testes e falha na primeira mensagem que atravessa a noite, devolvendo o erro 131047.
O que um handler de produção precisa além disso?
Três coisas que é fácil pular e caro acrescentar depois.
Deduplique pelo id da mensagem, porque a Meta repete. Verifique a assinatura da requisição se você estiver exposto publicamente, já que, sem isso, qualquer um que descubra a sua URL pode postar nela. E ramifique por há quanto tempo o contato escreveu pela última vez, para que o caminho de envio escolha texto ou template sem uma pessoa decidindo.
Nada disso precisa de framework ou de biblioteca. São um conjunto, uma checagem e uma comparação, e deixar isso pronto antes do primeiro cliente é a diferença entre uma integração que roda em silêncio e uma que te acorda de madrugada.
Erros comuns
- Devolver JSON no GET de verificação em vez do valor bruto do challenge.
- Processar ali mesmo antes de devolver 200. A Meta repete respostas lentas e você trata a mensagem duas vezes.
- Enviar texto livre sem checar a janela. Devolve 131047 e parece que não aconteceu nada.
Conecte o número em easycoexistence.com, defina o destino do webhook como a sua rota, e leia o phone number id e o token no painel. A partir de R$ 29,90 por número por mês, caindo para R$ 7,90 no volume, com os primeiros 7 dias gratuitos.
Perguntas frequentes
Existe um SDK em Python?
Nosso não, e você não precisa de um. A API é da Meta, documentada pela Meta, e alcançável com qualquer biblioteca HTTP.
Qual framework devo usar?
Qualquer um. O requisito é uma rota que responda a um GET e aceite um POST, coisa que todo framework web em Python faz.
Como evito tratar uma mensagem duas vezes?
Deduplique pelo id de mensagem wamid que vem no payload. A Meta repete por projeto, então isso é esperado, e não um caso de borda.
A equipe ainda pode usar o celular?
Sim. A Coexistência mantém o app do WhatsApp Business funcionando no mesmo número, e o seu handler vê o que eles enviam como um evento de eco.
Continue lendo
Pronto para começar?
Configure o WhatsApp Coexistence em minutos, não em meses. O aplicativo continua funcionando no celular.
Começar teste grátisVerificado em