0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slackにインスタントな翻訳機能を提供する-レシピ構築編-

Last updated at Posted at 2024-10-17

前回の記事 の続きです。

まずは、作りたいボットの仕様をおさらいします。

  1. Slackの投稿に絵文字リアクション :flag_jp: が付けられたら起動
  2. 日本語訳に対応
  3. 翻訳結果をスレッドに返信する

コネクション

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

付けられたリアクションが :flag_jp:(日本の絵文字) の時だけ、ジョブが実行されるように条件を付けたいと思います。

トグルをonにすると条件を設定するフィールドが展開されるので、次の通り設定します。

  • Trigger data:トリガー(Step1)のReactionを選択
  • Conditionequalsを選択
  • 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>(リクエスト概要設定)

  • MethodGETを選択
  • Path:「conversations.replies」を入力

右下の「next」ボタンで次画面へ遷移します。

<ガイド2>(リクエストのサンプルパラメータ設定)

「Add URL parameter」ボタンで展開し、Prameter name と Valueに次の値を設定します。

image.png

<サンプル送信用のパラメータ設定>

  • channel:チャンネルID
  • ts:タイムスタンプの加工値
  • latest:タイムスタンプの加工値
  • inclusive:true
  • limit:1

「Send request」ボタンでリクエストが送信されます。

<ガイド3>(レスポンス確認)

リクエストの送信に成功したら「Apply configuration」ボタンでガイドを終了します。

image.png

サンプル送信のレスポンスを通して、Request bodyのスキーマが生成されていることが確認できます。
image.png

ガイド後の手直し

とても重要な作業です。
このままではリクエストパラメータがテスト値になっているため、正しい値に変更します。

Request URL parameters
  • channel:Step1のChannelを設定
  • ts:Step1のtsを設定
  • latest:Step1のtsを設定
  • inclusive:(そのまま)
  • limit:(そのまま)

image.png

これらの値の意味は、「指定のチャンネルにて、とある日時(タイムスタンプ)以降に投稿された直近の返信を1件取得する」です。
タイムスタンプの一意性を利用し、実質的に指定のチャンネルから特定の1つのメッセージを抽出する方法となります。

Step3 | 翻訳

メッセージを日本語に翻訳するための設定を行います。

アクションは「Translating text」、connectionは先ほど作成したものを使用します。

  • Text:Step2のTextを設定
  • Target languageJapaneseを選択

Step4 | 翻訳結果の返却

メッセージ送信には、「Post message」アクションを利用します。

image.png

  • Channel name/DM:Step1のChannelを設定
  • Notification text:Step3のTextを設定

上記の設定は、どのチャンネルに何を投稿するか の指定となります。
これに加えて、返信の形で翻訳結果を送信したいため、次の設定を追加します。

スレッドIDの設定

まず、「Thread ID」というフィールドは画面表示時には隠れているので、表示させます。

(Advanced のThread IDに✓を入れ、「Apply changes」ボタンをクリック)

「Thread ID」フィールドが表示されたら、値を設定します。

  • Thread ID:Step1のTsを設定

必要な設定はこれで終わりです。

完成レシピ

image.png

実行結果

通常の投稿の翻訳

スレッド内の投稿(返信)の翻訳

さいごに

お疲れ様でした。
前・中・後編にわたって読んでくれた方は、Workatoのレシピ構築方法に加えてSlackAPIのイベントやメソッド周辺の知識が深まったのではないでしょうか。

カスタムワークボットの設定、カスタムアクションの実装といった高度な内容が含まれていましたが、どちらも利用方法を覚えておくと大変便利です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?