参考文档:
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/template-message.html#%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF%E7%AE%A1%E7%90%86
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/template-message/templateMessage.send.html
微信6.5.2及以上版本支持
基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验。
模板下发条件:用户本人在微信体系内与页面有交互行为后触发,
有两个方法可以获取模板 ID:
登录 https://mp.weixin.qq.com 获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用
report-submit
为 true
时,可以声明为需要发送模板消息,此时点击按钮提交表单可以获取 formId
,用于发送模板消息。或者当用户完成 支付行为,可以获取 prepay_id
用于发送模板消息。使用效果
1. 支付
当用户在小程序内完成过支付行为,可允许开发者向用户在7天内推送有限条数的模板消息(1次支付可下发3条,多次支付下发条数独立,互相不影响)
2. 提交表单
当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)
本接口应在服务器端调用,详细说明参见服务端API。
本接口支持云调用。需开发者工具版本 >=
1.02.1904090
(最新稳定版下载),wx-server-sdk
>=0.4.0
发送模板消息
调用方式:
POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
access_token | string | 是 | 接口调用凭证 | |
touser | string | 是 | 接收者(用户)的 openid | |
template_id | string | 是 | 所需下发的模板消息的id | |
page | string | 否 | 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 | |
form_id | string | 是 | 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id | |
data | Object | 否 | 模板内容,不填则下发空模板。具体格式请参考示例。 | |
emphasis_keyword | string | 否 | 模板需要放大的关键词,不填则默认无放大 |
返回的 JSON 数据包
属性 | 类型 | 说明 |
---|---|---|
errcode | number | 错误码 |
errmsg | string | 错误信息 |
errcode 的合法值
值 | 说明 | 最低版本 |
---|---|---|
40037 | template_id不正确 | |
41028 | form_id不正确,或者过期 | |
41029 | form_id已被使用 | |
41030 | page不正确 | |
45009 | 接口调用超过限额(目前默认每个帐号日调用限额为100万) |
{
"touser": "OPENID",
"template_id": "TEMPLATE_ID",
"page": "index",
"form_id": "FORMID",
"data": {
"keyword1": {
"value": "339208499"
},
"keyword2": {
"value": "2015年01月05日 12:30"
},
"keyword3": {
"value": "腾讯微信总部"
} ,
"keyword4": {
"value": "广州市海珠区新港中路397号"
}
},
"emphasis_keyword": "keyword1.DATA"
}
{
"errcode": 0,
"errmsg": "ok"
}
云调用是小程序·云开发提供的在云函数中调用微信开放接口的能力,需要在云函数中通过
wx-server-sdk
使用。
openapi.templateMessage.send
需在
config.json
中配置templateMessage.send
API 的权限,详情
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
touser | string | 是 | 接收者(用户)的 openid | |
templateId | string | 是 | 所需下发的模板消息的id | |
page | string | 否 | 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 | |
formId | string | 是 | 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id | |
data | Object | 否 | 模板内容,不填则下发空模板。具体格式请参考示例。 | |
emphasisKeyword | string | 否 | 模板需要放大的关键词,不填则默认无放大 |
返回的 JSON 数据包
属性 | 类型 | 说明 |
---|---|---|
errCode | number | 错误码 |
errMsg | string | 错误信息 |
errCode 的合法值
值 | 说明 | 最低版本 |
---|---|---|
0 | 成功 |
抛出的异常
属性 | 类型 | 说明 |
---|---|---|
errCode | number | 错误码 |
errMsg | string | 错误信息 |
errCode 的合法值
值 | 说明 | 最低版本 |
---|---|---|
40037 | template_id不正确 | |
41028 | form_id不正确,或者过期 | |
41029 | form_id已被使用 | |
41030 | page不正确 | |
45009 | 接口调用超过限额(目前默认每个帐号日调用限额为100万) |
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
try {
const result = await cloud.openapi.templateMessage.send({
touser: 'OPENID',
page: 'index',
data: {
keyword1: {
value: '339208499'
},
keyword2: {
value: '2015年01月05日 12:30'
},
keyword3: {
value: '腾讯微信总部'
},
keyword4: {
value: '广州市海珠区新港中路397号'
}
},
templateId: 'TEMPLATE_ID',
formId: 'FORMID',
emphasisKeyword: 'keyword1.DATA'
})
console.log(result)
return result
} catch (err) {
console.log(err)
return err
}
}
{
"errCode": 0,
"errMsg": "openapi.templateMessage.send:ok"
}