小程序云開(kāi)發(fā)如何使用訂閱消息這個(gè)模塊

由于“模板消息”將下線耐量,已不再支持添加模板飞蚓,所以針對(duì)新的訂閱消息的使用,今天剛好踩坑廊蜒,然后在這里記錄一下趴拧。


模板消息,讓我裂開(kāi)了

其實(shí)山叮,說(shuō)是說(shuō)模板消息換成了訂閱消息著榴,但是根本上還是換湯不換藥的,但是訂閱消息可能相比于模板消息的最大的優(yōu)點(diǎn)就在于他不再依賴于form表單來(lái)提交數(shù)據(jù)了屁倔,因?yàn)橐酝哪0逑](méi)有from-id脑又,根本實(shí)現(xiàn)不了,再加上時(shí)間的限制,但是訂閱消息并沒(méi)有諸多限制

對(duì)比一下總體功能


其實(shí)沒(méi)有什么區(qū)別挂谍,所以使用上也是相通的

但是有好有壞叔壤,訂閱消息今天我剛踩坑就遇到了很多問(wèn)題,一方面是我自己書(shū)寫(xiě)不規(guī)范造成的口叙,一些是我感覺(jué)設(shè)計(jì)有問(wèn)題炼绘,可能訂閱消息功能會(huì)隨著時(shí)間慢慢完善吧

言歸正傳:說(shuō)到訂閱消息的使用,由于我使用的是云開(kāi)發(fā)開(kāi)發(fā)項(xiàng)目妄田,所以在這里我主要是拿云開(kāi)發(fā)做例子

第一步:調(diào)用

wx.requestSubscribeMessage({
? ???tmplIds: [''], //這里就是存放你模板消息的id,可以存放多個(gè)俺亮,上限暫時(shí)不知
?????success (res) {
? ? ? ? ? ? //這里就是做獲得權(quán)限后的回調(diào)
?????})
})

然后訂閱者消息的模板分為一次性和長(zhǎng)久性的,我也是今天寫(xiě)才知道疟呐,一次性為普遍脚曾,只有極個(gè)別的小程序類別上,比如醫(yī)學(xué)启具,教育等才可以申請(qǐng)到長(zhǎng)久性的模板

一次性和長(zhǎng)久性的有什么使用上的區(qū)別本讥,(不好意思,可能我不配看到長(zhǎng)久性的模板鲁冯,因?yàn)槲乙矝](méi)見(jiàn)過(guò)翱椒小)

然后如何模板里填充你想要的消息呢,就需要用到subscribeMessage.send這個(gè)api了

在這里我拿云函數(shù)為例

const cloud = require('wx-server-sdk');

cloud.init();

const db = cloud.database();

exports.main = async(event, context) => {

? try {

? ? const {

? ? ? OPENID

? ? } = cloud.getWXContext();

? ? // 在云開(kāi)發(fā)數(shù)據(jù)庫(kù)中存儲(chǔ)用戶訂閱的課程

? ? const result = await db.collection('messages').add({

? ? ? data: {

? ? ? ? touser: OPENID, // 訂閱者的openid

? ? ? ? page: 'index', // 訂閱消息卡片點(diǎn)擊后會(huì)打開(kāi)小程序的哪個(gè)頁(yè)面

? ? ? ? data: event.data, // 訂閱消息的數(shù)據(jù)

? ? ? ? templateId: event.templateId, // 訂閱消息模板ID

? ? ? ? done: false, // 消息發(fā)送狀態(tài)設(shè)置為 false

? ? ? },

? ? });

? ? return result;

? } catch (err) {

? ? console.log(err);

? ? return err;

? }

};

上面這是獲取權(quán)限的云函數(shù)

const cloud = require('wx-server-sdk');

exports.main = async (event, context) => {

? cloud.init();

? const db = cloud.database();

? try {

? ? // 從云開(kāi)發(fā)數(shù)據(jù)庫(kù)中查詢等待發(fā)送的消息列表

? ? const messages = await db

? ? ? .collection('messages')

? ? ? // 查詢條件這里做了簡(jiǎn)化薯演,只查找了狀態(tài)為未發(fā)送的消息

? ? ? // 在真正的生產(chǎn)環(huán)境撞芍,可以根據(jù)日期等條件篩選應(yīng)該發(fā)送哪些消息

? ? ? .where({

? ? ? ? done: false,

? ? ? })

? ? ? .get();

? ? // 循環(huán)消息列表

? ? const sendPromises = messages.data.map(async message => {

? ? ? try {

? ? ? ? // 發(fā)送訂閱消息

? ? ? ? await cloud.openapi.subscribeMessage.send({

? ? ? ? ? touser: message.touser,

? ? ? ? ? page: message.page,

? ? ? ? ? data: message.data,

? ? ? ? ? templateId: message.templateId,

? ? ? ? });

? ? ? ? // 發(fā)送成功后將消息的狀態(tài)改為已發(fā)送

? ? ? ? return db

? ? ? ? ? .collection('messages')

? ? ? ? ? .doc(message._id)

? ? ? ? ? .update({

? ? ? ? ? ? data: {

? ? ? ? ? ? ? done: true,

? ? ? ? ? ? },

? ? ? ? ? });

? ? ? } catch (e) {

? ? ? ? return e;

? ? ? }

? ? });

? ? return Promise.all(sendPromises);

? } catch (err) {

? ? console.log(err);

? ? return err;

? }

};

上面這是發(fā)送模板消息給用戶的云函數(shù)

然后前端傳過(guò)來(lái)模板消息,模板消息的格式為

const b = {//發(fā)送給用戶

"character_string1":{"value": this.data.shopid},

"thing8":{"value": this.data.lists.shopname},

"amount9":{"value": this.data.lists.shopprice},

"phone_number11":{"value": this.data.tel},

"thing13":{"value": this.data.address}

}

const a = 'xxxxxxxxxxxxxxxxxxx'//模板id

wx.requestSubscribeMessage({//調(diào)用訂閱消息通知用戶

tmplIds:[a],

success:(res)=>{

if (res.errMsg === 'requestSubscribeMessage:ok' && res[a] === "accept") {

wx.cloud.callFunction({

name:'subscribe',

data:{

data:b,

templateId:a,

open:this.data.shopopenid

}

}).then(rts=>{

wx.showToast({

title:'訂閱成功'

})

}).catch((err)=>{

console.log(err)

wx.showToast({

title:'訂閱失敗'

})

})

}

},

fail(err){

console.log(err)

}

})

切記在一定要在send的這個(gè)云函數(shù)中設(shè)置定時(shí)觸發(fā)器跨扮,這樣就可以做到用戶實(shí)時(shí)知道了


在用戶的config.json文件中

{

? "permissions": {

? ? "openapi": [

? ? ? "subscribeMessage.send"

? ? ]

? },

? "triggers": [

? ? {

? ? ? "name": "sendMessagerTimer",

? ? ? "type": "timer",

? ? ? "config": "0 * * * * * *"

? ? }

? ]

}

然后先上傳定時(shí)觸發(fā)器序无,在上傳云函數(shù),就可以了

如果文章上有什么錯(cuò)誤衡创,或者我寫(xiě)的有問(wèn)題的也希望大家批評(píng)指正帝嗡,麻煩各位了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钧汹,隨后出現(xiàn)的幾起案子丈探,更是在濱河造成了極大的恐慌,老刑警劉巖拔莱,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異隘竭,居然都是意外死亡塘秦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門动看,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)尊剔,“玉大人,你說(shuō)我怎么就攤上這事菱皆⌒胛螅” “怎么了挨稿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)京痢。 經(jīng)常有香客問(wèn)我奶甘,道長(zhǎng),這世上最難降的妖魔是什么祭椰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任臭家,我火速辦了婚禮,結(jié)果婚禮上方淤,老公的妹妹穿的比我還像新娘钉赁。我一直安慰自己,他們只是感情好携茂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布你踩。 她就那樣靜靜地躺著,像睡著了一般讳苦。 火紅的嫁衣襯著肌膚如雪带膜。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天医吊,我揣著相機(jī)與錄音钱慢,去河邊找鬼。 笑死卿堂,一個(gè)胖子當(dāng)著我的面吹牛束莫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播草描,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼览绿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了穗慕?” 一聲冷哼從身側(cè)響起饿敲,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逛绵,沒(méi)想到半個(gè)月后怀各,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡术浪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年瓢对,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胰苏。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硕蛹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情法焰,我是刑警寧澤秧荆,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站埃仪,受9級(jí)特大地震影響乙濒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贵试,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一琉兜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毙玻,春花似錦豌蟋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至运准,卻和暖如春幌氮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胁澳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工该互, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人韭畸。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓宇智,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親胰丁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子随橘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容