详解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的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
轻松创建nodejs服务器(5):事件处理程序
Dec 18 NodeJs
nodejs中实现路由功能
Dec 29 NodeJs
NodeJS使用jQuery选择器操作DOM
Feb 13 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
NodeJS简单实现WebSocket功能示例
Feb 10 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
nodejs中方法和模块用法示例
Dec 24 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简单静态页生成过程
2008/03/27 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
python实现Virginia无密钥解密
2019/03/20 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
python绘制动态曲线教程
2020/02/24 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
如何清空python的变量
2020/07/05 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
客户表扬信范文
2014/01/10 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
《日月潭》教学反思
2016/02/20 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python