基于上一篇文件“.NET Core 小程序開發(fā)零基礎(chǔ)系列(1)——開發(fā)者啟用并校驗牽手成功
<https://www.cnblogs.com/hailang8/p/11409547.html>
”的反映,個人覺得效果很不錯,大家對公眾號開發(fā)還是有很大需求的,同時也收到了很多同學(xué)的問題,后面我也會通過實戰(zhàn)性文章慢慢的表現(xiàn)出來
,讓大家更容易吃得透一些。在這里特別感謝盛派Senparc作者的支持,也感謝各社區(qū)大佬的支持,同時也要感謝我的6位小伙伴大力支持,我們將有問必答,資源共享。
?
為什么說盛派Senparc開源框架開發(fā)賊快呢,因為他們經(jīng)過多年的打磨,反反復(fù)復(fù)的修改升級,基本上所有公眾號的功能都支持,但發(fā)現(xiàn)還是有很多的同學(xué)不明白原理與底層框架的設(shè)計,在這里我們將通過真實的實戰(zhàn)項目來一點點吃掉。
?
廢話不多說了,開始我們的實戰(zhàn)第二篇,玩得好 模板消息可突破限制哦,袖子擼起來,干 ^_^
?
了解一下模板消息
?基于微信的通知渠道,我們?yōu)殚_發(fā)者提供了可以高效觸達(dá)用戶的模板消息能力,以便實現(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)驗說明:
如果你公司有運(yùn)營人員,一定會非常的喜歡服務(wù)通知,它能很快的引流到服務(wù)號,小程序中來,激活當(dāng)前的用戶。借助微信的服務(wù)通知,必能觸達(dá)到關(guān)注過,授權(quán)過服務(wù)號,小程序的人,是不是很棒。
?
場景:比如說用戶使用某個小程序發(fā)布了一個百人報名活動。如果能實現(xiàn)有一個人報名,就向活動發(fā)起者發(fā)送一條報名通知,那就大大提高了工具的使用效率,不用發(fā)起人每次都打開小程序去看有多少人參與了報名。顯然,當(dāng)前的消息發(fā)送機(jī)制無法滿足這個需求。
?
模板有很多種咯,每個行業(yè)的模板也不一樣,比如我們電商系統(tǒng)需要的模板“訂單支付成功通知”、“訂單支付失敗通知”、“預(yù)約成功通知”、“訂單發(fā)貨通知”、“用戶認(rèn)證通知”等等模板。
?
創(chuàng)建你想要的模板/設(shè)置模板
?登錄小程序后臺,點擊左側(cè)“模板消息”,如圖:
?
默認(rèn)“我的模板庫”是沒有模板的,需要進(jìn)入到“模板庫”中進(jìn)行創(chuàng)建, 模板庫中的模板非常多,建議搜索你想要的模板,如圖:
?
選擇對應(yīng)的模板,點擊選用,如圖:
注意:這里添加的“關(guān)鍵詞”順序要嚴(yán)格按照我們后臺列出來的順序去選擇排列,否則會出現(xiàn)數(shù)據(jù)錯亂的問題。
以上基本是了解模板,配置模板,下面我們真正來發(fā)送模板啦!
?
收集formId(突破模板消息的推送限制?)
?
這里為什么要收集formId呢,因為小程序發(fā)送模板必須要對應(yīng)人的formId來發(fā)送,不然你是發(fā)送不成功的。
?
formId收集方法,我們直接講復(fù)雜的收集,突破模板消息的推送限制。
?
流程
結(jié)合小程序前端界面實現(xiàn)批量收集formId==》上報后臺==》存儲formId==》發(fā)送模板,最終做到7日內(nèi)推送模板消息、觸及用戶激活用戶。
?
實現(xiàn)步驟
1、小程序構(gòu)建formId
池,每次將用戶提交的表單都搜集起來存入formId池,當(dāng)用戶操作前端某個位置或者離開掛起小程序時,發(fā)送formIds到后端存儲起來。
?
2、將小程序用戶有可能點擊的區(qū)域覆蓋一層不可見的button,并將整個頁面用于傳輸formId的button包裹在一form標(biāo)簽內(nèi),一旦用戶有點擊按鈕的操作,就將獲取到的formId存入formId
池。
?
上小程序部分代碼
1、先定義一個formId數(shù)組
?
2、小程序頁面定義事件
?
3、提交事件
?
4、提交到后臺,批量收集formId
?
以上基本是收集formId的流程,有不懂原理與實現(xiàn)步驟的可以聯(lián)系我。
?
發(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},準(zhǔn)備推送人數(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,你們也可以用其它的方式來存儲,隨便你來玩。
?
總結(jié)
?人個覺得代碼實現(xiàn)需求的過程并不復(fù)雜,主要是理解了原理與實現(xiàn)的過程后,就事半功倍。整個方案流程涉及到的關(guān)鍵詞有表單、按鈕、formId、模板消息、Redis等,主要需要前后端相關(guān)技術(shù)組合來實現(xiàn)整個方案。
?
?
作者:Dylan
公眾號:dotNET名人堂(sharecore)
微信:tangguo_9669
QQ:.NET Core 技術(shù)交流(18362376)
出處:https://www.cnblogs.com/hailang8/ <https://www.cnblogs.com/hailang8/>
本文文章版權(quán)歸作者和博客園共有,未經(jīng)作者同意不得隨意轉(zhuǎn)載,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。如有問題或建議,請與我聯(lián)系。 ? ?
我的博客即將同步至騰訊云+社區(qū),邀請大家一同入駐:
https://cloud.tencent.com/developer/support-plan?invite_code=3jpr0nagboo48
<https://cloud.tencent.com/developer/support-plan?invite_code=3jpr0nagboo48> ?
熱門工具 換一換