前回の記事 の続きです。
まずは、作りたいボットの仕様をおさらいします。
- Slackの投稿に絵文字リアクション が付けられたら起動
- 日本語訳に対応
- 翻訳結果をスレッドに返信する
コネクション
Workbot for Slack
前回の記事で設定済みです。
DeepL
あらかじめコミュニティライブラリから、DeepLコネクタをinstallしておきます。
-
Service plan:利用するDeepLアカウントのプランに応じて選択
(今回は無料版を使うためDeepL API Free
を選択しています) - Auth key:利用するDeepLアカウントで発行したAPIキーを入力
Connectボタンをクリックし、ステータスがConnected
となればOKです。
トリガー
「Workbot for Slack」コネクタを使います。
トリガーは「new event」、connectionは前回の記事で作成したものを使用します。
Event name
Reaction Added (reaction_added)
を選択
Set trigger condition
付けられたリアクションが (日本の絵文字) の時だけ、ジョブが実行されるように条件を付けたいと思います。
トグルをonにすると条件を設定するフィールドが展開されるので、次の通り設定します。
-
Trigger data:トリガー(Step1)の
Reaction
を選択 -
Condition:
equals
を選択 - Value:「jp」を入力
アクション
Step2 | メッセージの読み出し
conversations.historyは使いません
トリガーから取得したメッセージIDを元に、メッセージ(テキスト)を取得します。
前回の記事では、カスタムワークボットに紐づけるSlackAppへのスコープ追加の際に、メッセージ取得にはconversations.history
を使うのかな?とアタリを付けたと思います。
実は、conversations.history
では返信の取得に対応していません。
通常のメッセージは取れるけど、スレッド内のメッセージ(=返信)は取れないのです。
一方で、よく似たものにconversations.replies
があります。これは返信を取得するために用意されたメソッドですが、(返信先である)元のメッセージの取得にも対応しています。
今回のケースでは使い勝手がいいのでこちらを使います。
幸い、conversations.replies
の要求スコープはconversations.history
と同じです。
よかった!前回App側に設定したスコープで問題ないですね。
ガイドに沿ってカスタムアクション設定
メッセージの取得については、Workbot for Slackコネクタの標準アクションに無いため、カスタムアクションを利用します。
ガイドを使うと、APIリクエストのテスト送信と、レスポンスのスキーマの自動生成を兼ねることができ便利です。
<ガイド前>
- Action name:任意の名称を入力
「Start guided setup」ボタンを押すと、ウィザードの画面が表示されます。
<ガイド1>(リクエスト概要設定)
-
Method:
GET
を選択 - Path:「conversations.replies」を入力
右下の「next」ボタンで次画面へ遷移します。
<ガイド2>(リクエストのサンプルパラメータ設定)
「Add URL parameter」ボタンで展開し、Prameter name と Valueに次の値を設定します。
<サンプル送信用のパラメータ設定>
- channel:チャンネルID
- ts:タイムスタンプの加工値
- latest:タイムスタンプの加工値
- inclusive:true
- limit:1
「Send request」ボタンでリクエストが送信されます。
<ガイド3>(レスポンス確認)
リクエストの送信に成功したら「Apply configuration」ボタンでガイドを終了します。
サンプル送信のレスポンスを通して、Request bodyのスキーマが生成されていることが確認できます。
ガイド後の手直し
とても重要な作業です。
このままではリクエストパラメータがテスト値になっているため、正しい値に変更します。
Request URL parameters
-
channel:Step1の
Channel
を設定 -
ts:Step1の
ts
を設定 -
latest:Step1の
ts
を設定 - inclusive:(そのまま)
- limit:(そのまま)
これらの値の意味は、「指定のチャンネルにて、とある日時(タイムスタンプ)以降に投稿された直近の返信を1件取得する」です。
タイムスタンプの一意性を利用し、実質的に指定のチャンネルから特定の1つのメッセージを抽出する方法となります。
Step3 | 翻訳
メッセージを日本語に翻訳するための設定を行います。
アクションは「Translating text」、connectionは先ほど作成したものを使用します。
-
Text:Step2の
Text
を設定 -
Target language:
Japanese
を選択
Step4 | 翻訳結果の返却
メッセージ送信には、「Post message」アクションを利用します。
-
Channel name/DM:Step1の
Channel
を設定 -
Notification text:Step3の
Text
を設定
上記の設定は、どのチャンネルに何を投稿するか の指定となります。
これに加えて、返信の形で翻訳結果を送信したいため、次の設定を追加します。
スレッドIDの設定
まず、「Thread ID」というフィールドは画面表示時には隠れているので、表示させます。
(Advanced のThread IDに✓を入れ、「Apply changes」ボタンをクリック)
「Thread ID」フィールドが表示されたら、値を設定します。
-
Thread ID:Step1の
Ts
を設定
必要な設定はこれで終わりです。
完成レシピ
実行結果
通常の投稿の翻訳
スレッド内の投稿(返信)の翻訳
さいごに
お疲れ様でした。
前・中・後編にわたって読んでくれた方は、Workatoのレシピ構築方法に加えてSlackAPIのイベントやメソッド周辺の知識が深まったのではないでしょうか。
カスタムワークボットの設定、カスタムアクションの実装といった高度な内容が含まれていましたが、どちらも利用方法を覚えておくと大変便利です。