node.js - 在他们选择的时间向选择加入的用户发送推送通知
问题描述
在获得用户发送推送通知的权限并将用户ID保存在firestore中之后,我如何使用它在他们每天选择的时间向他们发送通知?
例如:如果用户选择 8:00 AM,我希望能够在每天早上 8 点向他们发送推送通知。我无法编写代码以在操作本身中发送通知。我必须设置什么来完成这个?
解决方案
一旦用户授予您发送推送通知的权限,您就可以使用 Actions API 发送推送通知。
设置如下。
存储用户首选项
1) Dialogflow 代理询问用户何时需要收到通知
2) 用户说他们希望在上午 8:00 收到通知
3) Dialogflow 检测到答案并向您的 webhook 发出执行请求(webhook 可以是 dialogflow (Functions) 中的内联编辑器或其他服务器)
4) 在意图的处理程序中,您必须将 UserId 和他们选择的时间存储在您的数据库中(在本例中为 firestore)
5) Dialogflow 代理向用户给出最终答案,交互结束
发送推送通知
1) 确定您是否必须向用户发送通知;这是棘手的部分。
不可能为此提供明确的解决方案,因为它在很大程度上取决于系统的要求以及您正在使用/想要使用的技术。
基本上,您可以使用 cron 作业、后台无限进程、发布/订阅、云调度程序或任何其他允许您不断从数据库中读取信息以确定需要通知哪些用户的工具。我建议您查看此答案,其中讨论了使用 Firestore 解决此问题的方法。
请注意,您不一定需要运行另一台服务器,您可以使用用于实现的功能。
例如。您可以将Cloud Scheduler设置为每小时运行一次,并向您的函数发出请求。在请求中,您从 Firestore 中读取并提取该小时需要通知的实体。
2) 一旦你有了想要通知的用户,你需要使用Actions API来发送推送通知。同样,此请求可以来自您的履行服务器,或系统中使用的其他服务器。
推荐阅读
- mysql - 如何正确设置sql请求?
- java - Spring,Hibernate:尝试保存图像时出现无效的 UTF-8 起始字节 0x80 错误
- python-3.x - 将值从 tkinter GUI 插入数据库时出错
- javascript - RangeError:关闭元组数组内的 BrowserWindow 时超出最大调用堆栈大小
- gnuplot - 如何使用 gnuplot 获取顶部为 T 且底部为箭头的矢量头
- reactjs - AWS Amplify 上的 NetlifyCMS 身份验证
- android - 如何在另一个活动中访问数据类实例?
- android-studio - VS code 和 Android Studio 找不到模拟器
- ios - 从 Firebase 存储中检索图像时出现错误 nil
- javascript - 节点 events.js:174 throw er; // 未处理的“错误”事件