专栏首页上云【教程】如何用腾讯云服务器搭建微信公众号机器人?
原创

【教程】如何用腾讯云服务器搭建微信公众号机器人?

我们经常在一些公众号里回复信息,微信公众号都会自动回复信息,区别于微信平台的自动回复,有的公众号上面的自动回复,则更像是一个机器人客服。下面小编就教大家如何搭建微信公众号机器人。

所需材料:

微信公众号:https://mp.weixin.qq.com/

腾讯云服务器:https://cloud.tencent.com/product/cvm

1、公众号申请

任务时间:10min ~ 15min

注册一个公众号

首先进入《微信公众号平台》,然后注册一个账号,类型选择订阅号,然后根据相应的提示完成信息的填写和验证。注册微信公众号这里就不再详述。

2、后台服务器的搭建

任务时间:10min ~ 15min

安装 NodeJS

首先执行以下命令

sudo su

下载最新的稳定版 v6.10.3 到本地

wget https://nodejs.org/dist/v6.10.3/node-v6.10.3-linux-x64.tar.xz

下载完成后, 将其解压

tar xvJf node-v6.10.3-linux-x64.tar.xz

将解压的 Node.js 目录移动到 /usr/local 目录下

mv node-v6.10.3-linux-x64 /usr/local/node-v6

配置 node 软链接到 /bin 目录

ln -s /usr/local/node-v6/bin/node /bin/node

配置 NPM

NPMNode.js 的包管理和分发工具。它可以让 Node.js 开发者能够更加轻松的共享代码和共用代码片段

下载 node 的压缩包中已经包含了 npm , 我们只需要将其软链接到 bin 目录下即可

ln -s /usr/local/node-v6/bin/npm /bin/npm

配置环境变量

将 /usr/local/node-v6/bin 目录添加到 $PATH 环境变量中可以方便地使用通过 npm 全局安装的第三方工具

echo 'export PATH=/usr/local/node-v6/bin:$PATH' >> /etc/profile

生效环境变量

source /etc/profile

安装 Express

安装 Express 应用脚手架:

npm install express-generator -g

创建新的项目

执行

cd /data/
express yourApp

这时候会在 /data 生成应用目录 /yourApp,继续执行以下命令

cd yourApp
npm install
npm start

此时服务已经在 http://ip:3000 上启动,可以在浏览器中浏览测试。

3、进入开发者模式

任务时间:10min ~ 15min

配置服务器信息,进入开发者模式

微信平台会去验证你填写的服务器的有效性,所以配置服务器前要先编写服务器有效性验证的代码。

在终端使用 Ctrl + C 终止刚才启动的服务,然后执行以下命令安装依赖的文件:

npm install xml2js sha1 querystring

编辑 app.js,参考下面的代码:

示例代码:/data/yourApp/app.js

var express = require('express');
var app = express();
var http = require('http');
var sha1 = require('sha1');
var xml2js = require('xml2js');
var querystring  = require('querystring');

process.env.PORT = '80';
function checkSignature(req) {
  // 获取校验参数
  var signature = req.query.signature;
  var timestamp = req.query.timestamp;
  var nonce = req.query.nonce;

  // 此处为实验分配了一个 token,也可以修改为自己的 token
  var token = 'Password';

  // 按照字典排序
  var params = [token, timestamp, nonce];
  params.sort();

  // 连接
  var str = sha1(params.join(""));

  // 返回签名是否一致
  return str == signature;
}

// 接入验证
app.get('/', function(req, res) {
  // 签名成功
  if (checkSignature(req)) {
    res.send(200, req.query.echostr);
  } else {
    res.send(200, 'fail');
  }
});

module.exports = app;

启动服务:

npm start

登录微信公众号平台,然后拉到页面的最下面,点击基本配置菜单。填写以下信息:

  • 服务器地址(URL):填写 您的云服务器 IP 地址
  • 令牌(Token):填写上面代码中使用到的 Token,如无修改,直接使用 Password
  • 消息加解密密钥(EncodingAESKey):随机字符串。可以让平台生成。
  • 消息加解密方式:选择明文方式

配置完毕后点击提交,提交成功后,在基本配置菜单页面点击启用。

此时,微信用户给公众号发送的信息,会由微信平台转发给您的服务器,然后您的服务器进行处理后返回给用户。

在页面点击提交,检查是否可以提交成功。

这是您的服务器地址,服务器主要是用于实现机器人的逻辑。主机部分必须是公网 IP 或者可解析到公网 IP 的域名。

4、机器人的实现

任务时间:10min ~ 15min

实现机器人功能

首先在图灵机器人官网注册(http://www.tuling123.com/sso-web/register) 和申请一个机器人,具体步骤可以参考视频。

申请之后,我们来调用 API 实现机器人的功能。

编辑 app.js,参考下面的代码:

示例代码:/data/yourApp/app.js

var express = require('express');
var app = express();
var http = require('http');
var sha1 = require('sha1');
var xml2js = require('xml2js');
var querystring  = require('querystring');

process.env.PORT = '80';
function checkSignature(req) {
  // 获取校验参数
  var signature = req.query.signature;
  var timestamp = req.query.timestamp;
  var nonce = req.query.nonce;

  // 此处为实验分配了一个 token,也可以修改为自己的 token
  var token = 'Password';

  // 按照字典排序
  var params = [token, timestamp, nonce];
  params.sort();

  // 连接
  var str = sha1(params.join(""));

  // 返回签名是否一致
  return str == signature;
}

// 接入验证
app.get('/', function(req, res) {
  // 签名成功
  if (checkSignature(req)) {
    res.send(200, req.query.echostr);
  } else {
    res.send(200, 'fail');
  }
});

function handler(req, res) {
  let  buf = '';
  // 获取XML内容
  req.setEncoding('utf8');
  req.on('data', function(chunk) {
    buf += chunk;
  });
  // 内容接收完毕
  req.on('end', function() {
    xml2js.parseString(buf, function(err, json) {
      if (err) {
        err.status = 400;
      } else {
        req.body = json;
      }
    });

    let data = req.body.xml;
    var msg = {
      "toUserName" : data.FromUserName[0],
      "fromUserName" : data.ToUserName[0],
      "createTime" : data.CreateTime[0],
      "msgType" : data.MsgType[0],
      "content" : data.Content[0],
      "msgId" : data.MsgId[0]
    };
    request(msg, req, res)

  });
}

function request(data, req, res) { 
  var msg = {             
    "key":'6d76234cf7ee488d84aa1a54397ae866',   // 可以填入自己申请的机器人的apiKey            
    "info": data.content,             
    "userid": ~~(Math.random() * 99999)
  };  
  var text = querystring.stringify(msg);    
  var options = {  
      hostname: 'www.tuling123.com',  
      path: '/openapi/api',  
      method: 'POST',
      headers: {  
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'  
    }  
  };  

  var requestObj = http.request(options, function (response) {  
      var result = '';
      response.setEncoding('utf8');  
      response.on('data', function (chunk) {  
         result +=  chunk;
      });  
      response.on('end',function() {  
      try{
          var obj = JSON.parse(result);
        }
          catch(e){
              data.content = e.message;
          echo(data, res);
          return;
            }
        data.content = obj.text;
        echo(data, res);
      })
  });  

  requestObj.on('error', function (e) {
      console.log('problem with request: ' + e.message);  
      data.content = e.message;  
      echo(data, res);
  });  
  requestObj.write(text);
  requestObj.end();  
}
function echo(data, res) {
  var time = Math.round(new Date().getTime() / 1000);
  var output = "" +
              "<xml>" +
                 "<ToUserName><![CDATA[" + data.toUserName + "]]></ToUserName>" +
                 "<FromUserName><![CDATA[" + data.fromUserName + "]]></FromUserName>" +
                 "<CreateTime>" + time + "</CreateTime>" +
                 "<MsgType><![CDATA[" + data.msgType + "]]></MsgType>" +
                 "<Content><![CDATA[" + data.content + "]]></Content>" +
              "</xml>";

  res.type('xml');
  res.send(output);
}
// Start
app.post('/', function(req, res) {
  handler(req, res);
});

module.exports = app;

操作键盘按下 Ctrl + C 终止之前的服务,然后重新启动:

npm start

您可用对比模式查看新增的部分

5、部署完成

任务时间:3min ~ 5min

访问服务

在微信公众号中关注自己的公众号,然后发送信息给公众号,测试是否有返回。在微信公众号平台可以对公众号信息进行管理。更复杂的逻辑可以参考微信公众号平台开发者文档图灵机器人开发文档

大功告成

恭喜您已经完成了搭建微信AI机器人的搭建,如需购买云服务器学习搭建微信机器人,推荐腾讯云服务器,购买前可以领取代金券。

腾讯云2860代金券:https://cloud.tencent.com/act/vouchers/list

原文:https://yun.fengxinqi.com/archives/dajianjiqiren/

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【玩转腾讯云】免费搭建你的微信机器人!24小时在线!上云!

    今天,我给大家带来一篇使用腾讯云快速搭建微信机器人的教程。并且他是免费的!免费的!纵观网上教程搭建机器人很多都是收费的。然而,我的教程都是免费的,是不是超级的良...

    兰兰想
  • 【玩转腾讯云】免费搭建你的微信机器人!24小时在线!上云!

    以下内容来自「玩转腾讯云」用户原创文章,已获得授权。 1 前言 今天,我给大家带来一篇使用腾讯云快速搭建微信机器人的教程。并且他是免费的!免费的!纵观网上教程搭...

    腾讯云serverless团队
  • 【玩转腾讯云】征文活动获奖名单公布

    由云+社区联合腾讯云免费体验馆及各产品团队举办【玩转腾讯云】征文活动,吸引入驻作者积极参加,非常感谢各位作者的参与。经过评委老师从产品创新性、实用性、可借鉴性、...

    云加社区
  • 【腾讯云的1001种玩法】征文活动

    腾讯云技术社区「腾云阁」上线以来得到了广大程序员们的支持,为了吸引更多的开发者入驻,现再次举办【腾讯云的1001种玩法】征文活动。只要是与「腾讯云」相关的干货原...

    云加社区
  • 【腾讯云的1001种玩法】腾讯云上搭建微信AI机器人

    很多个人开发者创建一个微信公众号后,没时间打理,嫣然成了一个摆设。 如果短期内可以搭起有回复功能,帮你查下天气,讲个笑话,帮你翻译。是不是就热闹有味了。

    襄阳野人
  • 让一部分业务先搭上低代码快车,微搭推出「低代码成长快线」

    受疫情影响,很多企业原有的商业化模式、协作模式、研发模式都受到了一定冲击,特别是对于部分中小企业,是一次不小的考验,在此背景下,支持“可视化拖拉拽+写少量代码”...

    腾讯云开发TCB
  • 从平等化学习、个性化教学、智慧化校园管理3个维度,助力教育公平发展

    12月3-5日,以“融合·创新 让教育点亮每个人”为主题的“GES 2018未来教育大会”在北京召开。腾讯高级执行副总裁汤道生出席并发表致辞《科技助力教育公平发...

    腾讯智慧教育
  • “智慧教育 融合共生”提供全场景解决方案 腾讯携手合作伙伴共建智慧教育生态

    12月3-5日,由中国发展研究基金会、北京师范大学、腾讯、GSV、新东方、好未来等联手打造的“GES 2018未来教育大会”在北京召开。腾讯高级执行副总裁汤道生...

    腾讯智慧教育
  • 开发 | 只需一步!教你如何轻松部署小程序后端

    利用它,你可以在「微信 web 开发者工具」中,直接完成后端代码编写、腾讯云部署等一系列操作。

    知晓君
  • 注册腾讯云账号的几种途径

    腾讯云提供几百种云产品服务,在开始使用腾讯云服务之前,你要先注册一个腾讯云账号。拥有腾讯云账号后,就可以登录腾讯云,选购和使用稳定的云产品和服务。

    魏艾斯博客www.vpsss.net
  • 新闻动态|提供全场景解决方案 腾讯携手合作伙伴共建智慧教育生态

    12月3-5日,由中国发展研究基金会、北京师范大学、腾讯、GSV、新东方、好未来等联手打造的“GES 2018未来教育大会”在北京召开。腾讯高级执行副总裁汤道生...

    优图实验室
  • 快速上线个小程序?来微搭应用市场

    位于大西北的甘肃省张掖市高台县,2010年前后还是一个国家贫困县,整个县城只有10所幼儿园,学前教育资源也相对贫瘠。

    TCS-F
  • 寻找SaaS“潜力军”,腾讯SaaS加速器二期开启招募

    疫情加速产业数字化进程,新基建培育产业新业态。在此背景下,SaaS行业如何乘风破浪、助力产业升级?行业纵深发展下,生态共创不断演进,SaaS企业如何自炼内功、借...

    腾讯SaaS加速器
  • 如何在腾讯云上开发一款O2O书签?

    作者在看书的时候突发奇想,通过一张书签的二维码扫一扫就能知道自己最近在读哪本书,于是自己在腾讯云中从0到1开发一款O2O书签。

    云加社区
  • 不懂代码的他,如何上云?

    大家好,我叫尹辉煌(青阳),今年27岁,目前在保险行业从事团队管理工作,也是腾讯云轻量应用服务器 Lighthouse 的一名用户。我本身是一个计算机爱好者,在...

    腾讯云计算产品团队
  • 河南省政府与腾讯签署战略协议

      3月23日,河南省政府宣布腾讯公司签署战略合作框架协议,双方就“互联网+”达成全方位、深层次的战略合作,将共同探索和推进“互联网+”在各个城市领域的应用,为...

    腾讯研究院
  • 教你搭建微信公众号自动答复机器人

    昨天我们的文章中说到:使用图灵机器人作为应答机器人可以满足要求,但是每天的回复条数在不花钱的情况下只能有100条。对于我这样贫困线人口怎么可能每个月花费...

    菜鸟小白的学习分享
  • 十大云原生最佳用户案例实践,快来选出你最喜欢的那篇

    腾讯云原生 腾讯云原生产品体系和架构已非常完善,涵盖了软件研发流程、计算资源、架构框架、数据存储和处理、安全等五大领域的多个场景。依托这些云原生产品,我们正在为...

    腾讯云原生
  • 常熟理工2万师生联手腾讯教育 共筑“抗疫”防护墙

    根据教育部关于做好疫情防控期间高校教学工作的要求,常熟理工学院依托学校丰富的信息化建设经验,充分利用腾讯会议、腾讯微校等在线教学、教务平台,推动落实视频会议、健...

    鹅老师

扫码关注云+社区

领取腾讯云代金券