はじめに
TROCCOはジョブの終了時などにSlackかEmail宛てであれば通知を飛ばすことができます。
ワークフロー定義とAPIを使えばそのほかのチャットサービスなどにも通知を送ることができますが、SlackやEmailでの通知と比べて設定がちょっと難しかったです。
今回は、タスクが終了したらChatworkに通知が飛ぶように設定してみたので
やり方を紹介していきます!
今回のゴール
タスクがすべて終了したらChatworkに自動でメッセージが飛ぶ状態にする
TROCCOのワークフロー定義って何??
TROCCOのワークフロー定義、データ転送やデータマートなど複数のタスクの順序と組み合わせを設定することで、一連のフローを作成する機能です。
(詳しくはヘルプドキュメントをご参考ください!)
タスクとして、HTTPリクエストが設定できるので
これを利用してAPIを実行していきます。
ChatworkのAPIを確認する
今回使うAPIは以下のものです。リクエストを送ると指定したメッセージが送信できます。
また、APIのリクエストを投げるときに必要な設定は下記を参照しました。
そのほか、必要なことは適宜調べながら設定していきました。
ワークフロー定義を設定してみる
それではワークフロー定義の設定をしていきます。
TROCCOのトップ画面です。ここからワークフロー定義ができます。
ここでは特に難しい設定はありません。
設定の名前や、タスクの実行に関する制限などを指定します。設定できたら 保存 します
遷移後の画面はこんな感じです。
左側の タスク追加 から、ワークフローに組み込みたいタスクをクリックします。
今回は、以下をワークフローに組み込みます。
- TROCCO転送ジョブ(設定作成済みのもの)
- HTTPリクエスト
TROCCO転送ジョブ(データ転送設定)の作成方法は下記もご参考ください!
https://qiita.com/khpkymgc/items/4af6b46a9dd0260ca0b8
https://qiita.com/khpkymgc/items/70a817ea2e8732e5a577
TROCCO転送ジョブ をクリックすると、作成済みの設定が出てくるので今回使うものを指定して 追加 します。
HTTPリクエストを設定してみる
APIの設定をしていきます。
HTTPリクエスト をクリックすると、こんな画面に遷移します。
Chatworkのサポートサイトを見ながら設定していきます。
URL と HTTPメソッド はここを見ればよさそうです。
{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リクエストの例文を出してくれたので参考にしていきます。
Header
には APIトークン を入れます。確認方法は下記をご参考ください
https://developer.chatwork.com/docs/getting-started
必要事項を入力して、 Try it! を押したところ成功しました!
この値を使って設定すればよさそう…?
ということで、TROCCO側に値を入れます
ちなみに、HTTPリクエストボディを上記にすると失敗します。
この後エラーの解消をやっていくので、一緒に設定している方はご注意ください!
他に、HTTPヘッダとして下記を設定する必要があるみたいです。
- x-chatworktoken: (APIトークン)
- content-type: application/x-www-form-urlencoded
後は入れる値がなさそうなので保存します。
TROCCO転送ジョブ → HTTPリクエスト の順番で動かしたいので、2つをつなぎます。
HTTPリクエストをドラッグで適当な位置に移動させて、赤枠と赤枠をつなぐように左から右に引っ張ってつなぎます。
自動レイアウト を押すといい感じに配置しなおしてくれるのでやっておきます
きれいになったら、右上の 保存 を押します
実行してみる
実際にワークフローを実行してみます。
実行 を押すと即時でタスクがスタートします
現在の実行状況がほぼリアルタイムで確認できます
TROCCO転送ジョブは成功したようですが、HTTPリクエストは失敗したみたいです。。。
エラーを解消していく
エラー内容を確認して、HTTPリクエストが成功するよう設定を変更していきます。
エラーが発生したタスクをクリックします
そうすると、こんな感じでエラー内容が確認できます。
今回のエラー内容は下記でした
[error]: Http Status is not success code. actual http code is 400. http body is {"errors":["Parameter 'body' is required"]
body と言われているので、HTTPリクエストボディ に入れた内容に問題がありそうです。
何がダメなんだろう~~といろいろ調べてみました。
結果、HTTPヘッダに content-type: application/x-www-form-urlencoded を設定したのに HTTPリクエストボディ がその形になっていなかったことが原因みたいです...
以下のサイトを参考に直してみました。
content-type: application/x-www-form-urlencoded の形にするには、下記を満たす必要があるようです
- キー(項目)と値は = でつなぐ
- 要素(キーと値)は URLエンコード する
- 要素と要素は & でつなぐ
反映させると、こうなります
修正後の設定でもう一回試してみます
今度は成功しました!!
Chatworkで通知を確認する
Chatwork側でもちゃんとメッセージが来ているか確認します
設定どおり未読の状態でメッセージが届いていました!
設定はこれで終わりです!お疲れ様でした
おわりに
Chatworkのサポートサイトだと、URLエンコードとかしなくても成功したので「Content-type指定したら自動で変換してくれるんだ!!!!」と思い込んだのが今回の敗因でした。
複数のサービスを連携させて使うときは、あんまり詳細な設定方法の解説が見つからないことがあり設定が難しく思うことは多いです。でも、できたら便利だから設定したい。。
エラー内容からどの辺が問題なのかあたりをつけてみる 、 入力するよう指示があったからとりあえず入れた項目の影響を疑ってみる といった感じで少しずつ原因をつぶしていくのが個人的おすすめです。
今回の設定の大部分はコピペでどうにかなっています。一字一句ミスがないか見直さなくてよかったのはChatworkのサポートサイトとTROCCOのGUIに感謝です!
他にも便利なことができたら記事にしていこうと思います。