专栏首页Bug生活2048[博客小程序]评论通知功能实现(二)——实战过程中的坑

[博客小程序]评论通知功能实现(二)——实战过程中的坑

上一篇小程序发送模板消息的几种实现主要介绍了实现评论通知功能最重要的一环,这篇文章主要介绍实现该功能的具体实战。

实现流程

思路其实很简单,简单画了个流程图如下:

实现流程

这里有两个比较坑的地方,一个是微信本身发送模板消息的限制:

当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)

另外一个就是管理员如何初始化自己的formId的问题,而且自身的formId需求量比较大,读者评论完之后就要向管理员推送消息。

所以无奈,增加了一个后台配置的功能,定期手动触发去生成自己的FormId「自动不行,只能手动,泪奔中」

另外补充下,网上说的通过嵌套穿透的方式无限获取formId的方式已经行不通了,生成出来的formId都是一样的。

评论提交收集FormId

首先我们需要收集用户的FormId,有FormId才能发送对应的模板消息,在表单标签上加上report-submit属性即可。

<form catchsubmit="formSubmit" report-submit="true">

这样我们在提交评论表单的时候会获取到对应的FormId, 我们将这个FormId保存至我们的云函数中。

//评论提交按钮部分代码console.info(e.detail.formId)if (e.detail != undefined && e.detail.formId != undefined) {    var data = {        formId: e.detail.formId,        author: 0,        timestamp: new Date().getTime()      }    wxApi.insertFormIds(data).then(res => {        console.info(res)      })    }
//调用云数据库function insertFormIds(data) {  return db.collection('openid_formids').add({    data: data  })}

这样管理员在接收到评论之后回复时就可以到openid_formids的集合中找到对应的formId来进行评论回复的模板消息推送了。

管理员生成FormId

为了让管理员能有更多的FormId来接收评论通知,因此我在小程序中搭建了个生成FormId的小页面。

小程序截图1

这样偶尔登录自己的小程序,查看下自己FormId的使用情况,若没有了可以手动生成几个。

小程序截图2

当然,这里会有一个权限问题,理论上这个页面只有管理员才可以展示,而其他人是没有权限访问的,因此需要提供个验证权限的云函数。

这里可以使用云函数的环境变量来简单做个验证,将你的管理员的openId配置在环境变量中,云函数验证下openId是否一致即可。

云函数代码如下,这样代码中不会存放敏感信息,开源的代码上传github也不会泄露。

/** * 验证 * @param {} event  */async function checkAuthor(event) {  if (event.userInfo.openId == process.env.author) {    return true;  }  return false;}

发送模板消息

最后就是发送模板消息的实现了,方法在上一篇说的比较具体了,基于我的博客小程序,使用云调用是最方便的。

主要逻辑是根据传入的openId(如果为空默认取管理员的openId)到云数据库中取对应的formId。

然后基于openId和formId发送相应的模板消息,发送后从云数据库中移除「发送一次后FormId就已经失效了」

具体代码实现如下:

/** * 发送通知消息 * @param  event  */async function sendTemplateMessage(event) {
  var touser = "";  var form_id = "";  var openId = event.tOpenId == "" ? process.env.author : event.tOpenId
  //1.获取formId  var openIdformIds = await db.collection('openid_formids').where({    _openid: openId  }).limit(1).get()  if (openIdformIds.code) {    return;  }  if (!openIdformIds.data.length) {    return;  }  touser = openIdformIds.data[0]['_openid']  form_id = openIdformIds.data[0]['formId']
  //2.取到后从云数据库中移除  const removeResult = await db.collection('openid_formids').doc(openIdformIds.data[0]['_id']).remove()  console.info(event.nickName + ":" + event.message)
  //3.发送模板消息  const sendResult = await cloud.openapi.templateMessage.send({    touser: touser,    templateId: template,    formId: form_id,    page: 'pages/detail/detail?blogId=' + event.blogId,    data: {      keyword1: {        value: event.nickName // keyword1 的值      },      keyword2: {        value: event.message // keyword2 的值      }    },  })  return sendResult}

到这里,具体实现流程就介绍完了,过程中还是会遇到些编码问题「主要还是对前端不是很熟悉,基本功问题」

总结

虽然功能基本实现,也已经上线了,但其实还是有一些细节问题的。

比如通知消息点进去之后应该自动转到对应的评论区域,formId过期需要定时清理,管理员FormId需要通知管理员等,可以利用小程序的定时触发器等功能慢慢优化,后期优化后再来写文章总结。

本文分享自微信公众号 - Bug生活2048(BugLife2048),作者:Bug2048

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 5.20,程序员的孤独你不懂,自己也不懂

    今天的朋友圈迎来了一波小高峰,毕竟今天也算一个好日子。基本上分为两种,一种是晒幸福的,是那种犹抱琵琶半遮面的Show,看看下图这种,顿时孤独感井喷上来。

    Bug生活2048
  • 基于云开发的小程序评论、点赞、收藏功能实现总结

    实现文章的一些操作功能,最主要的还是评论,这是作者和读者之间沟通的桥梁,评论功能的衍生无非是细化作者和读者之间的互动,或者增加文章的传播,所以在动手开发时需要思...

    Bug生活2048
  • [mini-blog]小程序最近两个迭代版本总结,来看看更新了哪些内容吧

    对用户最直观的功能就是新增专题页面,页面UI还是比较简单的,主要没有特别好的想法,所以一切从简了。

    Bug生活2048
  • python+shell 备份 csdn 博客文章

    这里,我们将文章的 ID 和日期,组成一个元组,用逗号分隔。然后我们可以手工加上一个方括号,组成一个由元组构成的数组,方便我们后面使用。

    FungLeo
  • Python(2):创建函数模块

    说明: 在使用python的时候我们除了使用内置的函数之外,可能还需要使用一些别人写的函数。或者我们写的代码也希望可以给其他人使用。要实现这样的功能,我们就需要...

    SecondWorld
  • 使用Loupe Cell Browser查看10X单细胞转录组分析结果

    10X genomics公司不仅为单细胞转录组数据分析提供了配套的cell Ranger软件,同时也提供了专门的分析结果查看软件-Loupe Cell Brow...

    生信修炼手册
  • R 热图绘制heatmap①

    用户1359560
  • MySQL 基本操作、数据库操作和表操作

    happyJared
  • R语言可视化——数据地图离散百分比填充(环渤海)

    今天跟大家分享如何以百分比形式填充离散分段数据地图。 案例用环渤海三省二市的地理数据。 library(ggplot2) library(maptools) l...

    数据小磨坊
  • 甲基化芯片的一般分析流程

    同样的策略,我们也可以应用到其它领域的知识背景快速学习,比如我们的lncRNA系列,miRNA系列,现在我们一起学习一下甲基化吧。

    生信技能树

扫码关注云+社区

领取腾讯云代金券