专栏首页Serverless的前端项目实践【腾讯云Serverless】使用云函数快速打造一个智障微信公众号自动回复机器人
原创

【腾讯云Serverless】使用云函数快速打造一个智障微信公众号自动回复机器人

想法

于上周五发现了一个有趣的仓库: co-wechat。突发奇想,我不要你觉得,我要我觉得,腾讯云云函数配合该库,理论上可以快速搭建一个微信公众号的自动回复机器人。所以就开始查查文档,开搞了。

开搞

步骤一

先用Tencent Serverless Toolkit for VS Code这个VS Code插件生成一个云函数。并根据该文档修改下template.yaml,配置API网关触发器。

去到函数的面板,点击上传函数,等待上传完成,就可以在控制台看到了函数部署上去了。

那一个配有API网关触发器的云函数就创建完成了。访问API网关触发器下面的访问路径,即可触发该云函数运行。

步骤二

然后我们再看下微信公众号这边。

如果没有一个自己的订阅号,可以先去注册一个自己的订阅号,注册页面

注册完成后,我们还需要完成开发者配置。最完整的接入指南: 传送门

登录进去,可以在左侧菜单栏中看到开发,选择基本配置,可以看到下面的页面

重点看图片中的红框部分

服务器地址(URL): 填写 API网关触发器的访问路径

Token: 自己填写

EncodingAESKey:微信随机生成

消息加解密方式:这个大家看自己需求选择,我这里就选个明文模式。

点击修改配置后,可以进行配置的填写,然后可以点击提交试试,会报一个 token验证失败的错误。

看下文档,

哦,原来还得服务器返回echostr才能接入成功。那我们在云函数操作下。

可以在云函数的日志中,看到之前的失败的请求日志

可以知道,要返回的echostr就在event.queryString上,那我们return一下就完成接入了。

exports.main_handler = async (event, context, callback) => {
    console.log(event)
    return {
        "isBase64Encoded": false,
        "statusCode": 200,
        "headers": {"Content-Type":"plain/text"},
        "body": event.queryString.echostr
    }
};

一提交,成了。微信公众号平台到云函数这个请求链路就打通了

步骤三

我们就可以开始编写云函数代码(bug)了。

我是使用nodejs开发,使用了serverless-httpco-wechat两个库。根据两个库的github文档,我们可以写出下面的代码。

"use strict";
const Koa = require("koa");
const serverless = require("serverless-http");
const wechat = require("co-wechat");
const config = {
token: 'token',
 appid: 'appid',
 encodingAESKey: 'encodinAESKey',
};
​
const app = new Koa();
​
app.use(
 wechat(config).middleware(async (message, ctx) => {
   if (message.Content === "屌丝") {
     return "呵呵";
   }
})
);
​
const handler = serverless(app);
exports.main_handler = async (event, context, callback) => {
  return await handler(
    { ...event, queryStringParameters: event.queryString },
    context
  );
};

简单解释下代码:

整个代码是使用了koa,这个nodejs开发web服务的框架。

serverless-http这个库是将api网关发送过来的请求参数做了一次封装,使我们在云函数中使用koa时,即使我们没有监听一个端口,也能像平时使用koa开发一样使用koa相关的api。

co-wechat这个库是封装好了微信公众号平台的自动回复api,然后将其作为一个koa中间件,提供给开发者使用。我们只需要将其当成koa的中间件来使用即可,同时传入微信要求传入的配置参数,例如token,appid等,这些在前面的开发者配置中提到过。更多使用详情,可以去该仓库查看文档哈。

代码编写完后,自己可以调试下,调试方式有以下几种:

1、使用微信提供的接口调试工具进行调试,同时代码中,wechat(config)需要改成wechat(config, true)来开启debug模式

2、拷贝微信的请求数据,以及新增一个api网关测试模板,使用VS Code插件进行调试,详情可以看 记一次使用腾讯云Serverless的VS Code插件来定位问题。

调试后没问题就可以部署到腾讯云Serverless。同时,在微信公众号平台那里启用服务器配置。

成果

看下成果,一个简单的自动回复机器人就完成了,剩余如何开(tiao)发(xi)这个机器人就看开发者自己的脑洞了。

总结

微信公众号开发的场景比较适合使用腾讯云云函数

看微信公众平台的接入指南,按照以往的接入方式,是需要自己去购买服务器,等配置完服务器,怕是没啥兴致继续捣鼓逻辑代码了。而腾讯云云函数配合api网关就很方便,看着我上面的步骤,创建一个可用的云函数就需要几分钟吧,同时,目前云函数还是免费:)。

其次就是调试,如果是传统的一个nodejs服务,我也许还得分析微信的请求信息,来使用postman或者curl去调试吧。使用VS Code插件我就需要拷贝下微信的请求信息,生成一个API的测试模板,然后本地运行函数就好了,甚至可以使用vscode的debugger进行断点调试。

最后就是部署,这么一个比较简单的代码,如果部署在服务器上,大概率是手动上传,再重新run(给我我就这样,别跟我说啥CICD)。但是部署在云函数上,使用VS Code插件部署简单方便省事。

总的来说,是腾讯云云函数一个比较合适的使用实践。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 常见数据结构和Javascript实现总结

    做前端的同学不少都是自学成才或者半路出家,计算机基础的知识比较薄弱,尤其是数据结构和算法这块,所以今天整理了一下常见的数据结构和对应的Javascript的实现...

    MudOnTire
  • node服务及前端应用部署

    本文案例取自在笔者腾讯云服务器上的实践。上线部署在大公司里其实是专人操作的,一个产品从构思到发布,许许多多的坑要踩。

    一粒小麦
  • 怎样编写更好的 JavaScript 代码[每日前端夜话0xA4]

    我看到没有多少人谈论改进 JavaScript 代码的实用方法。以下是我用来编写更好的 JS 的一些顶级方法。

    疯狂的技术宅
  • Hadoop YARN:调度性能优化实践

    今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区

    数据猿
  • Node.js 版本知多少?又该如何选择?

    Node.js 曾出现过与 io.js 的分裂,自合并成立 Node.js 基金会以来,就开始使用 Long Term Support(LTS)来规划版本发布,...

    五月君
  • 重温基础:ES9系列

    所有整理的文章都收录到我《Cute-JavaScript》系列文章中,访问地址:http://js.pingan8787.com

    用户1462769
  • vue源码解读--Vitual DOM(虚拟DOM)

    Virtual DOM产生的原因是浏览器中DOM是很“昂贵”的,我们来看一下一个p元素的属性都有哪些:

    用户3258338
  • 交易所对接以太坊钱包服务设计与实现

    交易所钱包服务是加密货币交易所系统中的重要组成部分,它负责与各种不同的区块链的交互,实现用户地址生成、充值与提现等功能。本文以对接以太坊区块链的钱包服务为例,介...

    用户1408045
  • nodejs框架Koa做中间层使用总结(含示例)

    一个以nodejs为基础的一个后台框架。直白一点来说,就是一个javascript语言需要编写的库,它的定位是作为服务端应用提供服务,本身对外暴露了一些api,...

    用户1462769
  • 你觉得 Node.js 是单线程这个结论对吗?

    ——爱默生

    五月君

扫码关注云+社区

领取腾讯云代金券