お役立ち情報&資料コラム記事

タスクワールドがマイクロソフト ワークフローとの連携利用でさらに便利に!<シリーズ 5 / 5>

〜Chatwork と Microsoft Flow で タスク一覧を取得する bot を作ってみましょう!〜

Microsoft Flow 連携 第五弾!

Chatwork で対応中タスク一覧を取得する bot を作成しましょう。

今回作成するフローの全体は下図のようになります。配列処理や分岐が重なるため複雑そうに見えますね。全体の流れとしては、Chatworkで特定のコマンドを入力すると Microsoft Flow で特定のプロジェクトのタスク情報を取得し、タスク名の一覧を作成して Chatwork に投稿するというものです。

①~⑥の処理はそれぞれ以下のようになります。

  • ① Chatwork の webhook から HTTP 要求を受信(トリガー)
  • ② フロー処理で使用する変数を初期化
  • ③ Chatwork に入力されたコマンドを判定
  • ④ タスクワールドの API でタスクリストを取得
  • ⑤④ のタスクIDからタスクを1件ずつ API で取得し、対応中タスクのリストを作成
  • ⑥ 処理結果のメッセージを Chatwork に投稿。

※本稿に掲載されているインターフェース画像は記事がリリースされた時点のものであり、現在のものとは完全に一致しない場合があります。

事前準備

タスクワールドの API パラメータで使用するデータを確認しておきましょう。第1回を参考にして、タスクワールドの以下のデータを取得してください。

  • アクセストークン
  • ユーザー ID
  • スペース ID
  • プロジェクト ID

Chatwork は以下2つのデータを用意しておいてください。今回はwebhookの他に API でメッセージの投稿も行うため、Chatwork のトークンが必要になります。

  • ルームID(チャットルームURLの「#!rid」以降のID。今回はマイチャットを使用すると良いでしょう)
  • API Token(チャット画面右上のプロフィールから「API設定」を開いて発行)

カスタムコネクタの作成

Microsoft Flow にタスクワールド API のカスタムコネクタを登録します。第2回の手順を参考にして以下の API を登録して下さい。過去に作成したカスタムコネクタがある場合はそのまま使用できます。

  • tasklist.get-all(タスクリスト取得)
  • task.get(タスク取得)

フローの作成 ①Chatwork Webhook 受信トリガー

それではフローを作成しましょう。今回はステップ追加や条件分岐など基本的な操作についての説明を省略しますので、操作に迷ったら前回記事を参考にしてください。

最初に Chatwork の webhook からメッセージを受信するトリガーを作成します。作成手順は前回記事の「フローの作成①」を参考にして下さい。フローを一度保存すると HTTP POST の URL が設定されるので、URL を ChatworkのWebhook に設定しましょう。

フローの作成 ②変数の初期化

フロー処理で使用する変数を初期化します。レスポンスで送信するタスク名一覧と、処理中にタスク ID を格納する配列を初期化しておきます。

フローの作成 ③Chatwork に入力されたコマンドを判定

条件分岐のステップを追加し、①で受信したリクエストの body で Chatwork に入力されたコマンドを確認します。今回はChatworkで「tw task list」と入力されていたら処理を実行するように設定しています。

条件分岐「いいえの場合」は以降の処理を行わないので、アクション「終了」でフロー処理を終了させてください。この場合でも正常終了なので状態(ステータス)は「成功」にしましょう。

フローの作成 ④タスクワールドの API でタスクリストを取得

条件分岐「はいの場合」の中に後続処理を追加します。タスクワールドのカスタムコネクタ「tasklist.get-all」を追加して、リクエストパラメータに各 ID の値を設定しましょう。

次に繰り返し処理(「制御-Apply to each」アクション)を追加し、API レスポンスの「tasklists」からタスクリスト1件分ずつ処理を繰り返すように設定します。

タスクリストはそれぞれ「is_deleted」という削除フラグを持っているので、これをチェックして削除済みかどうか判定し、未削除の場合は「tasks」のタスク ID を配列変数に格納します。

フローの作成 ⑤タスクを1件ずつ取得して、対応中のタスクのリストを作成

「変数の設定」アクションの下に繰り返し処理を追加し、④で作成した「タスクID」配列の一件分ずつループしてタスク情報を取得するようにカスタムコネクタの「task.get」を設定します。

「task.get」の下にさらに繰り返し処理と分岐を追加します。繰り返し処理でタスクのメンバーリストをチェックし、自分自身(user_id)が担当にアサインされているか(is_assignee)を確認します。また、タスク自体が削除(is_deleted)または完了(completed_date)していないかも判定しましょう。

条件に合致したタスクのタスク名をレスポンス文字列に追記します。「はいの場合」に「文字列変数に追加」アクションを追加して、初期化済み変数「レスポンス」の「値」に以下の式を設定してください。

concat(' [',body('taskworld_task.get')?['task']?['title'],'] ')

フローの作成 ⑥処理結果のメッセージを Chatwork に投稿

最後に、⑤で作成した対応中タスクの一覧を Chatwork に投稿します。「HTTP」アクションを追加して以下のように設定してください。

  • 方法:POST
  • URI:https://api.chatwork.com/v2/rooms/{ルームID}/messages
  • ヘッダー「X-ChatWorkToken」:Chatwork の API Token
  • ヘッダー「Content-type」:application/x-www-form-urlencoded
  • 本文:式「concat('body=',encodeUriComponent(variables('レスポンス')))」

以上で Chatwork との連携フロー設定は終了です。Chatwork で「tw task list」と入力して、タスクワールドの対応中タスク一覧が表示されれば成功です!

まとめ

いかがでしたでしょうか?分岐や配列の処理が増えるとフロー構成が複雑になりますが、その分応用範囲もぐっと広がりますね。タスク判定を拡張すれば、期限切れタスクを確認したり、Chatwork にタスクをコピーしたりできるようになります。みなさんもAPIを活用して、いろいろな使い方を試してみてください。

簡単サインアップ、すぐに全機能を使えます。