最近小小研究了一下微信云托管的使用,简单实现了微信云托管托管微信自动回复功能,操作極其簡單,感興趣的可以快速做出這個功能。
準備條件#
首先需要一個正常運行的微信公众号訂閱號,認不認證無所謂,正常運行的公众号就可以,登录微信云托管,選擇微信公众号的身份登錄,創建環境,選擇第一個框架就可以了,進入後台後先準備好服務代碼文件。
準備服務代碼文件#
文件名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
裡面填寫的回覆內容~