こんにちはエンジニアの sakasai です。
AWS Summit が開催されましたね。今月(2021/5)中は動画が見れるようなのでライブで見れなかったセッションなどチェックしたいと思います。
さて、 前回の記事 で定期的に Mattermost のチーム内のチャンネルリストを決まったチャンネルに投稿するボットを紹介しましたが、今回は Mattermost の スラッシュコマンド機能 を使って任意のタイミングでチャンネルリストを表示する方法をご紹介したいと思います。
完成イメージは
- スラッシュコマンドを入力(任意のチャンネル)
- チャンネルリストが表示(自分だけに見える投稿で表示)
です。
構成はこんな感じです。( 前回 のものに機能追加する形で実装しています)
ソースコードは GitHub にアップしています。
では作り方を説明します。
スラッシュコマンド作成
まずはMattermost上でスラッシュコマンドを作成します。
メニューから「統合機能」を選んで
「スラッシュコマンド」を選択
「スラッシュコマンドを追加する」ボタンを押します
必要な項目を入力して「保存する」ボタンを押します。
※「リクエストURL」には一旦ダミーのURLを設定します。
作成するとトークンが発行されるので控えておいてください。(API Gatewayのオーソライザーで利用します)
〜 スラッシュコマンド実行時のリクエストについて 〜
Mattermost上でスラッシュコマンドを実行すると設定したリクエストURL・リクエストメソッドでリクエストが実行されます。
その際に
Authorizationヘッダに発行されたトークンがセット
リクエストパラメータとしてチャンネルID、チームID、ユーザーIDなどが付与
の状態でリクエストされます。
https://docs.mattermost.com/developer/slash-commands.html#custom-slash-command
AWS Lambdaの作成
API GatewayのLambdaオーソライザーで実行されるLambda関数とAPI GatewayのLambdaプロキシ統合で実行されるLambda関数を作成します。
API Gatewayの認証で使われます。
今回作ったLambdaオーソライザーではeventパラメータからAuthorizationトークンを取得して環境変数にセットしたトークン(スラッシュコマンド作成時に発行されたトークンを環境変数にセット)と一致しているかチェックしています。
token = event["authorizationToken"]
effect = "Allow" if token == f"Token {os.getenv('MM_SLACH_CMD_TOKEN')}" else "Deny"
# "Allow" or "Deny" を ポリシーの「Effect」にセット
Lambdaオーソライザーで認証OKになった場合実行されるチャンネルリストの取得・投稿処理です。
前回 のものにAPI Gatewayのハンドラを追加する形で実装しています。
Mattermostのスラッシュコマンドからのリクエストで渡されるチャンネルID、チームID、ユーザーIDを使ってスラッシュコマンドを実行したユーザーのみが見える形でチャンネルリストを投稿するようにしています。
投稿には以下のAPIを実行しています。
スラッシュコマンドからのリクエストのレスポンスとしてチャンネルリストを返却する形ではなく、 前回 作成したボットで投稿する形にしています。
API Gatewayの作成
Mattermostのスラッシュコマンドからのリクエストを受け付けるAPI Gatewayを作成します。
エンドポイントタイプがリージョンのREST APIを作成し、オーソライザーをLambdaオーソライザーにします。( 作成したLambda を設定します。)
リソース設定でメソッドを追加して統合リクエストに 作成したLambda を設定しステージにデプロイします。今回はGETメソッドでステージv1を作成しデプロイしました。
デプロイ出来たらAPIのURLが発行されるのでMattermost上でスラッシュコマンド設定を開きリクエストURLを変更して保存します。
API Gateway設定の詳細はGitHubの SAMテンプレート も参照してください。
Mattermost上の追加設定
スラッシュコマンドから外部のURLにアクセスさせるためにMattermostシステムコンソール上での設定が必要になります。
Mattermostシステムコンソールの開発者メニューを開き、「信頼されていない内部接続を許可する」にAPI Gatewayのドメインを設定します。
上記設定が完了したら、完成イメージのようにスラッシュコマンドを実行してチャンネルリストを表示することができると思います。
以上、 前回 のボットの紹介に引き続きスラッシュコマンドを使ったチャンネル一覧取得のご紹介でした。
弊社ではエンジニア募集してます。
https://www.wantedly.com/companies/company_6372758/projects
気になった方はお気軽にご連絡ください。(カジュアル面談でちょっと話が聞きたいという方は自分のtwitter宛にDMをいただく形でも大丈夫です)