20行Python脚本,每天通过WhatsApp祝父母早安

该材料的作者(我们今天出版的译文)说,生活充斥着工作的现代人常常忘记给亲朋好友写信。 他看着他的父母每天早上如何向WhatsApp发送鼓舞人心的报价和有用的健康提示,因此决定该该回报了。

在本指南中,我们将编写一个简单的Python脚本,用于发送WhatsApp消息。 在工作过程中,我们将使用Twilio Python软件包。 为了在给定的时间组织脚本的每日启动,我们将把代码放在云中。



解决此问题的一种方法是使用Selenium Python软件包和WhatsApp Web版本而不是Twilio服务,在用尽了免费服务后,需要付费。 但是,由于使用WhatsApp网络版本需要定期使用手机扫描QR码,因此使用这种方法无法自动发送消息。

该项目的工作将包括三个步骤:

  1. Twilio设置。
  2. 学习和修改代码。
  3. 在云中部署项目并设置触发器。

步骤1. Twilio设置


Twilio网站上创建一个免费帐户,确认您的电子邮件地址和电话号码。


Twilio帐户注册

此外,作为Twilio免费提供的一部分,您必须使用WhatsApp沙箱(WhatsApp沙箱)。 这意味着您不能使用自己的电话号码,并且必须完成发布许可以接收WhatsApp消息的过程。

在WhatsApp允许Twilio使用您的号码之后,您可以使用自己的消息号码。 为了获得许可,您需要填写表格。 您可以从Twilio技术支持中了解到,尽管Twilio直接与WhatsApp合作,但可能需要一些时间才能获得许可。 此外,它还讨论了发放许可证的有限范围。 结果,许多人不得不使用Twilio WhatsApp沙箱。

所有这些并不会带来太大的欢乐,但是作为Twilio免费提供的一部分,向我们提供的东西使我们能够解决问题。 此外,事实证明,WhatsApp沙箱仍然是唯一可广泛使用的选项。

现在,您需要将消息收件人的电话连接到沙箱,然后您可以将消息发送到此电话。 为了了解如何执行此操作,您需要转到Twilio控制台的专用于WhatsApp的部分。 特别地,在此建议将具有指定文本的WhatsApp消息发送到特定号码。


Twilio控制台页面,其中包含有关将手机连接至的消息的说明


手机发送的连接请求

保存发给您的联系人中的WhatsApp号码。 可以为他分配任何名称。 为了不使我的生活复杂化,我给该联系人Twilio Sandbox打电话,然后通过父亲的电话向他发送了一条消息(在上图中可以看到)。 此过程仅执行一次。

现在,您需要转到Twilio 控制台,并获取您帐户的SID和身份验证令牌。 当您以编程方式使用服务时,此数据将帮助Twilio识别您。

步骤2.学习和修改代码


下载 GitHub存储库并解压缩存档。


压缩文件内容

在这里,您将找到源文件( whatsapp_messaging.py )和项目部署包( aws_lambda_deploy.zip )。

这是脚本代码:

 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) 

现在我们将解析此代码。 在这里,为方便起见,使用带编号的行的屏幕截图。

带编号行的Whatsapp_messaging.py文件代码

  • 第1行。导入客户端以使用Twilio REST-API。
  • 第3行。创建msg_mom_and_dad函数。 我们会将这个功能传递给AWS。 它将在设定的时间每天调用一次。
  • 第6-7行。 在这里,您需要用自己的代码替换代码中现有的sidauth_token (我们在上一节的最后讨论了接收它们)。
  • 第9行。使用凭证创建Twilio客户端对象。
  • 第13行。创建字典。 在此,将邮件收件人的姓名用作密钥,并将其电话号码用作值。 您可以在此词典中添加其他联系信息。
  • 第15行。for循环,在其中遍历字典(到目前为止,其中只有一个条目)。 在body您需要指定消息文本。 我创建了一条简单的消息,文本为“早安”,后跟一个值,该值取自当前词典项目的键。 以我为例,这导致形成“早上好,爸爸!”的信息。 from_表示我们之前收到的WhatsApp编号。 记下邮件收件人的号码-先前他们是从该收件人那里发送请求以连接到Twilio WhatsApp沙箱的。
  • 第23行。在这里,为了检查消息的状态,我们显示其SID。 我们不会使用此信息。

要使用此代码发送消息,您需要在其中进行以下更改:

  • twilio_sid
    auth_token
    contact_directory
    from_
    主体(这是可选的)

更改代码后,保存文件。 然后解压缩aws_lambda_deploy.zip档案,用您的同名文件替换whatsapp_messaging.py文件,然后将所有内容打包回.zip档案。 这些操作的含义是在代码中包括您的凭据和有关您要向其发送消息的人员的信息。 该软件包中用于部署在AWS上的所有其他内容均保持不变。 现在,让我们使用AWS。

步骤3.在AWS上部署项目并配置触发器


该代码已准备就绪,可以运行并发送WhatsApp消息。 如果您对aws_lambda_deploy.zip归档文件中的其他文件在项目中扮演什么角色感兴趣,请注意,在这些文件中有Twilio软件包和所有其他项目依赖项。 我们需要所有这些,因为我们计划在没有Twilio软件包的Python环境中使用AWS Lambda函数。 为什么不通过简单地运行pip install twilio命令来安装正确的软件包来解决此问题? 事实是,这里我们没有服务器。

为此,我们使用AWS Lambda-一个无服务器的计算环境,您可以在其中放置代码片段,根据用户的需求,代码片段的调用由各种事件和触发器触发。 我们的代码计划每天仅运行一次,因此在AWS上全天候运行的EC2服务器之类的东西将浪费计算资源和金钱。 我们的Lambda函数将根据触发器的请求在每天的特定时间被调用,并且其实现将花费很少的时间。

开始创建Lambda函数

登录到您的AWS账户。 之后,转到Services → Compute → Lambda → Create a function


Lambda函数创建屏幕

让我们给函数起一个名字。

作为执行函数的环境,我们将选择Python 3.6。 我们不需要连接到其他AWS服务。 因此,我们对Create a new role with basic Lambda permissions选项指定的权限级别感到满意。

完成设置后,只需单击Create function按钮。 现在我们将在主控制面板上。


控制面板

在这里,在“ Function code部分,您需要指定一个Handler ,系统可以使用该Handler程序来运行我们的代码。 在我们的例子中,在Handler字段中,编写whatsapp_messaging. msg_mom_and_dad whatsapp_messaging. msg_mom_and_dad ,使用我们要调用的代码和函数指定文件名。

在“ Function package字段中,您需要加载.zip文件,即我们在上一步中创建的文件。

现在,代码可以运行了。 您可以通过单击“ Test按钮来检查该功能是否有效并发送消息。

我们工作的最后一步将是设置一个触发器,该触发器每天将在给定时间调用该函数。 遵循Add trigger → CloudWatch Events的路径。


触发设定

我们需要创建一个新规则( Rule )。 他需要分配一个名称( Rule name )。 如果需要,可以在其中添加描述( Rule description )。

将规则类型( Rule type )指定为Schedule expression

使用cron(30 1 * * ? *)构造cron(30 1 * * ? *)设置函数调用时间。 让我们分析一下这种构造:

  • 30 1表示UTC时间是上午1:30。 我的IST时间是早上7点。
  • 以下两个字符* *表示月份和月份。
  • 接下来的两个字符? * ? * ,允许您指定星期几和年份。 这种设计意味着该函数将每天被调用,而不受年份和月份的限制。

在这里,您可以了解如何设置自己的Cron作业。

触发器设置完成后,请检查是否Enable trigger了“ Enable trigger复选框,从而启用了触发器。 现在仅需单击“ Add按钮,便会创建触发器。


触发信息


Lambda函数详细信息

在Lambda函数的控制面板上,您可以看到CloudWatch Events实体已附加到该函数,并且在触发相应的触发器时可以调用该函数。

总结



Python脚本发送的消息

我们已经完成了该项目的工作。 现在,您可以在WhatsApp联系人中的邮件收件人的电话上将Twilio Sandbox联系人名称更改为您自己的名称(我将其更改为Son)。 我们的系统还允许您与Twilio控制面板中的邮件收件人进行通信。

亲爱的读者们! 您在项目中使用Twilio吗?

Source: https://habr.com/ru/post/zh-CN463933/


All Articles