我计划创建一个Facebook Messenger机器人,它根据用户输入时间发送预定消息。例如:如果用户选择早上 6 点,那么我需要每天在这个时候给他发送一些消息。
现在,我已经在无服务器的帮助下创建了一个基本的信使机器人。我被这个预定的消息部分困住了。我的问题是:我需要注意的基本事项是什么?我是否需要一个队列系统,如 AWS SQS 和 CloudFront 事件计划程序?我之前没有这些服务的经验。但我非常想留在AWS的土地上。
你们能给我指出一个正确的方向吗?
据我了解,您的 Facebook 机器人将收到用户输入(早上 6 点(,并且需要请求后端(Lambda 函数(来安排这段时间的一些操作。在早上 6 点,将触发另一个 Lambda 函数来为此用户执行任务。
我看到您已经使用无服务器框架标记了这个问题。它确实支持调度 Lambda 函数(文档(,如以下示例所示:
functions:
doSomething:
handler: doSomething
events:
- schedule: cron(0 6 * * ? *) # Set to trigger at 6 AM
但目前无法以编程方式调用无服务器框架。您可以在此处和此处关注讨论。
在这种情况下,我想您需要使用 AWS 开发工具包来配置和调度 Lambda 函数。
- SNS 消息不能延迟
- SQS 消息只能延迟 ~15 分钟,除非您弄乱了消息可见性(在这种情况下不推荐(
最好的办法是公开 CRUD 函数,以便您的机器人可以在 AWS 中管理用户的日程安排。
这些函数将在 DynamoDB 或您选择的任何持久性策略中存储计划记录。
然后,在 cron 计划上有一个单独的函数,该函数定期扫描计划记录并将消息生成到发送消息的任何其他函数。
您是否考虑过 CloudWatch 计划事件?它们可以通过编程方式创建,并且可以具有 cron 表达式。您可以将它们配置为触发 lambda 或发布到流。似乎这可能正是您所需要的。不过,请务必检查 CloudWatch 限制。