11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LINE WORKSAdvent Calendar 2022

Day 3

【LINE WORKS】グループトークルームで利用できるBotを作る

Last updated at Posted at 2022-12-02

初めましての方もお久しぶりの方も、こんにちは!
LINE WORKS Advend Calendar 3日目にどうにか間に合いました!(゚∀゚ノノ"☆パチパチパチ

自分の勉強のためにも、もっと記事を書きたいのですがなかなかできず…( ノД`)シクシク
今回はようやく時間が取れたので、グループトークルームで利用できるBotを作ってましたよ(^_-)-☆

Botをグループトークルームで利用するには

Botとの1:1のトークルームや、ユーザーを指定してのトークルームはAPIが用意されているので、簡単に作成することができます。
LINE WORKS Developers - トークルームの登録

しかし、すでに存在しているトークルームにBotを所属させるAPIはありません
そのため、グループや組織など既にトークルームが存在している場合は、トークの画面から手動でBotを招待する必要があります。
そして、Botもそのトークルームの channnelId を取得する必要があります。

まぁ、制約的な話だけされてもイメージつきませんよね( ゚Д゚)
どんな流れでBotが動くのか、ざっと見てみましょう。

Reply Botの場合

ユーザーからトークが来た場合に返信する場合は以下のような流れで設定します。

  1. BotをLINE WORKSに登録
  2. BotをBotサーバーに構築
  3. グループ/組織のトークルームでBotを招待(手動で行う)
  4. ユーザーがトークを送信
  5. Botサーバーがトークを受信(Message Event
  6. 受信した内容から channnelId を取得してトークルームへメッセージを送信

3.の手順が1:1のBotと異なり、必ず手動で行う必要があります。
6.で userId ではなく channnelId を指定してメッセージを送信していることも要注意デス。

Push Botの場合

ユーザーからの応答には答えず、一方的にメッセージを送信する場合は以下のような流れで設定します。

  1. BotをLINE WORKSに登録
  2. BotをBotサーバーに構築
  3. グループ/組織のトークルームでBotを招待(手動で行う)
  4. Botサーバーが招待を受信(Join Event
  5. 受信した内容から channnelId を取得してBotサーバーのDBに登録
  6. 何かをトリガーに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の修正を行います。

  1. Developer Consoleのbotのページにアクセス
    https://developers.worksmobile.com/jp/console/bot/view
  2. 登録したBotの詳細ページを開いて「修正」ボタンをクリック
  3. 「複数人のトークルームに招待可」にチェックを入れる
  4. 「保存」をクリック

l_1728761_243_69d7d57b8f581a2184bc2da6b3456fce.png

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() が使用できるようになります。

  1. ライブラリの一覧から LINEWORKS をクリック
    l_1728761_244_45f7169dc00b31a3a869500c3bd2ccb9.png

  2. 最新のバージョン(61以降)に変更して「保存」を選択
    l_1728761_245_056d3628033ec7114dd0b2fa08dae0b6.png

4. グループのトークルームでBotを招待

  1. LINE WORKSトークを開いてグループのトークルームを開く

  2. メニューから「Bot招待」を選択
    image.png

  3. Botを選んでOKをクリック
    l_67319250_29_9d85931ce7231527d3ca9576d1bbca08.png

l_17892807_151_aa55f1e39e1ca35d3dcebf6e00881d2b.png

これでグループトークルームにBotが追加されました!

さっそく話しかけてみましょう!(´▽`)

1669274057.png

グループトークでちゃんと返事を返してくれましたね!やった♪ヾ(´∀`)ノ

おまけ

LINEWORKS.channelMessageSend(env, text)の中身です。

channelMessageSend
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作りたいなんて声もあったので、そっちも楽しそうだなー(^^♪
何かリクエストがあれば、遠慮なくどうぞー。

ではまた!(^^)/

参考にさせていただきましたm(_ _)m

GoogleAppsScript 公式サイト
LINE WORKS Developers

11
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?