banner
rabithua

rabithua

twitter
github

微信云托管如何托管公众号自動回覆

最近小小研究了一下微信云托管的使用,简单实现了微信云托管托管微信自动回复功能,操作極其簡單,感興趣的可以快速做出這個功能。

準備條件#

首先需要一個正常運行的微信公众号訂閱號,認不認證無所謂,正常運行的公众号就可以,登录微信云托管,選擇微信公众号的身份登錄,創建環境,選擇第一個框架就可以了,進入後台後先準備好服務代碼文件。
微信截图_20220704232342.png

準備服務代碼文件#

文件名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,粘貼進去,保存即可
微信截图_20220704234000.png
然後獲取一下令牌,這裡先把服務開通一下,可以使用未修改之前的文件創建一個服務,三個文件保存在同一個文件夾內,創建的時候選擇這個文件夾上傳即可,點擊發布,等待部署完成!
微信截图_20220704234500.png
微信截图_20220704234543.png
進入服務,打開 Webshell,這時會看到提示,需要先登錄腾讯云,微信掃碼登錄後,關閉剛才的 Webshell 網頁,重新打開就可以輸入命令行了,輸入這個

cat /.tencentcloudbase/wx/cloudbase_access_token

右鍵可粘貼命令,粘貼後敲回車,獲取到 token,複製的時候別複製了後面的#號!!
微信截图_20220704235232.png
微信截图_20220704235333.png
微信截图_20220705000004.png
獲取到 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
微信截图_20220705000328.png

微信截图_20220705000637.png
微信截图_20220705000817.png
微信截图_20220705001018.png
不出意外的話會獲取到類似

{"type":"video","media_id":"h5HlJXE_4qH5MjLN-fnRu5Dos4aaDNh_9yHD4s9qvWTURJt2JpT7thyTYpZeJ9Vz","created_at":1656947116,"item":[]}

的回覆,複製其中的media_id替換到上面index.js文件中,** 注意要替換成對應文件形式的文件 ID,不要把圖片放在視頻 ID 裡面,** 重新上傳文件部署。
微信截图_20220705001620.png
微信截图_20220705001704.png
等待部署完成後,雲托管 - 設置 - 全局設置 - 添加消息推送,選擇你的公众号,如下圖填寫即可~

添加全局推送#

微信截图_20220705001956.png
提交時需要公众号開發者掃碼授權,直接授權即可,至此部署完成~

微信打開你的公众号消息框輸入對應的回复文字之類的關鍵詞即可獲取到雲托管裡面index.js裡面填寫的回覆內容~

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。