消息通知需求
完成协作工作。
在很多应用中,各种方式的消息通知是必不可少的功能之一,蜘蛛表格也不例外,涉及消息推送通知的地方很多,总结起来有以下几处:
向管理员用户发送其组织内的重要通知,比如人员被邀请注册、企业账户需要升级或续费等这些系统消息。
用户注册、重置密码时的通知。
当组织内的用户 A 向用户 B 共享了一份数据之后,需要通知用户 B。
用户可以主动订阅某条数据的评论信息,如果主动订阅,当这条数据有任何人评论了新的内容时,会通知到订阅的用户。
用户 A 可以在数据记录中以及针对数据的评论中@用户 B,此时用户 B 会收到通知消息。
用户 A 将某条数据记录的协作者指定为用户 B 时,可以通知用户 B 会收到协作的通知消息。
所在组织的各种用量(比如附件空间大小、剩余邮件封数)即将用尽或已经用尽时,需要通知组织管理员。
工作流通知。用户可以根据数据自由设定条件(比如数据记录发生变化、有人提交了新的数据、或是到达了某个事件点),当达到这个条件时执行其设定的操作,而“消息通知”是可以设定的操作之一。
蜘蛛表格中的数据字段都是用户自主定制的,工作流程触发条件和操作也是用户自主定制,非常灵活。蜘蛛表格在很早之前就已经实现了电子邮件通知以及应用内部的站内信通知,结合国内的互联网环境,很多用户希望能接入微信通知,于是就有了这篇记录实现过程的文章。
开始之前的准备
一个已认证的服务号
模板消息功能默认是没有开放的,需要自行在功能->添加功能插件处申请,只有已认证的服务号才能成功申请到模板消息的使用权限。
公网可以访问的服务器
模板消息功能需要公众号启用开发模式,在公众号后台的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token 和 EncodingAESKey,其中 URL 是开发者用来接收微信消息和事件的接口 URL。
足够的耐心,申请或在模板库中寻找适合你的消息模板。
开通了模板消息的功能之后,还需要添加消息模板才能使用,首先需要设置好行业,才能查看所选行业分类下的所有公共消息模板,这里要吐槽一下微信,1000 多页夹杂着已失效模板的列表只能一个一个点开去看,要找到合适的模板只能尝试用关键字去搜索。
如果实在找不到合适的模板,就只能自己申请新的消息模板了,而申请模板又是一个考验耐心的事情:
可以看到,蜘蛛表格工作流通知的模板消息,从第一次申请消息模板到最终审核通过,经历了三次修改,历时足有一个月之多。
服务端接口开发
一切准备材料就绪,接下来就是开发过程了。
蜘蛛表格的后端使用 golang 语言开发,这里使用了第三方的 WeChat SDK for Go( 项目地址)。
首先需要配置微信公共账号的 AppID,AppSecret,Token 以及EncodingAESKey信息:
//配置微信参数
config := &wechat.Config{
AppID: “xxxx”,
AppSecret: “xxxx”,
Token: “xxxx”,
EncodingAESKey: “xxxx”,
Cache: cache.NewMemory(),
}
wc := wechat.NewWechat(config)
这里SDK已经帮我们封装处理了微信的签名认证机制。所以我们发送模板消息可以直接调用SDK中template包的方法来构建消息实例并发送出去:
func sendWechatMessage(userOpenID, tplID, tplArgs, link) {
wechatMessage := &template.Message{
ToUser: userOpenID, // 接收这条模板消息的用户OpenID
TemplateID: tplID, // 这里填写消息模板的ID
URL: link,
Data: tplArgs,
}
tplInstance := template.NewTemplate(wechat.Wechat.Context)
msgID, err := tplInstance.Send(wechatMessage)
if err != nil {
glog.Errorf(“error with template msgid: %v, %v”, msgID, err)
}
}
其中,tplArgs是消息模板对应的变量参数,类似这样:
map[string]*(template.DataItem) {
“first”: {Value: “你好,李惠中,有一条你订阅的工作流已被执行。”},
“keyword1”: {Value: “【面试评价】工作表中有一条记录等待更新”},
“keyword2”: {Value: “薛明超”},
“keyword3”: {Value: “2019年11月21日 14:36”},
“remark”: {Value: “点击进入「蜘蛛表格」平台,进一步查看信息”},
},
}
如果需要跳转小程序,还可以传入”miniprogram”参数,具体用法可以参考官方文档。
在相应的业务代码中,调用sendWechatMessage函数,就可以发送对应业务的模板消息了。
在开发过程中,可以申请一个微信测试号进行调试,调试完成后再上线到生产环境。注意测试号可以随意添加模板,而真正的生产环境账号的模板是在模板库中选择或申请的。
用户通过扫码绑定微信账号后,就可以收到蜘蛛表格的工作流通知了,用户点击后可以打开记录数据的详情,非常方便。当然,绑定微信账号的过程不在这篇文章的讨论范围,有机会我可以单独再写一篇文章。