1. 程式人生 > 實用技巧 >16:DFS和BFS

16:DFS和BFS

2019年10月12日微信開放了小程式訂閱訊息的功能。按官方的說法,目前的模板訊息在實現小程式服務閉環上存在缺陷:

1. 部分開發者在使用者無預期或未進行服務的情況下發送與使用者無關的訊息,對使用者產生了騷擾;
2. 模板訊息需在使用者訪問小程式後的 7 天內下發,不能滿足部分業務的時間要求

模板訊息確實存在上述的硬傷,不利於小程式的使用者留存和使用者體驗。為了解決這些問題,微信官方推出了使用者訂閱訊息功能。我在微慕專業版上加了訂閱訊息的功能,並驗證了這個功能。這個功能是否能都達到官方的預期,這個我感覺不那麼樂觀。這裡我先說我的感受:目前的訂閱訊息還很不完善,基本是“半成品”,後續還有很大的優化空間。

目前,官方只開放了“一次性訂閱訊息”,尚未開放“長期性訂閱訊息”,因此我只嘗試了“一次性訂閱訊息”。

一次性訂閱訊息:用於解決使用者使用小程式後,後續服務環節的通知問題。使用者自主訂閱後,開發者可不限時間地下發一條對應的服務訊息;每條訊息可單獨訂閱或退訂。

訂閱訊息推送位置:服務通知
訂閱訊息下發條件:使用者自主訂閱
訂閱訊息卡片跳轉能力:點選檢視詳情可跳轉至該小程式的頁面

以下我簡單說明訂閱訊息的開發過程和使用體驗。

一.訂閱訊息的開發

1.獲取訂閱訊息的模板ID

在微信小程式的管理後臺,在左側“功能”選單,選擇“訂閱訊息”,然後點選“新增”

然後選擇你需要的訊息模板,並配置關鍵詞。

配置完成後,如下圖所示。

值得關注的是,在配置好的模板詳情頁面裡的“詳細內容”很重要,這個就是開發訂閱訊息時需要遵循的訊息格式,這個格式和模板訊息有細微的差別

根據微慕小程式的需要,我選用了“新的評論提醒”和“內容更新提醒”這兩個訊息模版。前者用於提醒發表話題或文章的作者,有新的話題或文章評論,增強作者與讀者之間的交流互動;後者是提醒訂閱使用者,小程式有新的文章釋出,引導使用者迴歸小程式

訂閱訊息申請模板的時候,需要選擇所屬類目,只能選擇當前小程式相關的類目模板,對於模板訊息不需要選擇對應類目。如果刪除小程式類目,就會把訂閱訊息模板一起刪除。因此刪除類目要小心謹慎。


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