Meta Tech Provider

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.

2 handlers

Um GET para a verificação da Meta e um POST para os eventos. Esse é o lado de recebimento.

24 hours

Janela depois da mensagem do cliente em que o texto livre é enviado.

131047

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.
Fazendo isso com o EasyCoexistence

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átis

Verificado em

Enviar WhatsApp a partir do Python