2019年10月12日微信開放了小程序訂閱消息的功能。按官方的說法,目前的模板消息在實現小程序服務閉環上存在缺陷:html
1. 部分開發者在用戶無預期或未進行服務的狀況下發送與用戶無關的消息,對用戶產生了騷擾;
2. 模板消息需在用戶訪問小程序後的 7 天內下發,不能知足部分業務的時間要求
模板消息確實存在上述的硬傷,不利於小程序的用戶留存和用戶體驗。爲了解決這些問題,微信官方推出了用戶訂閱消息功能。我在微慕專業版上加了訂閱消息的功能,並驗證了這個功能。這個功能是否能都達到官方的預期,這個我感受不那麼樂觀。這裏我先說個人感覺:目前的訂閱消息還很不完善,基本是「半成品」,後續還有很大的優化空間。json
目前,官方只開放了「一次性訂閱消息」,還沒有開放「長期性訂閱消息」,所以我只嘗試了「一次性訂閱消息」。小程序
一次性訂閱消息:用於解決用戶使用小程序後,後續服務環節的通知問題。用戶自主訂閱後,開發者可不限時間地下發一條對應的服務消息;每條消息可單獨訂閱或退訂。後端
訂閱消息推送位置:服務通知
訂閱消息下發條件:用戶自主訂閱
訂閱消息卡片跳轉能力:點擊查看詳情可跳轉至該小程序的頁面微信小程序
如下我簡單說明訂閱消息的開發過程和使用體驗。api
1.獲取訂閱消息的模板ID微信
在微信小程序的管理後臺,在左側「功能」菜單,選擇「訂閱消息」,而後點擊「添加」
app
而後選擇你須要的消息模板,並配置關鍵詞。
wordpress
配置完成後,以下圖所示。
函數
值得關注的是,在配置好的模板詳情頁面裏的「詳細內容」很重要,這個就是開發訂閱消息時須要遵循的消息格式,這個格式和模板消息有細微的差異
根據微慕小程序的須要,我選用了「新的評論提醒」和「內容更新提醒」這兩個消息模版。前者用於提醒發表話題或文章的做者,有新的話題或文章評論,加強做者與讀者之間的交流互動;後者是提醒訂閱用戶,小程序有新的文章發佈,引導用戶迴歸小程序。
訂閱消息申請模板的時候,須要選擇所屬類目,只能選擇當前小程序相關的類目模板,對於模板消息不須要選擇對應類目。若是刪除小程序類目,就會把訂閱消息模板一塊兒刪除。所以刪除類目要當心謹慎。
2.觸發用戶訂閱,獲取下發的權限
觸發用戶訂閱,微信小程序提供的api是: wx.requestSubscribeMessage
,用戶發生點擊行爲或者發起支付回調後,才能夠調起訂閱消息界面。
注意:微信小程序開發工具尚不支持此功能,在開發工具觸發訂閱的api,會提示:
requestSubscribeMessage:fail 開發者工具暫時不支持此 API 調試,請使用真機進行開發
update:2020年5月18日,日前訂閱消息已經支持微信小程序開發工具。
調用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箇中文字符是能夠的。但願官方能給出具體的字符長度限制的明確數字。
若是調用下發的次數大於用戶的訂閱次數,調用接口下發訂閱消息會返回失敗。報以下錯誤
3.訂閱消息參數值內容限制說明
符號表示除中文、英文、數字外的常見符號,不能帶有換行等控制字符。 時間格式支持HH:MM:SS或者HH:MM。 日期包含年月日,爲y年m月d日,y年m月、m月d日格式,或者用‘-’、‘/’、‘.’符號鏈接,如2018-01-01,2018/01/01,2018.01.01,2018-01,01-01。 每一個模板參數都會以類型爲前綴,例如第一個數字模板參數爲number01.DATA,第二個爲number02.DATA
例如,模板的內容爲:
`姓名: {{name01.DATA}}
金額: {{amount01.DATA}}
行程: {{thing01.DATA}}
日期: {{date01.DATA}}`
則對應的json爲
`{
"touser": "OPENID",
"template_id": "TEMPLATE_ID",
"page": "index",
"data": {
"name01": {
"value": "某某"
},
"amount01": {
"value": "¥100"
},
"thing01": {
"value": "廣州至北京"
} ,
"date01": {
"value": "2018-01-01"
}
}
}`
1.訂閱消息雖然把訂閱的受權的交給了用戶,可是也增長了用戶使用難度,同時,一次性訂閱只能收到一次,操做起來比較繁瑣,若是不是剛需用戶可能會首次就拒絕了這個服務,要想從新獲取受權,須要用戶本身打開小程序設置裏去配置,頗爲麻煩,小程序沒有提供更簡便的方法去喚起。
2.小程序的服務商爲了得到更多給用戶發送訂閱消息的次數,確定會千方百計去埋點引誘用戶去點擊訂閱,這種誘導估計也是違規。
3.用戶使用門檻和學習比較高,好比某個預定的服務,原來的場景是用戶只要有提交表單,小程序就能夠推送消息給用戶,可是如今須要用戶主動去訂閱,無形中多了一步,若是用戶不熟悉訂閱消息或者直接點了「取消」,小程序就無法通知到用戶了,用戶可能所以錯失服務,對商家和用戶都是損失。
4.微信小程序將採用訂閱消息,並逐步取消模板消息,雖然微信官方試圖在方便用戶和不打擾用戶這兩種選擇裏去尋求平衡,但訂閱消息目前的模式恐怕沒法達到這個指望,至少在我看來,不管對小程序的服務商,仍是小程序的用戶,都感到不方便。
原文連接:https://www.watch-life.net/wechat/subscribe-message.html