ENGINEER BLOGPhone Appliのエンジニアブログ

メンションすると展開してメンバーにメンションしてくれるBotを作ってみた

2020年5月26日

こんにちは。テクノロジーリサーチ部の山本です。

今回Node-REDとCisco Webex Teamsを連携させたBotを作ったので、紹介したいと思います。




目次

1.Botの概要

2.Botの設定

3.Node-REDの設定

4.実際の動き

5.まとめ



1.Botの概要

今回Node-REDCisco Webex Teamsを使い、ユーザにメンションを展開してくれるBotを作りました。

どういう機能かというと、あらかじめメーリングリストみたいなものを作っておいて、Botにメンションしてメッセージを送信すると、そのチャットスペースでBotが該当するメンバーに展開してメンションするというものです。


【イメージ】

Me > @Bot LISTNAME

Bot > @MEMBER1, @MEMBER2, @MEMBER3


また空メッセージを送った場合は、現在登録されているリスト内容がメンションしたユーザ相手にプライベートメッセージで返却されます。

【イメージ】


Me > @Bot
Bot > LISTNAME1:

MEMBER1
MEMBER2

Bot > LISTNAME2:

MEMBER3
MEMBER4
MEMBER5


処理全体をフロー図で表すとこんな感じです。


スクリーンショット 2020-05-28 11.53.10.png



それでは簡単に、どのような形でBotを作成したか説明していきたいと思います。



2.Botの設定

Botのアカウント作成

まずはWebex TeamsBotアカウントを作成します。Botアカウントの作成は、こちらから簡単に行うことができます!

Bot作成.png


Bot
の名前やユーザ名、アイコン等を決めるだけで作成できてしまうので、とにかく簡単です!


Webhook設定

Node-REDBotを連携させるために、こちらからWebhookの設定をします。

Webhookを利用するために、Node-REDはインターネットからアクセスを受けられる環境のものを用意する必要があります。ローカルのNode-REDの場合は、ngrok というサービスを使用して繋ぐこともできます。

ここで注意するポイントは、filter」の項目で「mentionedPeople=me」と設定することです。この設定をしないと、Bot自身が送信したメッセージでもWebhookしてしまうので、無限ループに陥ってしまいます。



3.Node-RED側の設定

続いてNode-RED側の設定をします。


・メンバーリストの作成

まずはじめに、メンバーリストの作成を行います。

今回作成したBotはあらかじめ作成されたメンバーのリストに対して、ユーザからメンションされたメッセージ内容をもとにリストの検索を行います。そしてリストに該当するメンバーを引っ張ってくるという構造になっています。

今回メンバーリストはfunctionノードにJSON形式で以下のように登録しました。

スクリーンショット 2020-05-27 13.35.44.png

・フロー全体の設定

フロー全体図はこんな感じです。

スクリーンショット 2020-05-26 18.32.00.png


大まかな流れは以下の通りです。

Webhookを通じてフローが開始される

②メッセージ内容の詳細を取得する

③メッセージにリスト名が含まれているかチェック(空メッセージかどうか)

④チェックした結果に合わせてメッセージの送信処理を行う

空メッセージだった場合に登録済みメンバーリストを返却する処理ですが、各リストごとに分けてメッセージを送信するように設定しています。今回はswitchノードを用いてループ処理を行うようにしました。

Webex Teamsでは一つのメッセージあたり送信できる文字数に制限があります。そのため大量のリストを登録していた場合、1回にまとめてメッセージを送ると文字数制限に引っかってしまいます。文字数制限を避けるため、今回はこのような処理の形にしました。



4.
実際の動き

それでは、実際どのように動くか紹介していきます。


・メンバーリスト登録

まず、メンバーリストの登録ですが今回はこのように登録しました。「ME1」と「ME2」という名前のリストを作成し、それぞれに自分が登録されています。

スクリーンショット 2020-05-27 13.57.52.png



・空メッセージ送信した場合

Botが追加されている任意のスペースで、Botにメンションして空メッセージを送ります。

スクリーンショット 2020-05-27 14.24.52.png


すると、このように事前に登録しておいたME1ME2の情報がプライベートメッセージで送られてきます。

スクリーンショット 2020-05-27 14.21.12.png




・リスト名を送信した場合(スレッドで送信)

まず、リスト名を一つだけ送ります。ME1に登録されているユーザ(今回は自分)がメンションされます。

スクリーンショット 2020-05-27 14.41.32.png


複数のリストをメッセージで送る場合は、カンマもしくは改行で区切ります。複数リストの場合は、先頭にリスト名が付き、その後にリストに登録されているメンバーがメンションされます。


スクリーンショット 2020-05-27 16.14.48.png



5.まとめ

今回はNode-REDとWebex Teamsを連携させたBotを作成しました。

複数のメンバーに対してメンションしたい場合に、1人ひとりメンバーを検索してメンションする必要があると少しめんどくさいですよね。同じ部署であったり、一緒に仕事をすることが多いメンバーをあらかじめリストに登録さえしておけば、便利に使えると思います。

社内で少し不便に感じている部分も、ちょっとした工夫で改善できる、ということを体験できてとても面白かったです。今回はBotでしたが、他にも色々と体験できたらと思っています。