详解nodejs微信公众号开发——4.自动回复各种消息


Posted in NodeJs onApril 11, 2017

上一篇文章:nodejs微信公众号开发——3.封装消息响应模块,实现了对消息接口的模块化处理,方便后期的使用,本篇文章将介绍微信公众号回复各种消息的功能实现,包括文本、图片、语音、视频、音乐、图文等。

:感觉最近localtunnel很不稳定,测试起来比较麻烦,有条件的自己搞个云服务器吧,我比较偷懒,几继续使用localtunnel了。

1. 被动回复用户消息

当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。发送被动响应消息是对微信服务器发过来消息的一次回复。

开发过程中如果遇到该公众号暂时无法提供服务,请稍后再试的情况,一般是由两个原因造成的:

  1. 开发者在5秒内未回复任何内容
  2. 开发者回复的数据异常,非xml格式,比如JSON数据

具体的消息规则可参看微信平台开发者文档:被动回复用户消息

2. 回复消息的实现

我们之前的关注自动回复是在weixin.js里面实现的,其他的消息回复也写在这个文件里面:

if(message.MsgType === 'event'){
  if(message.Event === 'subscribe'){
    if(message.EventKey) {
      console.log('扫描二维码关注:'+ message.EventKey +' '+ message.ticket);
    }
    this.body = '终于等到你,还好我没放弃';
  }else if(message.Event === 'unsubscribe'){
    this.body = '';
    console.log(message.FromUserName + ' 悄悄地走了...');
  }else if(message.Event === 'LOCATION'){
    this.body = '您上报的地理位置是:'+ message.Latitude + ',' + message.Longitude;
  }else if(message.Event === 'CLICK'){
    this.body = '您点击了菜单:'+ message.EventKey;
  }else if(message.Event === 'SCAN'){
    this.body = '关注后扫描二维码:'+ message.Ticket;
  }
}
else if(message.MsgType === 'text'){
  var content = message.Content;
  var reply = '你说的话:“' + content + '”,我听不懂呀';
  if(content === '1'){
    reply = '金刚:骷髅岛';
  }
  else if(content === '2'){
    reply = {
      type:'image',
      mediaId:'http://tu.23juqing.com/d/file/html/gndy/dyzz/2017-04-09/da9c7a64ab7df196d08b4b327ef248f2.jpg'
    }
  }
  else if(content === '3'){
    reply = [{
      title:'金刚.骷髅岛',
      description:'南太平洋上的神秘岛屿——骷髅岛。史上最大金刚与邪恶骷髅蜥蜴的较量。',
      picUrl:'http://tu.23juqing.com/d/file/html/gndy/dyzz/2017-04-09/da9c7a64ab7df196d08b4b327ef248f2.jpg',
      url:'http://www.piaohua.com/html/dongzuo/2017/0409/31921.html' //可下载观看喔
    }];
  }

  // ... 其他回复类型

  this.body = reply;
}

测试效果如图:

详解nodejs微信公众号开发——4.自动回复各种消息

3.说明:

发现输入数字2并没有回复相应的图片,是不是很奇怪?我们查看一下文档:

详解nodejs微信公众号开发——4.自动回复各种消息

文档中说明了MediaId属性是通过素材管理接口上传多媒体文件,得到的id,而不是我们直接给的网上图片的url链接。在图文消息中,是可以直接使用url链接的。所以我们下一步的工作就是实现素材管理的接口。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
Nodejs极简入门教程(二):定时器
Oct 25 NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
浅谈NodeJS中require路径问题
May 07 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
详解nodejs 文本操作模块-fs模块(五)
Dec 23 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
Express+Nodejs 下的登录拦截实现代码
Jul 01 NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 #NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 #NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 #NodeJs
详解nodejs微信公众号开发——2.自动回复
Apr 10 #NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 #NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 #NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 #NodeJs
You might like
php结合飞信 免费天气预报短信
2009/05/07 PHP
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
2018/10/20 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
python中的列表和元组区别分析
2020/12/30 Python
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
开工庆典邀请函范文
2014/01/16 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
2017春节晚会开幕词
2016/03/03 职场文书