需求描述
小程序目前的主要能力还都在小程序端实现,但是我们在进行开发的小程序不可能只有小程序端能力,我们也会有一些管理端能力。比如说,当用户在小程序中提交了消息以后,我们的小程序应该可以通知到小程序的管理员,以便让管理员进行下一步操作。
解决方案
架构说明
由于小程序本身不支持长久性的消息通知能力,因此,我们可以考虑借助一些第三方的服务和能力,来完成我们自己的需求。
这个需求很适合使用小程序新发布的 长期订阅消息 能力,但是目前该能力开放的类目还不足以支持我们的需要。
一般而言,使用短信是我们目前到达率比较高的能力,且更为普遍的能力,其他通道的能力大多受限或不符合国情,为了确保通知信息的到达率,我们这篇文章就使用短信来完成需求。
架构图示
具体操作
1. 开通腾讯云短信服务并获取配置信息
我们想要发送短信,就需要先有一个短信服务,用于发送短信,这里我们可以使用腾讯云提供的云短信服务来发送短信。
开通腾讯云短信,并创建应用
首先,你需要访问 https://console.cloud.tencent… , 点击开通腾讯云·云短信。
在开通完成后,点击界面中的【添加应用】,添加一个新的短信应用,你可以根据自己的实际情况,添加短信应用的名称和简介。
获取 AppID、App Key
添加完成后,点击你创建好的应用,进入到应用详情页, 在应用的详情页中的应用信息栏目中,你可以找到 AppID 和 AppKey,复制并保存这两个值,稍候我们会用到。
2. 配置短信模板、短信签名
开通了腾讯云短信服务以后,我们需要去创建短信模板,以及短信签名
腾讯云短信并不是让你随意发所有的内容的,而是你需要创建一个模板,并使用特定的模板来完成短信的发送。
短信签名则是原来让收到短信的用户知道他所收到的短信来自于他的那一个服务,一般来说,设置为产品的品名。
在腾讯云控制台中,进入到【云短信】控制台
创建短信签名
首先,点击【国内短信 】,进入到短信的页面,点击【 创建签名】,然后在弹出的窗口中输入你的签名的具体信息,比如这里我就是以公众号【程序百晓生】来创建签名。
签名创建完成后,你需要等待腾讯云官方的审核,审核通过以后,你添加的签名才可以被使用。
创建短信模板
创建完签名,你需要创建一个短信的正文模板,用于发送短信。
输入模板名称、短信类型,然后选择标准模板中的模板,这里我们选择“您有新的 {1} 订单,请注意查收!”这个模板。
除了使用标准模板,你也可以自己编写一个模板,为了方便文章撰写,这里使用标准模板。
然后点击提交,等待审核就可以了。
3. 编写云函数发送短信
在完成了基础的配置后,我们在微信开发者工具中实现一个云函数,用于调用腾讯云的短信服务,实现具体的通知。
首先,我们创建一个新的云函数,名为 notifyAdmin
,意为用于通知管理员的云函数。
然后,选择我们刚刚创建的 notifyAdmin
云函数,在函数上右击,选择【在终端中打开】,进入到控制台,并输入如下命令,安装所需的短信 SDK。
npm install --save sms-node-sdk
然后,修改云函数的 index.js
,加入如下代码
// 云函数入口文件
const cloud = require('wx-server-sdk')
const {SmsClient} = require('sms-node-sdk');
const AppID = 1400286810; // SDK AppID 是 1400 开头
// 短信应用 SDK AppKey,替换为你自己的 AppKey
const AppKey = 'xxxx';
// 需要发送短信的手机号码
const phoneNumber = '10000000';
// 短信模板 ID,需要在短信应用中申请
const templId = 476457;
// 签名,替换为你自己申请的签名
const smsSign = '程序百晓生';
// 实例化 smsClient
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
let orderId = event.orderId;
let smsClient = new SmsClient({AppID, AppKey});
return await smsClient.init({
action: 'SmsSingleSendTemplate',
data: {
nationCode: '86',
phoneNumber,
templId: templId,
params: [orderId],
sign: smsSign // 签名参数未提供或者为空时,会使用默认签名发送短信
}
})
}
完成代码的修改后,就可以部署你的云函数了,右键你的云函数,选择【上传并部署云函数:云端安装依赖】
4. 在小程序端触发短信
在前面我们提到,在一些特定的场景下,我们希望用户的操作可以给管理员发送消息通知。在具体的实现的时候,我们可以根据自己的实际业务需求,来设定我们的通知发送的条件,比如说,在用户支付成功后发送消息,则相关代码如下:
let orderId = 'this is a orderId';
wx.requestPayment({
success:res => {console.log("User Payment Success");
// 调用云函数发送短信
wx.cloud.callFunction({
name:"notifyAdmin",
data:{orderId: orderId}
});
}
})
总结
经过本次的分享,我们了解到了如何借助短信服务,实现云开发的后台通知能力,实际上,除了短信服务,你还可以借助一些其他的工具,比如邮件、企业微信机器人等能力,实现后台管理信息的推送。
明天,我们将分享 如何借助通过微信发送订单消息。