【问题标题】:Facebook messenger bot scheduled messages using Serverless and AWSFacebook messenger bot 使用无服务器和 AWS 安排消息
【发布时间】:2017-11-13 20:07:57
【问题描述】:
我计划创建一个 Facebook Messenger 机器人,它根据用户输入时间发送预定消息。例如:如果用户选择早上 6 点,那么我需要每天在这个时间给他发送一些消息。
现在我在无服务器的帮助下创建了一个基本的 Messenger 机器人。我被这个预定的消息部分困住了。我的问题是:我需要注意哪些基本事项?我是否需要像 AWS SQS 和 CloudFront 事件调度程序这样的排队系统?我之前没有这些服务的经验。但我非常想留在 AWS 的土地上。
你们能给我指出正确的方向吗?
【问题讨论】:
标签:
amazon-web-services
aws-lambda
message-queue
serverless-framework
facebook-messenger-bot
【解决方案1】:
据我了解,您的 Facebook 机器人将接收用户输入(早上 6 点),它需要请求后端(一个 Lambda 函数)来安排这个时间的一些操作。早上 6 点,将触发另一个 Lambda 函数来为该用户执行任务。
我看到您使用无服务器框架标记了这个问题。它确实支持调度 Lambda 函数 (docs),如下例所示:
functions:
doSomething:
handler: doSomething
events:
- schedule: cron(0 6 * * ? *) # Set to trigger at 6 AM
但目前您无法以编程方式调用无服务器框架。可以关注here和here的讨论。
在这种情况下,我猜您需要使用 AWS SDK 来配置和调度 Lambda 函数。
【解决方案2】:
- SNS 消息不能延迟
- SQS 消息只能延迟约 15 分钟,除非您搞乱消息可见性(在这种情况下不推荐)
最好的办法是公开 CRUD 函数,以便您的机器人可以在 AWS 中管理用户的日程安排。
这些函数会将计划记录存储在 DynamoDB 或您选择的任何持久性策略中。
然后,在 cron 计划上有一个单独的函数,它定期扫描计划记录并将消息生成到发送消息的任何其他函数。