TROCCOからChatworkに通知を飛ばしてみる

## はじめに
TROCCOはジョブの終了時などにSlackかEmail宛てであれば通知を飛ばすことができます。
ワークフロー定義とAPIを使えばそのほかのチャットサービスなどにも通知を送ることができますが、SlackやEmailでの通知と比べて設定がちょっと難しかったです。

今回は、タスクが終了したらChatworkに通知が飛ぶように設定してみたので
やり方を紹介していきます！

## 今回のゴール
タスクがすべて終了したらChatworkに自動でメッセージが飛ぶ状態にする

## TROCCOのワークフロー定義って何？？
TROCCOのワークフロー定義、データ転送やデータマートなど複数のタスクの順序と組み合わせを設定することで、一連のフローを作成する機能です。

（詳しくはヘルプドキュメントをご参考ください！）

https://documents.trocco.io/docs/about-workflow

タスクとして、**HTTPリクエスト**が設定できるので
これを利用してAPIを実行していきます。


## ChatworkのAPIを確認する
今回使うAPIは以下のものです。リクエストを送ると指定したメッセージが送信できます。

https://developer.chatwork.com/reference/post-rooms-room_id-messages

また、APIのリクエストを投げるときに必要な設定は下記を参照しました。

https://developer.chatwork.com/docs/endpoints

そのほか、必要なことは適宜調べながら設定していきました。

## ワークフロー定義を設定してみる
それではワークフロー定義の設定をしていきます。

TROCCOのトップ画面です。ここからワークフロー定義ができます。

![スクリーンショット 2024-11-19 143758.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/5b253b32-f227-c984-59c1-00c64ceaf05d.png)

ここでは特に難しい設定はありません。
設定の名前や、タスクの実行に関する制限などを指定します。設定できたら **保存** します

![スクリーンショット 2024-11-19 144241.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/b66b0220-bfb3-9f6c-d363-3d2df9d39dd5.png)

遷移後の画面はこんな感じです。

![スクリーンショット 2024-11-19 165318.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/f54302b4-3f32-6368-4ba7-7c811f380c18.png)

左側の **タスク追加** から、ワークフローに組み込みたいタスクをクリックします。
今回は、以下をワークフローに組み込みます。
- TROCCO転送ジョブ（設定作成済みのもの）
- HTTPリクエスト

:::note info
TROCCO転送ジョブ（データ転送設定）の作成方法は下記もご参考ください！
https://qiita.com/khpkymgc/items/4af6b46a9dd0260ca0b8
https://qiita.com/khpkymgc/items/70a817ea2e8732e5a577
:::

**TROCCO転送ジョブ** をクリックすると、作成済みの設定が出てくるので今回使うものを指定して **追加** します。

![スクリーンショット 2024-11-19 165604.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/ddd8dd0d-7fbe-46ca-4208-ef55cdbe468a.png)

![スクリーンショット 2024-11-19 165804.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/a6e5b69b-69ab-62e0-2690-474382b59472.png)


## HTTPリクエストを設定してみる
APIの設定をしていきます。

**HTTPリクエスト** をクリックすると、こんな画面に遷移します。

![スクリーンショット 2024-11-19 170200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/6a4bcd70-e5d1-04d5-3410-608a151591ea.png)

Chatworkのサポートサイトを見ながら設定していきます。
**URL** と **HTTPメソッド** はここを見ればよさそうです。
![スクリーンショット 2024-11-19 170448-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/c2d1c292-7c01-bc06-82ec-c2c8b3c89698.png)

:::note info
`{room_id}`は、通知を送りたいルームを開いたときのURL末尾の数字を指定します
https://help.chatwork.com/hc/ja/articles/360000142942-%E3%83%AB%E3%83%BC%E3%83%A0ID%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B
:::

**POST** を指定すると、入力項目が増えます。
メッセージ本文や、既読/未読の設定はそこに入れていきます。

Chatworkのサポートサイトでは、入力欄に送信したいメッセージなどを入れることでHTTPリクエストの例文を出してくれたので参考にしていきます。

:::note info
`Header`には **APIトークン** を入れます。確認方法は下記をご参考ください
https://developer.chatwork.com/docs/getting-started
:::

必要事項を入力して、 **Try it!** を押したところ成功しました！
この値を使って設定すればよさそう…?

![スクリーンショット 2024-11-19 172214.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/1f543b6f-f02f-0777-2805-cad220c98002.png)

ということで、TROCCO側に値を入れます

![スクリーンショット 2024-11-19 172830.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/d701307b-c0fe-d57e-1fd0-8daed2c052c1.png)

::: note warn
ちなみに、HTTPリクエストボディを上記にすると失敗します。
この後エラーの解消をやっていくので、一緒に設定している方はご注意ください！
:::


他に、HTTPヘッダとして下記を設定する必要があるみたいです。
 - x-chatworktoken: （APIトークン）
 - content-type: application/x-www-form-urlencoded

![スクリーンショット 2024-11-19 173005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/e9043906-8314-3d14-a4f7-57afd72a9ce7.png)

後は入れる値がなさそうなので**保存**します。

下の方にうっすらHTTPリクエストの設定が追加されました。
![スクリーンショット 2024-11-19 174843.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/3b6c5960-d982-cd15-a41d-e5afac048a7d.png)

TROCCO転送ジョブ → HTTPリクエスト の順番で動かしたいので、2つをつなぎます。
HTTPリクエストをドラッグで適当な位置に移動させて、赤枠と赤枠をつなぐように左から右に引っ張ってつなぎます。

![スクリーンショット 2024-11-19 174909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/c9b9c435-efd4-8ce7-62ac-306f816bc025.png)

**自動レイアウト** を押すといい感じに配置しなおしてくれるのでやっておきます
きれいになったら、右上の **保存** を押します

![スクリーンショット 2024-11-19 180053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/7df86b41-0bc8-577a-a4b0-8e78dde0facf.png)

## 実行してみる
実際にワークフローを実行してみます。
**実行** を押すと即時でタスクがスタートします

![スクリーンショット 2024-11-19 180250.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/a52820db-f4eb-7721-7ba7-f99f3a51646f.png)

現在の実行状況がほぼリアルタイムで確認できます

![スクリーンショット 2024-11-19 180429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/f6ebb1f3-8cfe-552b-c1d0-518afb80fd3e.png)

TROCCO転送ジョブは成功したようですが、HTTPリクエストは失敗したみたいです。。。

![スクリーンショット 2024-11-19 180517.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/2aa97f1e-0ebe-6bf3-50bd-1c04a60c9b45.png)

## エラーを解消していく
エラー内容を確認して、HTTPリクエストが成功するよう設定を変更していきます。
エラーが発生したタスクをクリックします

![スクリーンショット 2024-11-19 180517.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/1a134903-26ed-6456-00f9-73e76a57da57.png)

そうすると、こんな感じでエラー内容が確認できます。

![スクリーンショット 2024-11-19 180833.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/99be9064-7934-6e0e-ff1d-af856d3ffe5f.png)

今回のエラー内容は下記でした
```
 [error]: Http Status is not success code. actual http code is 400. http body is {&quot;errors&quot;:[&quot;Parameter &#39;body&#39; is required&quot;]
 ```

 **body** と言われているので、**HTTPリクエストボディ** に入れた内容に問題がありそうです。
 何がダメなんだろう～～といろいろ調べてみました。
 結果、HTTPヘッダに **content-type: application/x-www-form-urlencoded** を設定したのに **HTTPリクエストボディ** がその形になっていなかったことが原因みたいです...

以下のサイトを参考に直してみました。

https://apidog.com/jp/blog/x-www-form-urlencoded-vs-json/

**content-type: application/x-www-form-urlencoded** の形にするには、下記を満たす必要があるようです

 - キー（項目）と値は **=** でつなぐ
 - 要素（キーと値）は **URLエンコード** する
 - 要素と要素は **&** でつなぐ

反映させると、こうなります

![スクリーンショット 2024-11-19 184737.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/7eaa177c-33a2-437e-fbf2-939750a48d62.png)


修正後の設定でもう一回試してみます

![スクリーンショット 2024-11-19 184513.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/0682a784-667b-96f5-2811-e0bd55a9d6bd.png)

今度は成功しました！！

## Chatworkで通知を確認する
Chatwork側でもちゃんとメッセージが来ているか確認します

設定どおり未読の状態でメッセージが届いていました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/60d5a5c9-5578-dcc2-470a-263e5ae23da0.png)

:::note info
今回は単純にメッセージのみを送るように設定しました。
下記のようにメッセージ内にワークフロー定義のURLを含めることで、通知から簡単に対象のワークフローを確認できるようになって便利なので、ぜひお試しください

![スクリーンショット 2024-11-19 192524.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/e89e6afb-b26a-a8f5-46f3-efc6671c233e.png)
:::

設定はこれで終わりです！お疲れ様でした

## おわりに
Chatworkのサポートサイトだと、URLエンコードとかしなくても成功したので「Content-type指定したら自動で変換してくれるんだ！！！！」と思い込んだのが今回の敗因でした。

複数のサービスを連携させて使うときは、あんまり詳細な設定方法の解説が見つからないことがあり設定が難しく思うことは多いです。でも、できたら便利だから設定したい。。
**エラー内容からどの辺が問題なのかあたりをつけてみる** 、 **入力するよう指示があったからとりあえず入れた項目の影響を疑ってみる** といった感じで少しずつ原因をつぶしていくのが個人的おすすめです。

今回の設定の大部分はコピペでどうにかなっています。一字一句ミスがないか見直さなくてよかったのはChatworkのサポートサイトとTROCCOのGUIに感謝です！

他にも便利なことができたら記事にしていこうと思います。