详解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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
NodeJS创建基础应用并应用模板引擎
Apr 12 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
用nodejs的实现原理和搭建服务器(动态)
Aug 10 NodeJs
基于Nodejs利用socket.io实现多人聊天室
Feb 22 NodeJs
nodejs开发——express路由与中间件
Mar 24 NodeJs
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
Sep 19 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 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数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
深入分析php之面向对象
2013/05/15 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
jQuery 动画基础教程
2008/12/25 Javascript
jQuery示例收集
2010/11/05 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
2016/05/13 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
python中使用enumerate函数遍历元素实例
2014/06/16 Python
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
python nmap实现端口扫描器教程
2020/05/28 Python
浅谈django channels 路由误导
2020/05/28 Python
Python中Qslider控件实操详解
2021/02/20 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
应届毕业生应聘自荐信
2013/12/07 职场文书
销售简历自我评价
2014/01/24 职场文书
三年级小学生评语
2014/04/22 职场文书
小班上学期评语
2014/05/05 职场文书
运动会开幕式主持词
2015/07/01 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
openstack中的rpc远程调用的方法
2021/07/09 Python
python绘制云雨图raincloud plot
2022/08/05 Python