Webex Teamsのメッセージをslackに共有する
Webex Teamsにメッセージが投稿されたらslackに通知するボットを作成するための簡易チュートリアル
普段Webexを開かないので、1日毎に新着メッセージがあったらslackに通知してくれるボットを作ります。
その1:Webexのbot作成
Webex Teamsでbotを作成し、メッセージを共有したいチャンネルに参加させます。botの作成は、こちらから行うことが可能です。また、botのアクセストークンをメモしておきます。Webexのアプリページから作成したbotのページに飛ぶと、下の方にBot IDという項目が見つかります。
その2:WebexのスペースID検索
botが参加しているスペース(Room)のIDを検索します。Webexを利用中のアカウントでログイン後に、このページでAPIを走らせることで、今自分が見ることのできるRoomのID一覧を取得することができます。Runボタンはページ下部に存在します。そちらのIDをすべてメモしておきます。
その3:SlackのアプリとWebhook作成
Slack APIからメッセージの通知を行いたいWorkspaceのためのAppを作成し、Incoming webhookのためのアドレスを生成します。以下のIncoming webhookのページに飛び、Add New Webhook To Workspaceボタンを押してアドレスを生成します。このとき通知したいチャンネルの指定が必要になりますので、指定したいチャンネルの数だけ作成しておきます。またSlack上でも、そのチャンネルにbotを参加させておきます。
その4:Google Apps Scriptで2つをつなげるプログラムを書く
Google Apps Scriptで新たなプロジェクトを作成し、Webex TeamsのbotあてにメンションされたメッセージをJSON形式で受取り、その中のユーザーアドレス・メッセージ部分を抽出して、古い順に並び替えたあと特定のSlack channelに書き込むスクリプトを用意します。
適宜スクリプトの上部のWebhookのアドレス、Access token、Room IDなどを書き換えたら、上のバーから実行する関数をmyFunctionに変更し、実行することでテストができます。このテストの際には、myFunction内ではテストのためのチャンネルのWebhook(この場合bottestチャンネル用Webhook)を利用するように書き換えてください。
その5:GAS上で上のプログラムを一日一回実行するトリガーをセットする
今回は毎日一回この関数を実行し、過去1日分のメッセージを取得します。しかし、一日一回起動するトリガーは厳密な時間設定ができない(1時間単位)のため、Google Apps Scriptで時間指定で動く新たなトリガーを設定するための関数を起動することにします。
12時にプログラムを動かしたい場合には、その前にこちらのスクリプトが動くように設定します。
こうすることで、11~12時の間でsetTrigger関数が動く→12:00にmyFunctionを動かすトリガーが新しくセットされる→12:00にmyFunctionを走らせることができるようになります。
チャンネルごとに適度に色も変えてくれます。
まとめ
簡単にWebexのメッセージをSlackに流すことが可能になりました。ただし、Webexのbotの使用上、自分にメンションされたメッセージ、もしくは1対1のスペース内のメッセージしか読み取ることができません。メンションなしにroom全体のすべてのメッセージを抽出したい場合には、別の方法を使うしかないと思われます。ちなみに自分自身のアクセストークンを使えば同じ形式で自分が読めるすべてのメッセージを通知できますが、個人のアクセストークンは12時間でExpireする設定になっています。
Discussion