メンションすると展開してメンバーにメンションしてくれるBotを作ってみた 2020年5月26日 こんにちは。テクノロジーリサーチ部の山本です。 今回Node-REDとCisco Webex Teamsを連携させたBotを作ったので、紹介したいと思います。 目次 1.Botの概要 2.Botの設定 3.Node-REDの設定 4.実際の動き 5.まとめ 1.Botの概要 今回Node-REDとCisco Webex Teamsを使い、ユーザにメンションを展開してくれるBotを作りました。 どういう機能かというと、あらかじめメーリングリストみたいなものを作っておいて、Botにメンションしてメッセージを送信すると、そのチャットスペースでBotが該当するメンバーに展開してメンションするというものです。 【イメージ】 Me > @Bot LISTNAME Bot > @MEMBER1, @MEMBER2, @MEMBER3 また空メッセージを送った場合は、現在登録されているリスト内容がメンションしたユーザ相手にプライベートメッセージで返却されます。 【イメージ】 Me > @BotBot > LISTNAME1: MEMBER1 MEMBER2 Bot > LISTNAME2: MEMBER3 MEMBER4 MEMBER5 処理全体をフロー図で表すとこんな感じです。 それでは簡単に、どのような形でBotを作成したか説明していきたいと思います。 2.Botの設定 ・Botのアカウント作成 まずはWebex TeamsのBotアカウントを作成します。Botアカウントの作成は、こちらから簡単に行うことができます! Botの名前やユーザ名、アイコン等を決めるだけで作成できてしまうので、とにかく簡単です!・Webhook設定 Node-REDとBotを連携させるために、こちらからWebhookの設定をします。 Webhookを利用するために、Node-REDはインターネットからアクセスを受けられる環境のものを用意する必要があります。ローカルのNode-REDの場合は、ngrok というサービスを使用して繋ぐこともできます。 ここで注意するポイントは、「filter」の項目で「mentionedPeople=me」と設定することです。この設定をしないと、Bot自身が送信したメッセージでもWebhookしてしまうので、無限ループに陥ってしまいます。 3.Node-RED側の設定 続いてNode-RED側の設定をします。 ・メンバーリストの作成 まずはじめに、メンバーリストの作成を行います。 今回作成したBotはあらかじめ作成されたメンバーのリストに対して、ユーザからメンションされたメッセージ内容をもとにリストの検索を行います。そしてリストに該当するメンバーを引っ張ってくるという構造になっています。 今回メンバーリストはfunctionノードにJSON形式で以下のように登録しました。 ・フロー全体の設定 フロー全体図はこんな感じです。 大まかな流れは以下の通りです。 ①Webhookを通じてフローが開始される ②メッセージ内容の詳細を取得する ③メッセージにリスト名が含まれているかチェック(空メッセージかどうか) ④チェックした結果に合わせてメッセージの送信処理を行う 空メッセージだった場合に登録済みメンバーリストを返却する処理ですが、各リストごとに分けてメッセージを送信するように設定しています。今回はswitchノードを用いてループ処理を行うようにしました。 Webex Teamsでは一つのメッセージあたり送信できる文字数に制限があります。そのため大量のリストを登録していた場合、1回にまとめてメッセージを送ると文字数制限に引っかってしまいます。文字数制限を避けるため、今回はこのような処理の形にしました。 4.実際の動き それでは、実際どのように動くか紹介していきます。 ・メンバーリスト登録 まず、メンバーリストの登録ですが今回はこのように登録しました。「ME1」と「ME2」という名前のリストを作成し、それぞれに自分が登録されています。 ・空メッセージ送信した場合 Botが追加されている任意のスペースで、Botにメンションして空メッセージを送ります。 すると、このように事前に登録しておいたME1とME2の情報がプライベートメッセージで送られてきます。 ・リスト名を送信した場合(スレッドで送信) まず、リスト名を一つだけ送ります。ME1に登録されているユーザ(今回は自分)がメンションされます。 複数のリストをメッセージで送る場合は、カンマもしくは改行で区切ります。複数リストの場合は、先頭にリスト名が付き、その後にリストに登録されているメンバーがメンションされます。 5.まとめ 今回はNode-REDとWebex Teamsを連携させたBotを作成しました。 複数のメンバーに対してメンションしたい場合に、1人ひとりメンバーを検索してメンションする必要があると少しめんどくさいですよね。同じ部署であったり、一緒に仕事をすることが多いメンバーをあらかじめリストに登録さえしておけば、便利に使えると思います。社内で少し不便に感じている部分も、ちょっとした工夫で改善できる、ということを体験できてとても面白かったです。今回はBotでしたが、他にも色々と体験できたらと思っています。