初めましての方もお久しぶりの方も、こんにちは!
LINE WORKS Advend Calendar 3日目にどうにか間に合いました!(゚∀゚ノノ"☆パチパチパチ
自分の勉強のためにも、もっと記事を書きたいのですがなかなかできず…( ノД`)シクシク
今回はようやく時間が取れたので、グループトークルームで利用できるBotを作ってましたよ(^_-)-☆
Botをグループトークルームで利用するには
Botとの1:1のトークルームや、ユーザーを指定してのトークルームはAPIが用意されているので、簡単に作成することができます。
LINE WORKS Developers - トークルームの登録
しかし、すでに存在しているトークルームにBotを所属させるAPIはありません。
そのため、グループや組織など既にトークルームが存在している場合は、トークの画面から手動でBotを招待する必要があります。
そして、Botもそのトークルームの channnelId
を取得する必要があります。
まぁ、制約的な話だけされてもイメージつきませんよね( ゚Д゚)
どんな流れでBotが動くのか、ざっと見てみましょう。
Reply Botの場合
ユーザーからトークが来た場合に返信する場合は以下のような流れで設定します。
- BotをLINE WORKSに登録
- BotをBotサーバーに構築
- グループ/組織のトークルームでBotを招待(手動で行う)
- ユーザーがトークを送信
- Botサーバーがトークを受信(Message Event)
- 受信した内容から
channnelId
を取得してトークルームへメッセージを送信
3.の手順が1:1のBotと異なり、必ず手動で行う必要があります。
6.で userId
ではなく channnelId
を指定してメッセージを送信していることも要注意デス。
Push Botの場合
ユーザーからの応答には答えず、一方的にメッセージを送信する場合は以下のような流れで設定します。
- BotをLINE WORKSに登録
- BotをBotサーバーに構築
- グループ/組織のトークルームでBotを招待(手動で行う)
- Botサーバーが招待を受信(Join Event)
- 受信した内容から
channnelId
を取得してBotサーバーのDBに登録 - 何かをトリガーにDBに登録されている
channnelId
のトークルームへメッセージを送信
4.からの流れがだいぶ違いますね。
BotからアクションするにはBotが送信先の情報を持っていないといけません。(Google Apps ScriptであればSpread Sheetに保存しとけばいいですよ(^^)/
Reply & Push Bot
上記二つの機能を合わせたBotです。Bot発信もしたいし応答もして欲しい!という贅沢な感じ。
もちろん可能ですが、複雑になるので今回は割愛させていただきます!( ゚Д゚)
グループトークルームにReplyするBotを作ってみる
過去に書いた記事で作成したBotに手を加えますので、Google Apps Scriptで基本的なBotを作成する方法はこちらをご参考ください。
1. Botを複数人のトークルームに招待可能にする
前回の記事で作成したBotは1:1のBotなので、複数人のトークルームで招待可能に設定する必要があります。LINE WORKS Developer Consoleにアクセスして、Botの修正を行います。
- Developer Consoleのbotのページにアクセス
https://developers.worksmobile.com/jp/console/bot/view - 登録したBotの詳細ページを開いて「修正」ボタンをクリック
- 「複数人のトークルームに招待可」にチェックを入れる
- 「保存」をクリック
2. コードを変更する
channelId
を取得してトークルームに送信するよう、以下のように変更します。
function doPost(e) {
if (e == null || e.postData == null || e.postData.contents == null) return
let requestJSON = e.postData.contents
let requestObj = JSON.parse(requestJSON)
let text = requestObj.content.text // 応答メッセージ(今回はオウム返し)
let env = getEnv_()
// channelIdを取得
env.channelId = requestObj.source.channelId
// 複数人トークルームにメッセージを送信
LINEWORKS.channelMessageSend(env, text)
}
function getEnv_() {
return {
CLIENT_ID: "xxxxxxxxxxxxxxxx",
CLIENT_SECRET: "xxxxxxxxxxxxxxxx",
SERVICE_ACCOUNT: "xxxxxx.serviceaccount@xxxxxxxxxx",
PRIVATE_KEY: "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0xxxxxxxxxxxxxxxxxxxxxxxxxxxxx==\n-----END PRIVATE KEY-----",
DOMAIN_ID: 10000001,
ADMIN_ID: "xxxx@xxx.com",
BOT_ID: 20000001
}
}
function createBot() {
let env = getEnv_()
env.BOT_ID= LINEWORKS.qiitaSampleBotCreate(env).botId
LINEWORKS.qiitaSampleBotDomainRegister(env)
Logger.log("BOT_ID: " + String(env.BOT_ID))
}
3. LINEWORKSライブラリを最新にする
Google Apps ScriptのLINEWORKSライブラリを最新にします。最新にすると channelMessageSend()
が使用できるようになります。
4. グループのトークルームでBotを招待
これでグループトークルームにBotが追加されました!
さっそく話しかけてみましょう!(´▽`)
グループトークでちゃんと返事を返してくれましたね!やった♪ヾ(´∀`)ノ
おまけ
LINEWORKS.channelMessageSend(env, text)
の中身です。
function channelMessageSend(ENV, text) {
const token = getAccessToken(ENV, "bot").access_token
const uri = "https://www.worksapis.com/v1.0/bots/" + ENV.BOT_ID + "/channels/" + ENV.channelId + "/messages"
const json = {
"content": { "type": "text", "text": text }
}
const options = {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + token
},
"payload": JSON.stringify(json)
}
return UrlFetchApp.fetch(uri, options)
}
おわりに
ここまでお付き合いいただきありがとうございました。
前に記事書いたのは4月でした。コメントもいっぱいいただいるのになかなか返信もできず、申し訳ない気持ちでいっぱいのまま、もう師走。ようやく記事を出せてほっとしています。今年は鬼のように忙しかったのです。。。(´;ω;`)ユルシテ
変わらず記事を読んでくれる皆様、温かいコメントを残してくださる皆様、本当にありがとうございました。この場を借りて、感謝を。
次回はこの記事のさらに続きで、Push Botを作ってみたいと思います。今年のAdvend Calendarに載せられるよう、頑張ってみます!モチベ上がるので応援コメ、大歓迎です!( ゚Д゚)
その次はReply & Push Botかなぁ。
掲示板と連動するBot作りたいなんて声もあったので、そっちも楽しそうだなー(^^♪
何かリクエストがあれば、遠慮なくどうぞー。
ではまた!(^^)/