Um script Python de 20 linhas que deseja aos pais bom dia todos os dias através do WhatsApp

O autor do material, cuja tradução publicamos hoje, diz que as pessoas modernas, cujas vidas são cheias de trabalho, costumam esquecer de escrever mensagens para seus amigos e parentes. Ele, olhando como seus pais enviam citações inspiradoras e dicas úteis de saúde para o WhatsApp todas as manhãs, decidiu que chegara a hora de retribuir.

Neste guia, escreveremos um script Python simples projetado para enviar mensagens do WhatsApp. No decorrer do trabalho, usaremos o pacote Twilio Python. Para organizar o lançamento diário do script em um determinado momento, colocaremos o código na nuvem.



Uma abordagem para resolver esse problema é usar o pacote Selenium Python e a versão da Web do WhatsApp em vez do serviço Twilio, que, após esgotar as possibilidades da oferta gratuita, precisa ser pago. Porém, como trabalhar com a versão da Web do WhatsApp exige a leitura periódica do código QR usando um telefone celular, não funcionará para automatizar o envio de mensagens com essa abordagem.

O trabalho no projeto consistirá em três etapas:

  1. Configuração do Twilio.
  2. Aprendendo e modificando código.
  3. Implantando um projeto na nuvem e configurando um gatilho.

Etapa 1. Configuração do Twilio


Crie uma conta gratuita no site da Twilio , confirme seu endereço de e-mail e número de telefone.


Registro da conta Twilio

Além disso, como parte da oferta gratuita do Twilio, você deve usar a caixa de proteção do WhatsApp (WhatsApp Sandbox). Isso significa que você não pode usar seu próprio número de telefone e precisa seguir o procedimento para emitir permissão para receber mensagens do WhatsApp.

Você pode usar seu próprio número de mensagens depois que o WhatsApp permitir que o Twilio use seu número. Para obter permissão, você precisa preencher o formulário. Você pode aprender com o suporte técnico do Twilio que, embora o Twilio funcione diretamente com o WhatsApp, pode levar algum tempo para obter permissão. Além disso, fala sobre o escopo limitado para a emissão de licenças. Como resultado, muitos precisam usar a sandbox do Twilio WhatsApp.

Tudo isso não causa muita alegria, mas o que está disponível para nós como parte da oferta gratuita do Twilio nos permite resolver nosso problema. Além disso, verifica-se que a caixa de proteção do WhatsApp ainda é a única opção amplamente disponível.

Agora você precisa conectar o telefone do destinatário das mensagens à sandbox, após o qual poderá enviar mensagens para este telefone. Para aprender como fazer isso, você precisa ir para a seção de console do Twilio, dedicada ao WhatsApp. Em particular, é proposto aqui enviar uma mensagem do WhatsApp com o texto especificado para um número específico.


Página do console do Twilio com instruções para conectar um telefone ao qual você pode enviar mensagens


Solicitação de conexão enviada pelo telefone

Salve o número do WhatsApp emitido para você em seus contatos. Ele pode receber qualquer nome. Para não complicar minha vida, liguei para esse contato, Twilio Sandbox, e enviei uma mensagem para ele pelo telefone de meu pai (isso pode ser visto na figura anterior). Este procedimento é realizado apenas uma vez.

Agora você precisa acessar o console do Twilio e obter o SID e o token de autenticação da sua conta. Esses dados ajudarão o Twilio a reconhecê-lo quando você trabalha programaticamente com o serviço.

Etapa 2. Aprendendo e Modificando o Código


Faça o download deste repositório GitHub e descompacte o arquivo.


Conteúdo do arquivo zip

Aqui você encontrará o arquivo de origem ( whatsapp_messaging.py ) e o pacote de implantação do projeto ( aws_lambda_deploy.zip ).

Aqui está o código do script:

 from twilio.rest import Client def msg_mom_and_dad(event=None, context=None):    #    SID   ,     Twilio    twilio_sid = 'AC84c9f1602d7fb6af4eda5b0c39a03b37'    auth_token = '4a2021b28f1aa606d9c6945d3c248ebd'    whatsapp_client = Client(twilio_sid, auth_token)    #        ,    #         contact_directory = {'daddy':'+919624666836'}    for key, value in contact_directory.items():        msg_loved_ones = whatsapp_client.messages.create(                body = 'good morning {} !'.format(key),                from_= 'whatsapp:+14155238886',                to='whatsapp:' + value,            )        print(msg_loved_ones.sid) 

Agora vamos analisar esse código. Aqui, por conveniência, uma captura de tela com linhas numeradas.

Código do arquivo Whatsapp_messaging.py com linhas numeradas

  • Linha 1. Cliente de importação para trabalhar com a API REST do Twilio.
  • Linha 3. Criando a função msg_mom_and_dad . Passaremos essa função para a AWS. Será chamado diariamente no horário definido.
  • Linhas 6-7. Aqui você precisa substituir o sid e o auth_token existentes no código pelo seu (falamos sobre recebê-los no final da seção anterior).
  • Linha 9. Crie um objeto de cliente Twilio usando credenciais.
  • Linha 13. Criando um dicionário. Aqui, o nome do destinatário da mensagem é usado como chave e o número de telefone como valor. Você pode adicionar informações de contato adicionais a este dicionário.
  • Linha 15. O loop for , no qual o dicionário é percorrido (até agora, há apenas uma entrada). No body você precisa especificar o texto da mensagem. Criei uma mensagem simples com o texto "bom dia", seguido de um valor retirado da chave do item do dicionário atual. No meu caso, isso leva à formação da mensagem "bom dia papai!". from_ indica o número do WhatsApp que recebemos anteriormente. Em to anotar o número do destinatário da mensagem - aquele a partir do qual eles enviaram anteriormente uma solicitação para conectar-se à sandbox do Twilio WhatsApp.
  • Linha 23. Aqui, para verificar o status da mensagem, exibimos seu SID. Não usaremos essas informações.

Para usar esse código para enviar mensagens, é necessário alterar o seguinte:

  • twilio_sid
    auth_token
    contact_directory
    de_
    corpo (isso é opcional)

Depois de fazer alterações no código, salve o arquivo. Em seguida, descompacte o arquivo aws_lambda_deploy.zip , substitua o arquivo whatsapp_messaging.py pelo seu arquivo com o mesmo nome e, em seguida, coloque tudo de volta no arquivo .zip. O significado dessas ações é incluir no código suas credenciais e informações sobre aqueles a quem você deseja enviar mensagens. Todo o resto do pacote, projetado para implantação na AWS, permaneceu inalterado. Agora vamos trabalhar com a AWS.

Etapa 3. Implante o projeto na AWS e configure o gatilho


O código está pronto para executar e enviar mensagens do WhatsApp. Se você estiver interessado em qual função os outros arquivos do arquivo aws_lambda_deploy.zip desempenham no projeto, lembre-se de que, entre esses arquivos, estão o pacote Twilio e todas as outras dependências do projeto. Precisamos de tudo isso porque planejamos usar as funções do AWS Lambda em um ambiente Python que não possui um pacote Twilio. E por que não pip install twilio isso simplesmente executando o comando pip install twilio para instalar o pacote certo? O fato é que aqui não temos um servidor.

Para fazer isso, usamos o AWS Lambda - um ambiente de computação sem servidor no qual você pode colocar fragmentos de código, cuja chamada, de acordo com as necessidades do usuário, é acionada por vários eventos e gatilhos. Nosso código está planejado para ser executado apenas uma vez por dia, portanto, usar algo como um servidor EC2 na AWS funcionando 24 horas por dia será um desperdício de recursos e dinheiro de computação. Nossa função Lambda será chamada diariamente em um horário específico, mediante solicitação de um gatilho, e sua implementação levará muito pouco tempo.

Comece a criar uma função Lambda

Faça login na sua conta da AWS. Depois disso, vá para Services → Compute → Lambda → Create a function .


Tela de criação de função Lambda

Vamos dar um nome à função.

Como o ambiente em que a função será executada, escolheremos o Python 3.6. Não precisamos nos conectar a outros serviços da AWS. Portanto, estamos satisfeitos com o nível de permissão especificado pela opção Create a new role with basic Lambda permissions .

Após concluir as configurações, basta clicar no botão Create function . Agora estaremos no painel de controle principal.


Painel de controle

Aqui, na seção Function code , você precisa especificar um Handler com o qual o sistema possa executar nosso código. No nosso caso, no campo Handler , escreva whatsapp_messaging. msg_mom_and_dad whatsapp_messaging. msg_mom_and_dad , especificando o nome do arquivo com o código e a função que queremos chamar.

No campo Function package , você precisa carregar nosso arquivo .zip, ou seja, o arquivo que criamos na etapa anterior.

Agora o código está pronto para ser executado. Você pode verificar se a função funciona e envia mensagens clicando no botão Test .

A etapa final do nosso trabalho será a criação de um gatilho que chamará a função diariamente em um determinado momento. Siga o caminho Add trigger → CloudWatch Events .


Configuração de gatilho

Precisamos criar uma nova regra ( Rule ). Ele precisa atribuir um nome ( Rule name ). Se desejar, você pode adicionar uma descrição ( Rule description ).

Especifique o tipo de regra ( Rule type ) como Schedule expression .

O tempo de chamada da função é definido usando a construção cron(30 1 * * ? *) . Vamos analisar esta construção:

  • 30 1 significa hora UTC 1:30 da manhã. São 7 da manhã no meu horário IST.
  • Os dois caracteres a seguir, * * , indicam o dia do mês e o mês.
  • Os próximos dois personagens ? * ? * , permite especificar o dia da semana e ano. Esse design significa que a função será chamada diariamente, sem restrições de anos e meses.

Aqui você pode aprender como configurar seus próprios trabalhos cron.

Após a conclusão da configuração do gatilho, verifique se a Enable trigger seleção Enable trigger está ativada, o que ativa o gatilho. Agora resta apenas clicar no botão Add e o gatilho será criado.


Informações do acionador


Detalhes da Função Lambda

No painel de controle da função Lambda, é possível ver que a entidade CloudWatch Events está anexada à função e que a função pode ser chamada quando o acionador correspondente é acionado.

Sumário



Mensagem enviada pelo script Python

Concluímos o trabalho no projeto. Agora você pode alterar o nome do contato do Twilio Sandbox para o seu próprio telefone no destinatário da mensagem, nos contatos do WhatsApp (eu mudei para Filho). Nosso sistema também permite que você se comunique com o destinatário das mensagens do painel de controle do Twilio.

Caros leitores! Você usa o Twilio em seus projetos?

Source: https://habr.com/ru/post/pt463933/


All Articles