详解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基本语法和类型
Feb 13 NodeJs
nodejs创建web服务器之hello world程序
Aug 20 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 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 查找字符串常用函数介绍
2012/06/07 PHP
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
php中session退出登陆问题
2014/02/27 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
python paramiko实现ssh远程访问的方法
2013/12/03 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
深入浅析Python传值与传址
2018/07/10 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
Python3内置函数chr和ord实现进制转换
2020/06/05 Python
如何用Python绘制3D柱形图
2020/09/16 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
移动通信专业自荐信范文
2013/11/12 职场文书
幼儿园招生广告
2014/03/19 职场文书
书香家庭事迹材料
2014/05/09 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书