4
2

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 3 years have passed since last update.

LINEWORKSAdvent Calendar 2019

Day 5

トーク Bot とのトークルームをたくさん作る

Last updated at Posted at 2019-12-04

LINEWORKS Advent Calendar 2019 の 5日目を担当させていただきます!
どうぞよろしくおねがいしますm(_ _)m

最近見つけた、ちょっとした小ネタを紹介しますね~。

トーク Bot とのトークルームをたくさん作る

タイトルの通りなのですが、トーク Bot とのトークルームをたくさん作ります。
つまり、こんな感じ。
1574306918.png
仕組みとしては単純です。
1:1トークルームではなくて、Bot と2人きりの1:N トークルームを作っているだけです。
なので、この方法を使うときは DeveloperConsole で Bot の Bot ポリシーの「複数人のトークルームに招待可」に必ずチェックを入れておいてくださいね(*'▽')

Bot とのトークルームの作り方

トークルームの作り方はみなさんご存じだと思いますので、さささっと説明しちゃいますが、
トーク画面の左上の追加ボタンを押すと Bot を招待することができます。

1574300569.png

このとき、Bot を1つしか選ばないと1:1のトークルームになってしまうので、別の Bot も一緒に招待します。
それで、1:N のトークルームが出来上がったらいらない方の Bot をトークルームから退出させます!
1574311849.png
1574312222.png

('Д')ドイヒー

そうすると Bot 二人きりのトークルームになるので、これを繰り返すと Bot とのトークルームをたくさん作ることができます。

( ^ω^)・・・うん、めんどくさいですね!

API を使って、Bot とのトークルームをたくさん作る

面倒なことは自動でやれるようにすればいいのです。
Bot を含むトークルーム作成 APIメッセージ送信 API を駆使して一気に作っちゃいましょう!(^^)/

node.js でのコードになります。
あらかじめ request-promise モジュールをインストールしておいてくださいませ。

> npm install request-promise

API ID などの Key はご自身のものを入力してください。

makeManyTalkRooms.js
const request = require("request-promise");

const apiId = "API ID";
const botNo = "部屋をいっぱい作りたい Bot の botNo";
const headers = {
    Authorization: "Bearer " + "Token",
    consumerKey: "consumerKey",
    "Content-Type": "application/json"
};
const url = "https://apis.worksmobile.com/r/" + apiId + "/message/v1/bot/" + botNo;
const titles = [ "room A", "room B", "room C", "room D", "room E"];

titles.forEach((title) => {
    let options = {
        url: url + "/room",
        headers: headers,
        json: {
            accountIds: [ "accountId" ],
            title: title
        }
    };
    request.post(options).then((body) => {
        let options = {
            url: url + "/message/push",
            headers: headers,
            json: {
                roomId: body.roomId,
                content: { type: "text", text: "To " + title }
            }
        };
        request.post(options).catch((error) => { throw new Error(error) }); 
    }).catch((error) => { throw new Error(error) });
});

トークルーム名は 11 行目の titles に格納されています。
titles の要素を増やせばいくらでもトークルームを作ることが可能です!ヾ(´∀`)ノ

トークルームをたくさん作ることによってできること

言っておいてなんなのですが、あまり思いつきませんね。。。
ルームを分けるということは、処理によって対応を分ける必要があるということだと思うのですけど、それなら Bot を複数作った方がわかりやすいですよね。
Bot の利用範囲の制限もできるし、メンバーのメンテナンスも LINEWORKS のメンバー管理と紐づけられるし。

ひとつだけ思いついたのは、外部ユーザへの問い合わせ対応的なものでしょうか?
外部ユーザとのトークルームには LINEWORKS Bot を招待できないので。
例えば、LINE 公式アカウントにトークすると担当者の LINEWORKS に専用トークルームが作られて、そこへトークされる。
そのトークルームに担当者が返事を書くと、LINE 公式アカウントが LINE ユーザに返事をする。
みたいな?

1574321110.png

  • LINE ユーザは LINE 公式アカウントへ話しかける
  • LINE 公式アカウントへのトーク内容を LINEWORKS Bot が LINEWROKS 担当者へトークする
  • そのとき、個別のトークルームにトークする(例:ユーザ A のトークはルーム A に送信)
  • LINE の userId と LINEWORKS の roomId を紐づかせて保持しておく
  • 個別のトークルームでのトークは紐づいた LINE ユーザへ送信される(例:ルーム A のトークはユーザ A に送信)

メリットとしては、担当者の匿名性が保てることでしょうか。
あとは、担当者が複数居た場合に、誰が返事をしても公式アカウントからの返答になることですかね。

んー、どんなシチュエーションですかね。
この仕組みでサービスとして実現できたら、ぜひ教えてくださいm(_ _)m

#おわりに
ここまでお付き合いいただきありがとうございました。

そして、LINEWORKS Advent Calendar 2019 の 5日目として参加させていただきありがとうございました。

Advent Calendar の後半、まだ空いてるから今回の仕組み、作ってみようかな~。
間に合わないから無理かな~( ゚Д゚)

ではまた!(^^)/

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

4
2
0

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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?