在实际开发过程中,许多需求需要定时发送模板消息通知用户比如说给发起助力3小时未完成用户发送消息,传统开发通过自己发的服务器定时函数很容易就可以实现。但是小程序云开发定时函数不支持云调用,所以通过云开发实现定时发送模板消息也就无法实现。最初想的一个方案是:发送模板消息仍然通过自己的服务器发送。但是这样一来仍然会用到自己的服务器,服务器的部署维护仍需要自己来处理,这样就跟云开发提出的观念背道而驰了。于是想有没有一种方案完全脱离自己的服务器,就像云开发提出的口号让开发者只需要关注代码的逻辑。之前看了一篇文章《云开发如何对外提供URL》不少涉及到支付、订单等异步操作的场景,会需要提供一个回调 URL,以确保在用户完成自己的支付过程后,由支付服务器对回调的 URL 发起请求,确认调用成功。因此,不少用户在使用时提出了自己的疑问,应该如何实现这样的功能?
由于目前云开发云函数尚不支持云调用,所以我们需要借助腾讯云提供的云函数和 定时器,来实现类似的功能。
流程如下:
具体实现
1. 创建云函数
访问 https://console.cloud.tencent.com/ ,使用你的腾讯云账号登陆,在顶部菜单栏中找到「云产品」— 「Serverless」—「云函数」
在云函数中,选择「函数服务」,并在函数服务页面点击「新建」
创建一个新的云函数,其中函数名称根据你的需要填写
运行环境选择 Node.js 8.9,创建方式选择空白函数,完成后点击下一步。
在下一页不需要做修改,直接点击完成。
2. 创建 API 网关调用
在创建完成云函数以后,我们会进入到这样的界面,在这个界面中选择「触发方式」
在触发方式页面新增一个触发方式,使用 「定时触发」,定时任务名字「任意」,触发周期「根据需求设置」,传入参数「可根据需求选择」。
填写完成后,点击保存
3,编写小程序云函数
js代码
json配置
保存,上传云函数
4. 编写程序调用
当我们完成了云函数的配置以后,接下来我们可以修改云函数,使其完成我们自己想要的功能。
我们希望云函数可以从外部发来的请求中获取到参数,并借助云开发提供的 API,调用云开发的云函数。则我们可以这样操作
我们在本地新建一个目录,并在其中执行如下命令(需要你提前安装了 N ode.js 环境)cd 新建文件夹npm install --save request
npm install --save request-promise
然后创建一个文件index.js,并在其中加入如下代码,并设置其中的 APPID、SECRET、ENV_ID 等字段。
配置完成后,保存文件。
5. 上传代码
打包完成后,重新访问腾讯云控制台,找到刚刚创建的云函数,进入到「函数代码」中,选择其中的「本地上传文件夹」,选择你刚刚创建的文件夹,等待其自动压缩完成后,点击保存上传。
上传完成后,会自动进行部署。
这样过一会模板消息就会发送成功了
在这里需要感谢一下社区的 白宦成,他的文章《云开发如何对外提供url》给了我灵感,也解决了困扰我多天的问题
至于如何定时发送多个模板消息请结合之前的一篇文章《云开发如何同时发送对个模板消息》