最近小小研究了一下微信云托管的使用,简单实现了微信云托管托管微信自动回复功能,操作极其简单,感兴趣的可以快速做出来这个功能。
准备条件
首先需要一个正常运行的微信公众号订阅号,认不认证无所谓,正常运行的公众号就可以,登录微信云托管,选择微信公众号的身份登录,创建环境,选择第一个框架就可以了,进入后台后先准备好服务代码文件。
准备服务代码文件
文件名Dockerfile
,代码如下,直接复制即可
FROM node:12-slim
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm config set registry https://mirrors.tencent.com/npm/
RUN npm install
COPY . ./
CMD ["node", "index.js"]
文件名package.json
,代码如下,直接复制即可
{
"name": "cloudbase-push",
"version": "1.0.0",
"description": "call push server",
"main": "index.js",
"scripts": {},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.16.4"
}
}
第三个文件index.js
,稍微需要修改点东西
const express = require('express')
const bodyParser = require('body-parser')
const PORT = process.env.PORT || 80
const app = express()
app.use(bodyParser.raw())
app.use(bodyParser.json({}))
app.use(bodyParser.urlencoded({ extended: true }))
app.all('/', async (req, res) => {
console.log('消息推送', req.body)
const { ToUserName, FromUserName, MsgType, Content, CreateTime } = req.body
if (MsgType === 'text') {
if (Content === '回复文字') {
res.send({
ToUserName: FromUserName,
FromUserName: ToUserName,
CreateTime: CreateTime,
MsgType: 'text',
Content: '这是回复的消息'
})
} else if (Content === '回复图片') {
res.send({
ToUserName: FromUserName,
FromUserName: ToUserName,
CreateTime: CreateTime,
MsgType: 'image',
Image: {
//需要替换MediaID
MediaId: 'h5HlJXE_4qH5MjLN-fnRu7QT5U4V1bLILEFPkliGrXRNU8vCYThZK-SgtCKoTecS'
}
})
} else if (Content === '回复语音') {
res.send({
ToUserName: FromUserName,
FromUserName: ToUserName,
CreateTime: CreateTime,
MsgType: 'voice',
Voice: {
//需要替换MediaID
MediaId: '06JVovlqL4v3DJSQTwas1QPIS-nlBlnEFF-rdu03k0dA9a_z6hqel3SCvoYrPZzp'
}
})
} else if (Content === '回复视频') {
res.send({
ToUserName: FromUserName,
FromUserName: ToUserName,
CreateTime: CreateTime,
MsgType: 'video',
Video: {
//需要替换MediaID
MediaId: 'h5HlJXE_4qH5MjLN-fnRu5Dos4aaDNh_9yHD4s9qvWTURJt2JpT7thyTYpZeJ9Vz',
Title: '视频名称',
Description: '视频介绍内容'
}
})
} else if (Content === '回复音乐') {
res.send({
ToUserName: FromUserName,
FromUserName: ToUserName,
CreateTime: CreateTime,
MsgType: 'music',
Music: {
//需要替换ThumbMediaId
Title: '音乐名称',
Description: '每日推荐一个好听的音乐,感谢收听~',
MusicUrl: 'https://c.y.qq.com/base/fcgi-bin/u?__=0zVuus4U',
HQMusicUrl: 'https://c.y.qq.com/base/fcgi-bin/u?__=0zVuus4U',
ThumbMediaId: 'h5HlJXE_4qH5MjLN-fnRu7QT5U4V1bLILEFPkliGrXRNU8vCYThZK-SgtCKoTecS'
}
})
} else if (Content === '回复图文') {
res.send({
ToUserName: FromUserName,
FromUserName: ToUserName,
CreateTime: CreateTime,
MsgType: 'news',
ArticleCount: 1,
Articles: [{
Title: 'Relax|今日推荐音乐',
Description: '每日推荐一个好听的音乐,感谢收听~',
PicUrl: 'https://y.qq.com/music/photo_new/T002R300x300M000004NEn9X0y2W3u_1.jpg?max_age=2592000',
Url: 'https://c.y.qq.com/base/fcgi-bin/u?__=0zVuus4U'
}]
})
} else {
res.send({
ToUserName: FromUserName,
FromUserName: ToUserName,
CreateTime: CreateTime,
MsgType: 'text',
Content: '收到,可能会在一天内回复~'
})
}
} else {
res.send('success')
}
})
app.listen(PORT, function () {
console.log(`运行成功,端口:${PORT}`)
})
//"type":"video","media_id":"h5HlJXE_4qH5MjLN-fnRu5Dos4aaDNh_9yHD4s9qvWTURJt2JpT7thyTYpZeJ9Vz","created_at":1656947116
//"type":"image","media_id":"h5HlJXE_4qH5MjLN-fnRu7QT5U4V1bLILEFPkliGrXRNU8vCYThZK-SgtCKoTecS","created_at":1656946931
其中,需要替换几个文件ID,因为文件里的代码是我的环境里的文件,你的需要修改为自己环境里的文件ID,获取文件ID方法如下。
获取文件ID
首先需要开启云调用里边的上传文件权限/cgi-bin/media/upload
,粘贴进去,保存即可
然后获取一下令牌,这里先把服务开通一下,可以使用未修改之前的文件创建一个服务,三个文件保存在同一个文件夹内,创建的时候选择这个文件夹上传即可,点击发布,等待部署完成!
进入服务,打开Webshell,这时会看到提示,需要先登录腾讯云,微信扫码登陆后,关闭刚才的Webshell网页,重新打开就可以输入命令行了,输入这个
cat /.tencentcloudbase/wx/cloudbase_access_token
右键可粘贴命令,粘贴后敲回车,获取到token,复制的的时候别复制了后面的#
号!!
获取到token就可以开始使用微信的api上传文件了~我这里使用的是postman,推荐使用这个,apifox用起来有点玄学。
使用postman上传文件获取mediaID
creat new
新建一个http request
,注意把请求修改为POST,粘贴
https://api.weixin.qq.com/cgi-bin/media/upload?cloudbase_access_token=CMkBEoACDv0i-32PINQVE1b7gfRc-wbAbLSyAvxY1St4x0S52TfdCFHFfbxhICgM7kKIsLlRUaMbJhRqYX7NzZ8X9CXBnNCKMjfY7pfI-M2gLKt0iMeYzvX3Ty0YvyG01nLbYfW0g4CzRh4pjSvh_sL364Hsr5qUDQq6KNEcvfN-z48MHTR4mF4gw1gQCkOgp61H9eXx5c3GrOMrElEttll33po8TQGZvH-nSjufNr3GrTcKfa15WsNqqztEAeYW4PjiYD1oKvmAf8YQ5Jl1tJ9ZQOi3kwDFxSb8yZa20PY7_XLmuhtZmbbkIRN-5nYXvqASwrRWbTJK6cLyCY4xZSQ1snhgFIAA&type=video
修改cloudbase_access_token
为你刚刚命令行获取的token,下面type,可选值为image
video
voice
thumb
,用来上传不同类型的文件,接下来点击body
form-data
选择文件类型为file,在本地选取对应type的文件上传即可,注意文件大小限制,完成后点击Send
不出意外的话会获取到类似
{"type":"video","media_id":"h5HlJXE_4qH5MjLN-fnRu5Dos4aaDNh_9yHD4s9qvWTURJt2JpT7thyTYpZeJ9Vz","created_at":1656947116,"item":[]}
的回复,复制其中的media_id
替换到上面index.js
文件中,注意要替换成对应文件形式的文件ID,不要把图片放在视频ID里面,重新上传文件部署。
等待部署完成后,云托管-设置-全局设置-添加消息推送,选择你的公众号,如下图填写即可~
添加全局推送
提交时需要公众号开发者扫码授权,直接授权即可,至此部署完成~
微信打开你的公众号消息框输入对应的
回复文字
之类的关键词即可获取到云托管里面index.js
里面填写的回复内容~
本文作者:自在废物
本文链接:https://rabithua.club/archives/697/
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
感谢分享,赞一个
微信云托管也可以非常方便的部署GitHub流水线发布,push到master分支自动触发云托管版本更新,配合VScode git灰常好用~