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"
  }
}

3 つ目のファイル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: 'リラックス|今日のおすすめ音楽',
          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: '受け取りました。おそらく1日以内に返信します~'
      })
    }
  } else {
    res.send('成功')
  }
})

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
次に、トークンを取得します。ここでサービスを開通させるために、未修正のファイルを使用してサービスを作成できます。3 つのファイルを同じフォルダに保存し、作成時にこのフォルダを選択してアップロードできます。クリックして公開し、デプロイが完了するのを待ちます!
微信截图_20220704234500.png
微信截图_20220704234543.png
サービスに入ったら、Webshell を開きます。この時、ログインする必要があるというメッセージが表示されます。腾讯云に微信でスキャンしてログインした後、先ほどの Webshell のウェブページを閉じ、再度開くとコマンドラインを入力できるようになります。以下を入力します。

cat /.tencentcloudbase/wx/cloudbase_access_token

右クリックでコマンドを貼り付け、Enter を押してトークンを取得します。コピーする際は、後ろの#記号をコピーしないでください!!
微信截图_20220704235232.png
微信截图_20220704235333.png
微信截图_20220705000004.png
トークンを取得したら、微信の API を使用してファイルをアップロードできるようになります。ここではpostmanを使用しています。これを使用することをお勧めします。apifox は少し難しいです。

postman を使用してファイルをアップロードし mediaID を取得#

新規作成をクリックし、httpリクエストを新規作成します。リクエストを 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を先ほどコマンドラインで取得したトークンに変更し、下の type はimage video voice thumbのいずれかを選択して、異なるタイプのファイルをアップロードします。次に、bodyform-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
提出時には公众号開発者が QR コードをスキャンして認可する必要があります。直接認可すれば、これでデプロイが完了です~

微信であなたの公众号のメッセージボックスに返信テキストなどのキーワードを入力すれば、云托管のindex.jsに記入した返信内容を取得できます~

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。