详解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与Mysql的交互示例代码
Aug 18 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
Nodejs实战心得之eventproxy模块控制并发
Oct 27 NodeJs
图片上传之FileAPI与NodeJs
Jan 24 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
nodejs使用redis作为缓存介质实现的封装缓存类示例
Feb 07 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
NodeJs生成sitemap站点地图的方法示例
Jun 11 NodeJs
浅谈vue websocket nodeJS 进行实时通信踩到的坑
Sep 22 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
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
python3 实现口罩抽签的功能
2020/03/11 Python
html5时钟实现代码
2010/10/22 HTML / CSS
优秀教师的感人事迹
2014/02/04 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
新品发布会策划方案
2014/06/08 职场文书
商场父亲节活动方案
2014/08/27 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android