easyCoexistence
Iniciar sessãoIniciar teste gratuito
Meta Tech Provider

Enviar e receber WhatsApp a partir de Python

Receber consiste numa rota da sua framework web que responde ao GET de verificação da Meta e aceita POSTs. Enviar consiste num pedido HTTPS à Cloud API com o phone number id e o token do número. Não há SDK nosso nem nada para instalar.

2 handlers

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

24 hours

Janela após uma mensagem do cliente durante a qual é possível enviar texto livre.

131047

O erro devolvido ao enviar texto livre fora dessa janela.

Como se recebem mensagens em Python?

Com dois handlers numa só rota, na framework que já utiliza.

O handler GET responde à verificação da Meta. Lê hub.mode, hub.verify_token e hub.challenge da query string, compara o token com o seu e devolve o challenge no corpo bruto. Devolver JSON aqui é o erro mais comum e falha silenciosamente.

O handler POST recebe eventos. Devolva 200 rapidamente e faça o trabalho depois, porque a Meta trata uma resposta lenta como uma falha e volta a tentar, o que significa tratar a mesma mensagem duas vezes. Coloque-a numa fila ou entregue-a a uma tarefa em segundo plano, em vez de processar tudo diretamente.

As mensagens chegam com um ID de mensagem wamid. Vale a pena eliminar duplicados com base nele desde o início, pois as novas tentativas são normais, não excecionais.

Como se enviam mensagens?

Um POST para o endpoint messages da Cloud API, usando o phone number id e um bearer token.

Ambos os valores vêm da ligação: o painel apresenta-os e get_api_credentials devolve-os se preferir que um assistente os obtenha. Nada neste pedido é específico da nossa plataforma, por isso qualquer biblioteca HTTP funciona e o pedido é exatamente igual ao da documentação da Meta.

O que muda com o tempo é o corpo. Nas 24 horas seguintes à última mensagem do cliente, envia-se um objeto text. Depois disso, envia-se um objeto template com o nome de um template aprovado e o respetivo idioma. Um cliente que conheça apenas o primeiro formato funciona perfeitamente nos testes e falha na primeira mensagem enviada durante a noite, devolvendo o erro 131047.

O que precisa um handler de produção além disso?

Três coisas fáceis de ignorar e dispendiosas de acrescentar mais tarde.

Elimine duplicados com base no ID da mensagem, porque a Meta volta a tentar. Verifique a assinatura do pedido se estiver exposto publicamente, pois, caso contrário, qualquer pessoa que descubra o seu URL poderá publicar nele. E determine há quanto tempo o contacto escreveu pela última vez, para que o envio escolha text ou template sem decisão humana.

Nada disto exige uma framework ou biblioteca. É um conjunto, uma verificação e uma comparação. Implementá-los antes do primeiro cliente distingue uma integração que funciona discretamente de outra que envia alertas constantemente.

Erros comuns

  • Devolver JSON no GET de verificação em vez do valor bruto de challenge.
  • Processar diretamente antes de devolver 200. A Meta repete respostas lentas e a mensagem é tratada duas vezes.
  • Enviar texto livre sem verificar a janela. Devolve 131047 e parece que nada aconteceu.
Fazer isto com a EasyCoexistence

Ligue o número em easycoexistence.com, defina o destino do webhook para a sua rota e leia o phone number id e o token no painel. A partir de US$ 9 por número ligado por mês, descendo para US$ 2 em volume, com os primeiros 7 dias gratuitos.

Perguntas frequentes

Existe um SDK de Python?

Não da nossa parte, e não precisa de um. A API é da Meta, está documentada pela Meta e pode ser acedida com qualquer biblioteca HTTP.

Que framework devo utilizar?

Qualquer uma. O requisito é uma rota que responda a um GET e aceite um POST, algo que todas as frameworks web de Python fazem.

Como evito tratar uma mensagem duas vezes?

Elimine duplicados com base no ID de mensagem wamid no payload. A Meta repete os pedidos por conceção, por isso este comportamento é esperado, não um caso extremo.

A equipa pode continuar a utilizar o telemóvel?

Sim. A Coexistência mantém a aplicação WhatsApp Business a funcionar no mesmo número, e o seu handler recebe o que a equipa envia como um evento echo.

Continue a ler

Pronto para começar?

Configure a Coexistência do WhatsApp em minutos, não em meses. A aplicação continua a funcionar no telemóvel.

Começar período experimental gratuito

Verificado em

Enviar WhatsApp a partir de Python