2019年10月12日微信開放了小程式訂閱消息的功能。按官方的說法,目前的模闆消息在實作小程式服務閉環上存在缺陷:
1. 部分開發者在使用者無預期或未進行服務的情況下發送與使用者無關的消息,對使用者産生了騷擾;2. 模闆消息需在使用者通路小程式後的 7 天内下發,不能滿足部分業務的時間要求
模闆消息确實存在上述的硬傷,不利于小程式的使用者留存和使用者體驗。為了解決這些問題,微信官方推出了使用者訂閱消息功能。我在微慕專業版上加了訂閱消息的功能,并驗證了這個功能。這個功能是否能都達到官方的預期,這個我感覺不那麼樂觀。這裡我先說我的感受:目前的訂閱消息還很不完善,基本是“半成品”,後續還有很大的優化空間。
目前,官方隻開放了“一次性訂閱消息”,尚未開放“長期性訂閱消息”,是以我隻嘗試了“一次性訂閱消息”。
一次性訂閱消息:用于解決使用者使用小程式後,後續服務環節的通知問題。使用者自主訂閱後,開發者可不限時間地下發一條對應的服務消息;每條消息可單獨訂閱或退訂。
訂閱消息推送位置:服務通知訂閱消息下發條件:使用者自主訂閱訂閱消息卡片跳轉能力:點選檢視詳情可跳轉至該小程式的頁面
以下我簡單說明訂閱消息的開發過程和使用體驗。
一.訂閱消息的開發
1.擷取訂閱消息的模闆ID
在微信小程式的管理背景,在左側“功能”菜單,選擇“訂閱消息”,然後點選“添加”
然後選擇你需要的消息模闆,并配置關鍵詞。
配置完成後,如下圖所示。
值得關注的是,在配置好的模闆詳情頁面裡的“詳細内容”很重要,這個就是開發訂閱消息時需要遵循的消息格式,這個格式和模闆消息有細微的差别
根據微慕小程式的需要,我選用了“新的評論提醒”和“内容更新提醒”這兩個消息模版。前者用于提醒發表話題或文章的作者,有新的話題或文章評論,增強作者與讀者之間的交流互動;後者是提醒訂閱使用者,小程式有新的文章釋出,引導使用者回歸小程式。
訂閱消息申請模闆的時候,需要選擇所屬類目,隻能選擇目前小程式相關的類目模闆,對于模闆消息不需要選擇對應類目。如果删除小程式類目,就會把訂閱消息模闆一起删除。是以删除類目要小心謹慎。
2.觸發使用者訂閱,擷取下發的權限觸發使用者訂閱,微信小程式提供的api是:
wx.requestSubscribeMessage
,使用者發生點選行為或者發起支付回調後,才可以調起訂閱消息界面。
注意:微信小程式開發工具尚不支援此功能,在開發工具觸發訂閱的api,會提示:
requestSubscribeMessage:fail 開發者工具暫時不支援此 API 調試,請使用真機進行開發
調用api的代碼示例如下:
wx.requestSubscribeMessage({
tmplIds: ["模闆A","模闆B"],
success: function (res) {
//成功
},
fail(err) {
//失敗
console.error(err);
}
})
wx.requestSubscribeMessage(Object object) 的回調函數
object.success
參數有兩個:errMsg和TEMPLATE_ID;接口調用成功時errMsg值為’requestSubscribeMessage:ok’。TEMPLATE_ID是動态的鍵,即模闆id,值包括’accept’、’reject’、’ban’。’accept’表示使用者同意訂閱該條id對應的模闆消息,’reject’表示使用者拒絕訂閱該條id對應的模闆消息,’ban’表示已被背景封禁。例如
{ errMsg: “requestSubscribeMessage:ok”, zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: “accept”} 表示使用者同意訂閱zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE這條消息。
個人覺得這個動态鍵不是特别合理,代碼處理起來有些麻煩,如果改成靜态鍵的json格式比較友善處理,例如:
{
errMsg:"requestSubscribeMessage:ok",
result: [
{ templateId:"zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE",
status:"accept"
}
]
}
在手機上調用此api方法會調出訂閱消息的界面,如下圖所示:
關于這個訂閱消息的授權有幾點要注意:
1) 在确認提示框裡,如果使用者選擇“取消”表示拒絕(取消)訂閱消息,選擇“允許”表示使用者訂閱一次消息。
2) 如果使用者不勾選“總是保持以上選擇,不再詢問”,那麼每次使用者觸發都會彈出提示框。
3) 如果使用者勾選“總是保持以上選擇,不再詢問”,那麼将再也不會喚起這個對話框。同時,如果選擇“取消”,那麼以後每次調用這個api的時候,都會自動拒絕;如果選擇“允許”,那麼以後每次調用此api,都會自動允許授權。
目前小程式沒有提供擷取使用者是否授權訂閱消息的方法。通過wx.openSetting 方法無法擷取使用者是否授權消息訂閱的資訊,scope 清單沒有訂閱消息的内容。
如果想從自動拒絕轉換到自動自動運作,需要打開小程式的設定去配置。設定方法:點選小程式右上角的三個點,打開如下對話框
然後選擇“設定”,在設定項裡選擇“訂閱消息”
4)對于同一種消息,使用者可以訂閱多次,訂閱多少次,就會收到多少次訂閱消息,這個訂閱次數是否有上限,官方沒有說明,初步判斷是不限的。但是,微信不會提供訂閱的次數,是以需要在小程式的後端服務裡存儲使用者訂閱的次數。是以,我在微慕小程式專業版裡,提供了一個給使用者多次訂閱的設定,并記錄使用者訂閱的次數。
如果使用者需要某個消息服務,可以訂閱多次,當然也可以在點選“訂閱”的對話框裡選擇“取消”,“取消”一次也就減少一次訂閱。
5)對于支付的場景,也需要使用者确認是否訂閱,這個我覺得不合理,支付後給使用者一個訂單推送消息應該是剛性需求,不需要再詢問一遍使用者是否訂閱。
2.調用接口下發訂閱消息
訂閱消息下發的接口是小程式背景服務端調用:subscribeMessage.send,此方法類似下發模闆消息的方法,詳細調用說明見參考官方的連結:
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
訂閱消息的下發接口方法和模闆消息稍有不同,
模闆消息的json格式如下
"data": {
"keyword1": {
"value": "内容1",
"color": "#000"
},
"keyword2": {
"value": "内容2",
"color": "#000"
}
}
而訂閱消息的json格式如下:
"data": {
"thing1": {
"value": "内容"
},
"number2": {
"value": 20
}
訂閱消息的字段key是和資料類型有關,value的參數需要嚴格按照設定的類型送出,如果不按類型送出,會導緻發送失敗。同時如果是文本型的内容,字數也有限制,超過限制也會發送失敗,但具體字數是多少,官方沒有給出,同時中英文混合計算的長度也有差異,據我目前測試25個中文字元是可以的。希望官方能給出具體的字元長度限制的明确數字。
如果調用下發的次數大于使用者的訂閱次數,調用接口下發訂閱消息會傳回失敗。報如下錯誤
二.訂閱消息使用心得
1.訂閱消息雖然把訂閱的授權的交給了使用者,但是也增加了使用者使用難度,同時,一次性訂閱隻能收到一次,操作起來比較繁瑣,如果不是剛需使用者可能會首次就拒絕了這個服務,要想重新擷取授權,需要使用者自己打開小程式設定裡去配置,頗為麻煩,小程式沒有提供更簡便的方法去喚起。
2.小程式的服務商為了獲得更多給使用者發送訂閱消息的次數,肯定會想方設法去埋點引誘使用者去點選訂閱,這種誘導估計也是違規。
3.使用者使用門檻和學習比較高,比如某個預約的服務,原來的場景是使用者隻要有送出表單,小程式就可以推送消息給使用者,但是現在需要使用者主動去訂閱,無形中多了一步,如果使用者不熟悉訂閱消息或者直接點了“取消”,小程式就沒法通知到使用者了,使用者可能是以錯失服務,對商家和使用者都是損失。
4.微信小程式将采用訂閱消息,并逐漸取消模闆消息,雖然微信官方試圖在友善使用者和不打擾使用者這兩種選擇裡去尋求平衡,但訂閱消息目前的模式恐怕無法達到這個期望,至少在我看來,無論對小程式的服務商,還是小程式的使用者,都感到不友善。
延伸閱讀:
- 微慕小程式專業版v2.0
- 微慕WordPress小程式增強版