利用小程序云开发定时发送订阅消息实例教程

利用小程序云开发定时发送订阅消息实例教程

今天给大家写一个利用小程序云开发定时发送订阅消息的实例教程,原理上还是比较简单的,但是对于小白而且可能有一点不友好,不管怎么说,大家先看看再说吧。

挺多天没有更新文章了,主要是临近节假日,活动应酬啥的都比较多,而且本人有比较喜欢偷懒,所以就一直停更了这么多天。那么接下来就是今天的主要内容:利用小程序云开发定时发送订阅消息的教程了。

获取模板ID

这些之前都提到过,所以不在多提了,今天主要是给大家演示云函数如何去实现定时发送。如果有不懂的可以去看看之前的关于订阅消息的文章。

获取下发权限

订阅消息的发送必须是用户已经授权同意之后才可以发送,所以我们必须要先获取下发权限,代码如下:

wx.requestSubscribeMessage({
  tmplIds: ['SMakIPqywUEUIyzLK78Kq69KMk4zj91WReAYBF-AA3c'],
  success(res) {
  console.log('已授权接收订阅消息')
   }
})

注: 小程序发送订阅消息是通过用户的openid进行发送的,如果采用云开发可以很简单的获取到用户的openid,建议将需要发送的时间一并保存再数据库中,这样便于发送订阅消息,可以给授权但是未发送订阅消息的设置参数 done为0,发送完成后更新为1,这样可以有效的获取到可发送订阅消息的用户,利于遍历发送。

设置定时触发器

小程序云开发内置有定时触发器,只需要将如下代码放入配置文件中即可:

{
  "triggers": [
    {
      "name": "timeingTaskExecutor",
      "type": "timer",
      "config": "0 */1 * * * * *"
    }
  ]
}

上述代码表示的是每分钟执行一次,若有更多需求可以去看官方文档关于定时器的介绍。

注:再配置文件中设置好之后需要上传触发器,直接单击右键就可以看到上传触发器选项。

利用云函数发送订阅消息

这里给大家简单讲解一下整个过程,之前我们已经将需要发送的时间和用户已经保存在了数据库中,那么我们在某一个时间里,就先筛选出这个时间中需要发送订阅消息的用户,进行发送。代码如下:

// 云函数入口文件sendMsg
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const date = new Date();
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let hours = date.getHours();
  let minuntes = date.getMinutes();
  let nowDate =year + '-' + month + '-' + day;
  minuntes = minuntes > 9 ? minuntes : "0" + minuntes;
  let nowTime = hours + ':' + minuntes
  //查数据库内容

  const msg = await db.collection("Task").where({
    date: nowDate,
    time: nowTime
  }).get();

  //动态取值
  const sendMsg = msg.data.map(async item => {
    await cloud.openapi.subscribeMessage.send({
      touser: item.openid, //要推送给那个用户
      page: '/pages/details/details?id=' + item._id, //要跳转到那个小程序页面
      data: {
        "thing4": {
          "value": item.title
        },
        "time2": {
          "value": item.date
        }
      },
      templateId: 'SMakIPqywUEUIyzLK78Kq69KMk4zj91WReAYBF-AA3c' //模板id
    });
    const upd = db.collection('Task').where({
      date: nowDate,
      time: nowTime
      })
      .update({
        data: {
          done: "1",
        },
      });
  });
  return Promise.all(sendMsg);
}

注:上面的时间是筛选条件可以根据你自己的条件去写,我只是给大家写个样子,不过值得注意的是小程序云空间的本地时间可能会存在6个小时的时间差,这个只需要改一下环境变量就行了。

以上就是这次的主要内容了, 如果对你有帮助不妨给我点个赞。

原创文章,作者:小创果,如若转载,请注明出处:https://www.i4qq.com/jpjc/xcxykfdyxx.html
QQ微信头像制图工具箱小程序纯前端源码
« 上一篇 09-21

发表评论

作者信息

热门文章

标签TAG

热评文章