Talend tHttpRequestを使ってSlackのIncoming WebhookにPOSTリクエストを送信

メモ:

Talendの tHttpRequest コンポーネントを使うと GET や POST メソッドを実行することができます。ここでは、 Slack や mattermost に用意されている Incoming Webhook に対して tHttpRequest コンポーネントを使ってリクエストを投げてみます。作成するジョブは、特定のフォルダーに保存されたメッセージファイルを順に mattermost へ投稿することとします。

確認環境:

  • Talend Open Studio 6.3
  • mattermost 3.8.2

mattermost の設定

mattermost で Webhook が使えるようにメニューから「システムコンソール」を選択し、設定画面を表示します。

システムコンソールの表示

「カスタム統合機能」にある Webhook の設定を 有効 にします。

カスタム統合機能

Webhookに関する設定

  • 内向きのウェブフックを有効にする
  • 外向きのウェブフックを有効にする
  • カスタムスラッシュコマンドを有効にする

ウェブフックとスラッシュコマンドの権限に関する設定

  • 統合機能の管理を管理者のみに制限する

デフォルトでは Webhook を使って投稿すると投稿者名が Webhookを設定したユーザになるのですが、投稿に使用されたユーザー名やプロフィール画像を変更することを許可するよう設定できます。

  • 統合機能によるユーザー名の上書きを許可する
  • 統合機能によるプロフィール画像アイコンの上書きを許可する

今回は、「統合機能によるユーザー名の上書きを許可する」と「統合機能によるプロフィール画像アイコンの上書きを許可する」は無効にしています。

内向きのウェブフック(Incoming WebHooks)を設定

次に内向きのウェブフック(Incoming WebHooks)の設定をしていきます。

メニューから「統合機能」を選択し、ウェブフックの設定画面を表示します。

統合機能設定画面の表示

表示された「内向きのウェブフック」を選択します。

内向きのウェブフックの選択

「内向きのウェブフックを追加する」を選択します。

内向きのウェブフックを追加

表示名にWebhookの名前と説明に、この Webhook の説明を入力します。また、 Webhook を使って投稿したいチャンネルを選択します。

内向きのウェブフックの設定

保存ボタンをクリックすることで 内向きのウェブフック が作成されます。

作成された内向きのウェブフック

次は、ここで発行されたURLを使って Talend から投稿できるように設定していきます。

tHttpRequest コンポーネントを使ったジョブの作成

Talend のジョブを作成し、tFileList,tHttpRequest,tLogRow の3つのコンポーネントを配置します。

tFileList,tHttpRequest,tLogRowコンポーネントを配置

tFileList コンポーネントのディレクトリ項目に対象とするディレクトリ(例:C:\info)を設定し、ファイルマスクに *.json と設定します。 ファイルマスクは、無くても良いのですが雰囲気で設定してみました。

tFileListのディレクトリとファイルマスクを設定

次に tHttpRequest コンポーネントの設定をします。

URI 項目に mattermost で生成された内向きのウェブフック用 URL を設定します。 メソッドには、POSTを指定します。 次に「ファイルからパラメータを送信」項目で「Ctrlキー+スペースキー」(入力補完)を押し 表示されるリストの中から「tFileList_1_CURRENT_FILEPATH」を選択します。 「((String)globalMap.get(“tFileList_1_CURRENT_FILEPATH”))」と表示され、この関数により、パスを含むファイル名が取得されます。

tHttpRequestのURIとパラメータファイルを設定

以上で Talend のジョブができました。

例えば、tFileList コンポーネントで指定したフォルダーに server.json というファイルを次の内容で用意します。

payload={"text":"Hello, this is some text\nThis is more text. :tada:"}

ジョブを実行して、メッセージが投稿されれば成功です。

ジョブの実行結果

実際に使うには、メッセージファイルを削除したりエラー処理が必要となります。

ちなみに、tHttpRequest コンポーネントを実行すると成功した場合は、 ResponseContent カラムに「OK」がセットされ、失敗すると「400 Bad Request」がセットされます。