.NET Core 小程序开发零基础系列(2)——小程序服务通知(模板消息)
基于上一篇文件“.NET Core 小程序開發(fā)零基礎(chǔ)系列(1)——開發(fā)者啟用并校驗牽手成功”的反映,個人覺得效果很不錯,大家對公眾號開發(fā)還是有很大需求的,同時也收到了很多同學的問題,后面我也會通過實戰(zhàn)性文章慢慢的表現(xiàn)出來 ,讓大家更容易吃得透一些。在這里特別感謝盛派Senparc作者的支持,也感謝各社區(qū)大佬的支持,同時也要感謝我的6位小伙伴大力支持,我們將有問必答,資源共享。
為什么說盛派Senparc開源框架開發(fā)賊快呢,因為他們經(jīng)過多年的打磨,反反復復的修改升級,基本上所有公眾號的功能都支持,但發(fā)現(xiàn)還是有很多的同學不明白原理與底層框架的設(shè)計,在這里我們將通過真實的實戰(zhàn)項目來一點點吃掉。
廢話不多說了,開始我們的實戰(zhàn)第二篇,玩得好 模板消息可突破限制哦,袖子擼起來,干 ^_^
1
了解一下模板消息
基于微信的通知渠道,我們?yōu)殚_發(fā)者提供了可以高效觸達用戶的模板消息能力,以便實現(xiàn)服務(wù)的閉環(huán)并提供更佳的體驗。
模板推送位置:服務(wù)通知
模板下發(fā)條件:用戶本人在微信體系內(nèi)與頁面有交互行為后觸發(fā),詳見?下發(fā)條件說明?
模板跳轉(zhuǎn)能力:點擊查看詳情僅能跳轉(zhuǎn)下發(fā)模板的該帳號的各個頁面
效果如圖:
更多的規(guī)則請查看官方文檔
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/template-message.html
附加經(jīng)驗說明:
如果你公司有運營人員,一定會非常的喜歡服務(wù)通知,它能很快的引流到服務(wù)號,小程序中來,激活當前的用戶。借助微信的服務(wù)通知,必能觸達到關(guān)注過,授權(quán)過服務(wù)號,小程序的人,是不是很棒。
場景:比如說用戶使用某個小程序發(fā)布了一個百人報名活動。如果能實現(xiàn)有一個人報名,就向活動發(fā)起者發(fā)送一條報名通知,那就大大提高了工具的使用效率,不用發(fā)起人每次都打開小程序去看有多少人參與了報名。顯然,當前的消息發(fā)送機制無法滿足這個需求。
模板有很多種咯,每個行業(yè)的模板也不一樣,比如我們電商系統(tǒng)需要的模板“訂單支付成功通知”、“訂單支付失敗通知”、“預(yù)約成功通知”、“訂單發(fā)貨通知”、“用戶認證通知”等等模板。
2
創(chuàng)建你想要的模板/設(shè)置模板
登錄小程序后臺,點擊左側(cè)“模板消息”,如圖:
默認“我的模板庫”是沒有模板的,需要進入到“模板庫”中進行創(chuàng)建, 模板庫中的模板非常多,建議搜索你想要的模板,如圖:
選擇對應(yīng)的模板,點擊選用,如圖:
注意:這里添加的“關(guān)鍵詞”順序要嚴格按照我們后臺列出來的順序去選擇排列,否則會出現(xiàn)數(shù)據(jù)錯亂的問題。
以上基本是了解模板,配置模板,下面我們真正來發(fā)送模板啦!
3
收集formId(突破模板消息的推送限制?)
這里為什么要收集formId呢,因為小程序發(fā)送模板必須要對應(yīng)人的formId來發(fā)送,不然你是發(fā)送不成功的。
formId收集方法,我們直接講復雜的收集,突破模板消息的推送限制。
流程
結(jié)合小程序前端界面實現(xiàn)批量收集formId==》上報后臺==》存儲formId==》發(fā)送模板,最終做到7日內(nèi)推送模板消息、觸及用戶激活用戶。
實現(xiàn)步驟
1、小程序構(gòu)建formId 池,每次將用戶提交的表單都搜集起來存入formId池,當用戶操作前端某個位置或者離開掛起小程序時,發(fā)送formIds到后端存儲起來。
2、將小程序用戶有可能點擊的區(qū)域覆蓋一層不可見的button,并將整個頁面用于傳輸formId的button包裹在一form標簽內(nèi),一旦用戶有點擊按鈕的操作,就將獲取到的formId存入formId 池。
上小程序部分代碼
1、先定義一個formId數(shù)組
2、小程序頁面定義事件
3、提交事件
4、提交到后臺,批量收集formId
以上基本是收集formId的流程,有不懂原理與實現(xiàn)步驟的可以聯(lián)系我。
4
發(fā)送模板消息(服務(wù)通知)
還是上一篇那個項目,如圖:
引用盛派Senparc組件:
Senparc.Weixin.MP.MVC
Senparc.Weixin.WxOpen
批量發(fā)送模板主要代碼:
HashEntry[] hashes = redisManager2.HashValueAll(videoKey); if (hashes.Length > 0) { Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播間{videoKey},準備推送人數(shù){hashes.Length},videoKey={videoKey},videoKeywords={videoKeywords}"); foreach (var item in hashes) { //{"WorkQueueNo":"wxccf5524125d67d16","TemplateID":"KgI11LMjGCUmvrfOPG5xHdfW2j70tJKNurfrtAFn9sk","Keywords":"2019-08-25 21:54:00|安|fffd|快來我的直播間,約起!","Url":"pages/live/liveRoom/liveRoom?id=1164536425702625280","ToOpenID":"o5D-a5QpNoC_0QYF5C-zFbmkgr4Q","ToMemberID":1053} WorkQueueParam valueItem = DMS.Common.Extensions.SerializerExtensions.DeserializeObject<WorkQueueParam>(item.Value); if (valueItem != null) { //查找小程序的fromid string key = $"{valueItem.ToMemberID}_{valueItem.WorkQueueNo}"; string fromid = redisManager3.ListLeftPop<string>(key); if (!string.IsNullOrEmpty(fromid)) { string[] keywords = videoKeywords.Split("|"); var data = new { keyword1 = new TemplateDataItem(keywords[0]), keyword2 = new TemplateDataItem(keywords[1]), keyword3 = keywords.Length > 2 ? new TemplateDataItem(keywords[2]) : null, keyword4 = keywords.Length > 3 ? new TemplateDataItem(keywords[3]) : null, }; var tempResult = Senparc.Weixin.WxOpen.AdvancedAPIs.Template.TemplateApi.SendTemplateMessage(valueItem.WorkQueueNo, valueItem.ToOpenID, valueItem.TemplateID, data, fromid, videoUrl); if (tempResult.errcode == ReturnCode.請求成功) { Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播間{videoKey},發(fā)送成功,{valueItem.ToMemberID}"); } else { Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播間{videoKey},發(fā)送失敗,{tempResult.errmsg}"); } } else { Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播間{videoKey},獲取FromID為空,{valueItem.ToMemberID}"); } } else { Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播間{videoKey},模板內(nèi)容序列哈異常"); } } } else { Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播間{videoKey},未找到直播間數(shù)據(jù)"); }這里的場景是這樣的:比如一個主播她創(chuàng)建了一個房間,設(shè)定開播的時間為某一天,為了給自己引流,他在微信群分享了小程序,這時只要有人點擊了小程序鏈接點擊預(yù)約就會記錄與主播的關(guān)聯(lián),等到主播開播時,會群發(fā)下面預(yù)約的用戶。是不是有點像群發(fā)功能,哈哈,大家有空可能嘗試一下。
注:這里利用了redis來存儲fromid,你們也可以用其它的方式來存儲,隨便你來玩。
5
總結(jié)
人個覺得代碼實現(xiàn)需求的過程并不復雜,主要是理解了原理與實現(xiàn)的過程后,就事半功倍。整個方案流程涉及到的關(guān)鍵詞有表單、按鈕、formId、模板消息、Redis等,主要需要前后端相關(guān)技術(shù)組合來實現(xiàn)整個方案。
相關(guān)推薦
推薦文章
.NET Core 小程序開發(fā)零基礎(chǔ)系列(1)——開發(fā)者啟用并牽手成功
.net core redis的全套操作
.NETCore 實現(xiàn)容器化Docker與私有鏡像倉庫管理
.netcore consul實現(xiàn)服務(wù)注冊與發(fā)現(xiàn)(一)單機部署
.netcore consul實現(xiàn)服務(wù)注冊與發(fā)現(xiàn)(二)集群完整版
dotNET名人堂,主要分享.NET core各種技術(shù)文章,以及架構(gòu)設(shè)計,管理技巧等干貨,希望在這里通過實戰(zhàn)能讓你全新認識.NET core相關(guān)技術(shù),項目架構(gòu),大數(shù)據(jù)處理,高并發(fā),高耦合相關(guān)問題歡迎留言與我探討。
作者微信ID:tangguo_9669
你點的每個贊,我都認真當成了喜歡
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的.NET Core 小程序开发零基础系列(2)——小程序服务通知(模板消息)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【活动】侬好上海,Microsoft R
- 下一篇: [PowerShell]人人都值得学一点