您当前的位置:首页 > 电脑百科 > 站长技术 > 微信营销

微信公共号回复关键词的无限扩展机制

时间:2019-08-07 17:50:20  来源:  作者:



引言

微信公众号的开发中,自动回复关键词主要可回复的内容为文本消息、图文消息(目前仅支持一个链接)。为了让关键词支持“带参数” 和 无限扩展,本文引入一个对接关键词的接口规范,使得关键词可以携参数一起交由第三方处理,并返回用户文本消息或图文消息。

基本原理:为关键词配置回调地址,关键词与参数使用空格分隔,第一个空格后边的均为参数,公众号在接收到用户文本消息后,解析关键词与参数,并根据配置将其发送请求给回调地址,获取返回的处理结果。

本文主要介绍接口的定义,并提供一个具体的接口实现。

1 接口约定

1.1 传入参数

作为 Request.Body 请求体 POST 给回调地址。

{
 "keyword" : "Keyword",
 "parameter" : "Parameters string",
 "user" : "useropenid"
}

1.2 返回格式

返回结果为 JSON 形式,要求必须有 err_code 与 err_msg 属性,其中 err_code 为状态码,状态码为 200 时,表示成功,其它表示失败。err_msg 表示消息描述。如:

{
 "err_code" : 101,
 "err_msg" : "操作失败!"
}

当成功时,支持返回“文字”与“链接”两种类型的消息。

使用 key_type 属性表示,可取值“文字”或"链接"。

当 key_type 为“文字”的时候,data 为相应的文本内容。

当 key_type 为“链接”的时候,data 为链接信息的数组,只是目前只支持一个链接。

链接的属性包括:

title : 标题

icon : 图标

note_desc : 描述

url : 链接地址

1.3 文字类型示例

{
 "err_code" : 101,
 "err_msg" : "操作失败!",
 "key_type" : "文字",
 "data" : "回复的内容"
}

1.4 链接类型示例

{
 "err_code" : 101,
 "err_msg" : "操作失败!",
 "key_type" : "链接",
 "data" : [
 {
 "title" : "一个数学公式",
 "icon" : "http://****/formula.png",
 "note_desc" : "一个神寄的数学公式",
 "url" : "http://****"
 }
 ]
}

2 关键词接口示例

以下为一个完整的接口实现示例。

2.1 功能需求描述

关键词:提取

参数:一段文本或仅是一个 url

功能描述:从文本中提取出邮箱、手机号、身份证号、IPv4 地址(可进一步补充与完善)。如果参数仅是一个 url,则进行提取的文本为请求该 url 所得的内容。

2.2 实现过程

流程:是否仅为url -> 是则请求url 得到内容 -> 根据正则表达式提取匹配数据 -> 根据长度返回文本消息 或是 返回一个可操作界面的链接。

 

回复关键词的无限扩展机制

 

 

2.2.1%20准备好匹配的正则表达式

private%20static%20Dictionary<string,%20string>%20_RegexDict;
public%20static%20Dictionary<string,%20string>%20RegexDict
{
%20get
%20{
%20if%20(_RegexDict%20==%20null)
%20{
%20_RegexDict%20=%20new%20Dictionary<string,%20string>();
%20//%20_RegexDict.Add("链接",%20@"((ht)tps?)://[w-]+(.[w-]+)+([w-.,@?^=%&:/~+#]*[w-@?^=%&/~+#])?");%20
%20_RegexDict.Add("邮箱",%20@"[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+");
%20_RegexDict.Add("手机号",%20@"(((13[0-9]{1})|(14[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1})|(19[0-9]{1}))+d{8})");
%20_RegexDict.Add("身份证号",%20@"[1-9]d{5}(18|19|20)d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)d{3}[0-9Xx]");
%20_RegexDict.Add("IPv4地址",%20@"(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])");
%20}
%20return%20_RegexDict;
%20}
}

2.2.2%20处理过程

一个工具方法,请求%20url%20获取内容。

public%20static%20string%20GetUrlContent(string%20url)
{
%20System.Net.WebClient%20webClientObj%20=%20new%20System.Net.WebClient();
%20webClientObj.Encoding%20=%20Encoding.UTF8;
%20string%20respInfo%20=%20webClientObj.DownloadString(url);
%20return%20respInfo;
}

处理流程实现,建立一个%20WebApi,代码如是说。

public%20JObject%20Index([FromBody]%20JObject%20body)
{
%20string%20keyword%20=%20body.Value<string>("keyword");
%20string%20parameter%20=%20body.Value<string>("parameter");
%20string%20user%20=%20body.Value<string>("user");
%20JObject%20result%20=%20new%20JObject();
%20if%20(!"提取".Equals(keyword))
%20{
%20result["err_code"]%20=%20101;
%20result["err_msg"]%20=%20"关键词未找到";
%20return%20result;
%20}
%20////%20处理过程%20
%20var%20content%20=%20parameter;
%20var%20regUrl%20=%20@"^((ht)tps?)://[w-]+(.[w-]+)+([w-.,@?^=%&:/~+#]*[w-@?^=%&/~+#])?$";
%20
%20//%20(1)%20为网址吗
%20if%20(Regex.IsMatch(content,%20regUrl))
%20{
%20try
%20{
%20content%20=%20GetUrlContent(content);
%20}
%20catch%20(Exception%20ue)
%20{
%20result["err_code"]%20=%20101;
%20result["err_msg"]%20=%20"站点无法连接!";
%20return%20result;
%20}
%20}
%20
%20//(2)根据正则表达式提取
%20Dictionary<string,%20List<string>>%20typeMatches%20=%20new%20Dictionary<string,%20List<string>>();
%20foreach%20(var%20kv%20in%20RegexDict)
%20{
%20List<string>%20list%20=%20new%20List<string>();
%20var%20mc%20=%20Regex.Matches(content,%20kv.Value,%20RegexOptions.IgnoreCase);
%20foreach%20(Match%20c%20in%20mc)
%20{
%20list.Add(c.Value);
%20}
%20if%20(list.Count%20>%200)
%20{
%20typeMatches.Add(kv.Key,%20list);
%20}
%20}
%20//(3)拼成字符串
%20StringBuilder%20sb%20=%20new%20StringBuilder(1024);
%20foreach%20(var%20kv%20in%20typeMatches)
%20{
%20sb.Append(kv.Key%20+%20"n"%20+%20String.Join("n",%20kv.Value)%20+%20"n");%20
%20}
%20//(4)长度<1020%20文本消息
%20if%20(sb.Length%20<%201020)
%20{
%20result["err_code"]%20=%20200;
%20result["err_msg"]%20=%20"success";
%20result["key_type"]%20=%20"文字";
%20result["data"]%20=%20sb.Length%20==%200%20?%20"无匹配内容!"%20:%20sb.ToString();
%20return%20result;
%20}
%20//(5)长度较大,返回工具链接
%20JObject%20link%20=%20new%20JObject();
%20link["title"]%20=%20"提取内容中的格式化数据信息";
%20link["icon"]%20=%20"http://www.timeddd.com/Content/images/logo_bar.png";
 link["note_desc"] = "指定链接地址或文本内容,从中提取一些常格式数据,如邮箱、手机号、链接、身份证号等信息!";
 link["url"] = "http://www.timeddd.com/Tool/Fetch";
 JArray links = new JArray();
 links.Add(link);
 result["err_code"] = 200;
 result["err_msg"] = "success";
 result["key_type"] = "链接";
 result["data"] = links;
 return result; 
}

3 效果

在公众号“时间维度”中,回复关键词提取,空格带上内容,如下:

提取 各种格式的邮箱入下所示:kevintian126@126.com ,1136667341@qq.com3. meiya@cn-meiya.com 4. wq901200@hotmail.com 5. meiyahr@163.com 6. meiyuan@0757info.com 7. chingpeplo@sina.com 8. tony@erene.com.com 9. melodylu@buynow.com

会得到以下结果:

邮箱

kevintian126@126.com

1136667341@qq.com

meiya@cn-meiya.com

wq901200@hotmail.com

meiyahr@163.com

meiyuan@0757info.com

chingpeplo@sina.com

tony@erene.com.com

melodylu@buynow.com

回复:

提取 https://www.nhxz.com/doc/181017fc325d4b598aaede18.html

会得到:

邮箱

kevintian126@126.com

1136667341@qq.com

meiya@cn-meiya.com

wq901200@hotmail.com

meiyahr@163.com

meiyuan@0757info.com

chingpeplo@sina.com

tony@erene.com.com

melodylu@buynow.com

xxxxxx@163.com

123321@126.com

手机号

15758523729

18101710555

18300405945

身份证号

560087183004059455

3 招募关键词

给定一个关键词,一个接收关键词及参数的 URL 地址,按约定的格式返回 JSON,就有可能成为“时间维度”公众号里的实用工具供大家使用。如有兴趣欢迎在“时间维度”留言。



Tags:微信公共号   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
引言在微信公众号的开发中,自动回复关键词主要可回复的内容为文本消息、图文消息(目前仅支持一个链接)。为了让关键词支持“带参数” 和 无限扩展,本文引入一个对接关键词的接...【详细内容】
2019-08-07  Tags: 微信公共号  点击:(246)  评论:(0)  加入收藏
▌简易百科推荐
其实现在大家做微信公众号涨粉的裂变活动还是挺多的;以海报裂变吸粉模式,比如一张海报,转发到朋友圈邀请好友助力,关注公众号,完成任务后获得奖励。第一,设定奖品诱饵的时候一定要...【详细内容】
2021-11-03  呼哈哈    Tags:微信公众号   点击:(35)  评论:(0)  加入收藏
以微信公众号为例说明,微信的用户很多,现在大家的社交,工作工具很多都是通过微信来完成的。很多公司和企业也都有自己的微信公众号,便于用户更加了解企业,也利于品牌形象的塑造。...【详细内容】
2021-10-26  互阅之家    Tags:微信公众号   点击:(45)  评论:(0)  加入收藏
继朋友圈信息流后,微信这几年以来终于推出的第二项广告服务&mdash;&mdash;附近推,虽然两者都是在朋友圈展示的ad新西兰,但区别还是很大的,今天就详细的给大家讲解一下二者之间的...【详细内容】
2021-10-22  信息流陈默先生    Tags:广告   点击:(43)  评论:(0)  加入收藏
好久没有刷朋友圈了在家无聊随意点进了几个朋友的主页一看就傻眼了现在朋友圈的画风真是越来越新奇了捏ˇ似乎秀恩爱、秀姐妹、晒娃都很可ˇ出圈修图操作并不难,很多修图app...【详细内容】
2021-10-14  九行    Tags:朋友圈   点击:(42)  评论:(0)  加入收藏
本文较长,长达10000字,可以根据目录快速查看自己想看的内容,没有耐心的同学可以先看目录。 一、事先准备1、手机号准备:(1)手机号码,不要选170、171 这些虚拟号段,选传统号段1301...【详细内容】
2021-10-13  小果果的快乐    Tags:微信养号   点击:(57)  评论:(0)  加入收藏
企业微信在4月2日发布了3.1.6版本更新,支持收发视频号内容。这个更新意味着微信视频号又有了一个新入口。算上企业微信,视频号目前拥有至少4个入口&mdash;&mdash;微信发现页、...【详细内容】
2021-09-01    36氪  Tags:企业微信   点击:(62)  评论:(0)  加入收藏
微信发展到今天,可谓是成为了大家尽情发挥的另一番天地,很多现实中见不到的人都能够在此「相遇」,说不了的话都在这侃侃而谈。微信空间是自由发挥了,但是这自由,仅仅是「绝对自由...【详细内容】
2021-08-26  手机教授    Tags:微信新规   点击:(91)  评论:(0)  加入收藏
大家好,我是锦鱼课堂,这几年,私域流量的概念可以说是炒得非常火热。而微信的生态可以说是私域流量最好的承载体,但私域流量很贵,如何在微信的生态里,获得宝贵的用户呢?那毫无疑问是...【详细内容】
2021-07-20  锦鱼课堂    Tags:微信搜一搜   点击:(101)  评论:(0)  加入收藏
大家好,我是小马丁,专注跨境掘金。 今天分享的是我们跨境掘金俱乐部里的一篇精华文章。 Facebook广告,基本是现在做独立站的小伙伴们必做的推广方式之一。 没办法,谁让独立站没...【详细内容】
2021-05-25  跨境掘金小马丁  今日头条  Tags:Facebook   点击:(229)  评论:(0)  加入收藏
小红蚁编辑:(题外话)消息称快手近日正在灰度测试同城团购功能,正式入局本地生活服务领域。浏览快手App发现,在其“同城”页面的上端,新增本地餐饮服务专区,约占整个页面的四分之...【详细内容】
2021-05-14  小红蚁官方账号  今日头条  Tags:视频号   点击:(156)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条