订阅消息

来源:6-6 云调用实现模板消息推送

慕粉2138437036

2020-04-24

订阅消息的提示为什么只有自己这里能收到提示呀,如果评论完不是应该提示楼主吗,还是我代码有问题呀
js:
onSend() {
const templateId = '0UJj5EVXsdAZ7QKdmBUVSe63BgQUk7azzxwmJu4LGk4’
wx.requestSubscribeMessage({
tmplIds: [templateId],
success(res) {
if (res[templateId] == ‘accept’) {
//用户同意了订阅,允许订阅消息
wx.showToast({
title: ‘订阅成功’
})
} else {
//用户拒绝了订阅,禁用订阅消息
wx.showToast({
title: ‘订阅失败’
})
}
},
fail(err) {
console.error(err)
}
})
//插入数据库
let content = this.data.content
if (content.trim() == ‘’) {
wx.showModal({
title: ‘评论内容不能为空’,
content: ‘’,
})
return
}
wx.showLoading({
title: ‘评价中’,
mask: true,
})
db.collection(‘blog-comment’).add({
data: {
content,
createTime: db.serverDate(),
blogId: this.properties.blogId,
nickName: userInfo.nickName,
avatarUrl: userInfo.avatarUrl
}
}).then((res) => {

    wx.cloud.callFunction({
      name: 'sendMessage',
      data: {
        content,
        blogId: this.properties.blogId
      }
    }).then((res) => {
      // console.log(res)


      wx.hideLoading()
      wx.showToast({
        title: '评论成功',
      })
      this.setData({
        modalShow: false,
        content: ''
      })
      //父元素刷新评论页面
      this.triggerEvent('refreshCommentList')
    })
  })
},

云函数:
// 云函数入口文件
const cloud = require(‘wx-server-sdk’)

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {

try {
const wxContext = cloud.getWXContext()
const templateId = ‘0UJj5EVXsdAZ7QKdmBUVSe63BgQUk7azzxwmJu4LGk4’

return await cloud.openapi.subscribeMessage.send({
  touser: wxContext.OPENID,
  page: `/pages/blog-comment/blog-comment?blogId=${event.blogId}`,
  lang: 'zh_CN',
  data: {
   
    thing4: {
      value: '您有新的评论'
    },
    thing1: {
      value: event.content
    }
  },
  templateId: templateId,
  miniprogramState: 'developer'
})
console.log(result)
return result

} catch (err) {
console.log(err)
return err
}
}
订阅消息:
模板ID 0UJj5EVXsdAZ7QKdmBUVSe63BgQUk7azzxwmJu4LGk4
模板编号 5104
标题 留言评论提醒
类目 教育信息服务

详细内容
评论结果 {{thing4.DATA}}
评论内容 {{thing1.DATA}}

写回答

2回答

谢成

2020-04-24

你这里填的是自己的openid,肯定就是自己收到了。

//img1.sycdn.imooc.com/szimg/5ea2fb8e09d9a2f107160436.jpg


0
3
慕粉2138437036
回复
谢成
好的,我修改云函数之后获取到的openid字段用不了// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() let blog = {} // 云函数入口函数 exports.main = async (event, context) => { let blogId = event.blogId try { blog = await db.collection('blog').where({ _id: blogId }).get().then((res)=>{ return res.data }) const templateId = '0UJj5EVXsdAZ7QKdmBUVSe63BgQUk7azzxwmJu4LGk4' return await cloud.openapi.subscribeMessage.send({ touser: blog._openid, page: `/pages/blog-comment/blog-comment?blogId=${event.blogId}`, lang: 'zh_CN', data: { thing4: { value: '您有新的评论' }, thing1: { value: event.content } }, templateId: templateId, miniprogramState: 'developer' }) console.log(result) return result } catch (err) { console.log(err) return err } } 麻烦老师给看一下
2020-04-25
共3条回复

谢成

2020-04-25


从问的问题上看,我觉得现在的主要问题,是还没有真的明白订阅消息的意思,应该没有明白课程中的模板消息的意思。两种消息推送方式道理是一样的,都是谁订阅或者谁产生formid就给谁推送消息,不能随便给无关的人推送消息。模板消息我们就先不提了,现在也不让使用了。


订阅消息文档: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html

1、这个是要谁订阅了这个消息,才能给谁推送,你这里应该是评论人订阅了,那么只能给评论人推送。不可能说评论人订阅的,去给作者去推送,这样会骚扰用户因为作者没有订阅,这是小程序不能允许的。

//img.mukewang.com/szimg/5ea44b5c09a3682507570212.jpg

2、模板中配置的一次订阅:

//img.mukewang.com/szimg/5ea44b7209d975de09740565.jpg

也就是说订阅一次只能推送一次消息。


所以如果你认真使用过其他小程序的话就会发现,如果是给别人推送,一般都是小程序结合公众号来推送,因为这种推送限制更宽松,这种需要企业账号来完成。

而小程序直接推送更适合比如我去订票了或者我去定外卖了,我预定成功了,给我推送。注意这里的主角都是我,不是别人。因为订票一次,相当于订阅一次,如果是模板消息的话就相当于产生了一个formid,所以可以给我推送一次,注意只是一次。


其实多看看官方文档就能清楚小程序这么限制的初衷了,就是小程序不能随意骚扰用户,所以订阅权都是在用户手里,一定要在用户授权同意的情况下才能推送。


希望通过上面的回答,可以帮助到你。



2
1
慕粉2138437036
好的麻烦老师了
2020-04-25
共1条回复

微信小程序云开发-从0打造云音乐全栈小程序

横跨小程序端、云后端、CMS一站式云开发的小程序全栈课程

1938 学习 · 2768 问题

查看课程