前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >.NET Core 小程序开发零基础系列(2)——小程序服务通知(模板消息)

.NET Core 小程序开发零基础系列(2)——小程序服务通知(模板消息)

作者头像
hailang2zh
发布于 2019-08-29 09:41:46
发布于 2019-08-29 09:41:46
97900
代码可运行
举报
文章被收录于专栏:dotNET名人堂dotNET名人堂
运行总次数:0
代码可运行

基于上一篇文件“.NET Core 小程序开发零基础系列(1)——开发者启用并校验牵手成功”的反映,个人觉得效果很不错,大家对公众号开发还是有很大需求的,同时也收到了很多同学的问题,后面我也会通过实战性文章慢慢的表现出来 ,让大家更容易吃得透一些。在这里特别感谢盛派Senparc作者的支持,也感谢各社区大佬的支持,同时也要感谢我的6位小伙伴大力支持,我们将有问必答,资源共享。

为什么说盛派Senparc开源框架开发贼快呢,因为他们经过多年的打磨,反反复复的修改升级,基本上所有公众号的功能都支持,但发现还是有很多的同学不明白原理与底层框架的设计,在这里我们将通过真实的实战项目来一点点吃掉。

废话不多说了,开始我们的实战第二篇,玩得好 模板消息可突破限制哦,袖子撸起来,干 ^_^

了解一下模板消息


 基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验。

模板推送位置:服务通知

模板下发条件:用户本人在微信体系内与页面有交互行为后触发,详见 下发条件说明 

模板跳转能力:点击查看详情仅能跳转下发模板的该帐号的各个页面

效果如图:

更多的规则请查看官方文档

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/template-message.html

附加经验说明:

如果你公司有运营人员,一定会非常的喜欢服务通知,它能很快的引流到服务号,小程序中来,激活当前的用户。借助微信的服务通知,必能触达到关注过,授权过服务号,小程序的人,是不是很棒。

场景:比如说用户使用某个小程序发布了一个百人报名活动。如果能实现有一个人报名,就向活动发起者发送一条报名通知,那就大大提高了工具的使用效率,不用发起人每次都打开小程序去看有多少人参与了报名。显然,当前的消息发送机制无法满足这个需求。

模板有很多种咯,每个行业的模板也不一样,比如我们电商系统需要的模板“订单支付成功通知”、“订单支付失败通知”、“预约成功通知”、“订单发货通知”、“用户认证通知”等等模板。

创建你想要的模板/设置模板


 登录小程序后台,点击左侧“模板消息”,如图:

默认“我的模板库”是没有模板的,需要进入到“模板库”中进行创建, 模板库中的模板非常多,建议搜索你想要的模板,如图:

选择对应的模板,点击选用,如图:

注意:这里添加的“关键词”顺序要严格按照我们后台列出来的顺序去选择排列,否则会出现数据错乱的问题。

以上基本是了解模板,配置模板,下面我们真正来发送模板啦!

收集formId(突破模板消息的推送限制?)


这里为什么要收集formId呢,因为小程序发送模板必须要对应人的formId来发送,不然你是发送不成功的。

formId收集方法,我们直接讲复杂的收集,突破模板消息的推送限制。

流程

结合小程序前端界面实现批量收集formId==》上报后台==》存储formId==》发送模板,最终做到7日内推送模板消息、触及用户激活用户。

实现步骤

1、小程序构建formId 池,每次将用户提交的表单都搜集起来存入formId池,当用户操作前端某个位置或者离开挂起小程序时,发送formIds到后端存储起来。

2、将小程序用户有可能点击的区域覆盖一层不可见的button,并将整个页面用于传输formId的button包裹在一form标签内,一旦用户有点击按钮的操作,就将获取到的formId存入formId 池。

上小程序部分代码

1、先定义一个formId数组

2、小程序页面定义事件

3、提交事件

4、提交到后台,批量收集formId

以上基本是收集formId的流程,有不懂原理与实现步骤的可以联系我。

发送模板消息(服务通知)


 还是上一篇那个项目,如图:

引用盛派Senparc组件:

Senparc.Weixin.MP.MVC

Senparc.Weixin.WxOpen

批量发送模板主要代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HashEntry[] hashes = redisManager2.HashValueAll(videoKey);
                if (hashes.Length > 0)
                {
                    Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},准备推送人数{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},发送成功,{valueItem.ToMemberID}");
                                }
                                else
                                {
                                    Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},发送失败,{tempResult.errmsg}");
                                }
                            }
                            else
                            {
                                Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},获取FromID为空,{valueItem.ToMemberID}");
                            }
                        }
                        else
                        {
                            Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},模板内容序列哈异常");
                        }
                    }
                }
                else
                {
                    Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},未找到直播间数据");
                }

这里的场景是这样的:比如一个主播她创建了一个房间,设定开播的时间为某一天,为了给自己引流,他在微信群分享了小程序,这时只要有人点击了小程序链接点击预约就会记录与主播的关联,等到主播开播时,会群发下面预约的用户。是不是有点像群发功能,哈哈,大家有空可能尝试一下。

注:这里利用了redis来存储fromid,你们也可以用其它的方式来存储,随便你来玩。

总结


 人个觉得代码实现需求的过程并不复杂,主要是理解了原理与实现的过程后,就事半功倍。整个方案流程涉及到的关键词有表单、按钮、formId、模板消息、Redis等,主要需要前后端相关技术组合来实现整个方案。

作者:Dylan

公众号:dotNET名人堂(sharecore)

微信:tangguo_9669

QQ:.NET Core 技术交流(18362376)

出处:https://www.cnblogs.com/hailang8/

本文文章版权归作者和博客园共有,未经作者同意不得随意转载,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请与我联系。

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3jpr0nagboo48

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 Spring Boot 和 UniApp 实现微信小程序消息通知
在现代移动应用开发中,消息通知功能是提升用户体验和应用交互性的重要手段。微信小程序提供了丰富的消息推送能力,而 UniApp 作为一款跨平台的前端开发框架,能够方便地与微信小程序集成。本文将详细介绍如何基于 Spring Boot 实现 UniApp 微信小程序的消息通知功能,包括后端服务的搭建、微信小程序的配置以及前端页面的实现。我们将通过一个实际案例,展示如何推送订单状态变更通知。
全干程序员demo
2025/04/18
2240
微信小程序的模板消息与小程序订阅消息
小程序订阅消息 功能介绍 消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。
达达前端
2019/12/16
4.4K0
微信小程序的模板消息与小程序订阅消息
微信小程序开发心得第二章:千里传音(模板消息)
今天分享一篇关于消息模板的简易教程。 老规矩先把官方的定义再讲一下,消息模板是基于微信的通知渠道,为我们开发者提供了触发模板消息的能力,以便实现服务的闭环和更好的用户体验。 发起消息模板是有限制条件的,必须用户本人在微信体系与小程序页面有交互行为后才能触发,只有两种情况允许。 第一种是用户在小程序完成支付的行为,可允许开发者向用户在7天内推送有限的模板消息,一次支付可发一条。 第二种是通过提交表单行为且表单需要声明为要发模板消息的,可以允许开发者向用户在7天内推送有限条数的模板消息,一次提交表单可发一条。
极乐君
2018/02/05
9101
微信小程序开发心得第二章:千里传音(模板消息)
微信小程序开发学习——小程序发送模板消息
微信小程序的消息推送简单的说就是发送一条微信通知给用户,用户点开消息可以查看消息内容,可以链接进入到小程序的指定页面。     微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单、支付成功。一次只能发一条,当然可以通过某种方法发送多条,小的就不在这里赘述了。下面就介绍一下如何推送消息。 一、准备工作     首先,在微信公众平台开通消息推送功能,并添加消息模板。可以从模板库选择模板也可以创建一个模板,模板添加之后,模板ID我们接下来要用的。     发送模板消息需要用到accesstoken、formId和openID。accesstoken获取及更新可以看我的上一篇文章;formID就是消息模板ID,openID我们最好在获取用户信息或用户登录时储存到全局变量里。
KEVINGUO_CN
2020/03/17
2.1K0
晓实战 | 第一手小程序模板消息推送开发心得分享
我们会定期邀请优秀的开发者,从实践的角度,亲自分享他们使用知晓云(cloud.minaapp.com)开发的实战经验。
知晓君
2018/07/30
9700
.NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功
最近几个月本人与团队一直与小程序打交道,对小程序的实战开发算比较熟悉,也因一些朋友经常问我各种小程序问题,无不能一一回答,想了很久,决定还是空余时间来写写文章吧,偶尔发现一个人安静的时候写文章特爽,不信大伙可以试试哦^_^
hailang2zh
2019/08/29
1.6K0
.NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功
知晓云 | 5 分钟实现小程序模板消息推送,你可以这样做
但是,有了知晓云,你不用再头疼如何开发模板消息模块。只需要几步简单的操作,就可以轻松实现模板消息推送。
知晓君
2018/07/30
1.6K0
你知道如何在小程序中推送模板消息?
前段时间剁手了 PS4,在浏览商店时,发现官方商店真的不好用,主要是网络原因,次要是页面设计。所以就想自己做一个游戏查询的小程序,可以关注某个游戏,然后在这个游戏打折的时候发送通知给用户。最后发现有个很大的问题是:小程序没法直接给用户推送消息(当时还不知道模板消息),服务号才能。然后就用邮箱实现了通知功能,但是邮箱的局限实在是太大了(各大免费邮箱每天的发件数都很小,自己搭建的邮件服务器虽然没有发件限制,但是大概率会被放到垃圾箱)。
用户2038589
2019/07/17
1.7K0
『教程』如何突破微信小程序模板消息限制实现无限制主动推送
基于微信的通知渠道,微信小程序为开发者提供了可以高效触达用户的模板消息能力,在用户本人与小程序页面有交互行为后触发,通过微信聊天列表中的服务通知可快捷进入查看消息,点击查看详情还能跳转到下发消息的小程序的指定页面。
极乐君
2018/07/31
2.3K1
微信小程序模板消息详解
先放代码 wxml: <form name='pushMsgFm' report-submit bindsubmit='orderSign'> <view> 单号: 0</view> <view> 商家名称: 腾讯早餐店</view> <view>实付金额:66元</view> <view>物品名称:包子</view> <view>付款金额:68元</view> <view>付款时间: 2018年1月1日 </view> <button form-ty
李文杨
2018/03/14
2.5K0
微信小程序模板消息详解
微信小程序模板消息实现(PHP+ 小程序)
参考官方文档和部分资料,总结小程序模板消息推送以及相关注意事项,楼主踩过的坑,特来与大家分享。
ITer.996
2019/08/28
5.8K0
微信小程序模板消息实现(PHP+ 小程序)
微信小程序发送模板消息
登录 https://mp.weixin.qq.com/ “功能”-“模板消息”-“模板库” 这里我们选择合适的模板,点"选用”。 回到"我的模板",这里会看到选用的模板,有相应的模板id。
孤烟
2020/09/27
3.1K0
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
在微信小程序中,小程序提供了一种能力-模板消息,官方文档是这样描述的:“基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验。”
胡哥有话说
2019/07/25
2K0
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
小程序模板消息是什么,它有哪些限制? | 小程序问答 #26
它是微信为小程序提供的消息推送能力。有了它,小程序就可以向用户发送重要的消息通知。
知晓君
2018/08/01
9240
小程序模板消息是什么,它有哪些限制? | 小程序问答 #26
电商/票务类小程序必读,如何用小程序推送消息?
通常,服务方向用户推送的消息都带有通知性质,文案也相对固定。服务方将这类固定的文案制作成模板,这些文案就可以快速重复使用。
知晓君
2018/08/01
9110
电商/票务类小程序必读,如何用小程序推送消息?
[博客小程序]评论通知功能实现(二)——实战过程中的坑
当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)
Bug生活2048
2019/04/25
7620
[博客小程序]评论通知功能实现(二)——实战过程中的坑
无缘小程序模板消息推送功能,只能为后台管理功能做准备
这两天打算把模板消息的功能开发完成,主要思路还是根据原博客小程序,有兴趣的可以参考[博客小程序]评论通知功能实现(一)——小程序发送模板消息的几种实现和[博客小程序]评论通知功能实现(二)——实战过程中的坑这两篇文章,已经写的比较详细了。
Bug生活2048
2019/05/23
8080
[博客小程序]评论通知功能实现(一)——小程序发送模板消息的几种实现
准备的话就是先读下文档,了解下模板消息怎么发送和怎么接入的,然后到你的后台去选择你想要的消息模板,记录好对应的模板ID即可。
Bug生活2048
2019/04/25
1.1K0
[博客小程序]评论通知功能实现(一)——小程序发送模板消息的几种实现
微信小程序模板消息接口下线了,不用慌,调用统一服务消息接口来实现相同功能
做过微信开发的应该都有一点感触,就是他的开发文档不是一成不变的,接口有时候会被下线,但也不是一下子就不能用了,一般会兼容旧接口,然后提醒你使用新接口有更多好处。
悟空码字
2023/01/18
1.7K0
小程序 发送模板消息的功能实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/82379590
泥豆芽儿 MT
2018/09/11
5.7K0
小程序 发送模板消息的功能实现
推荐阅读
相关推荐
基于 Spring Boot 和 UniApp 实现微信小程序消息通知
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验