ChatWorkからBacklogへタスクのコピー
こんにちは、Webシステム開発課の後藤です。
弊社ではChatWorkを使用していますがChatWork上でタスクを振られるも、
数が多いと流れてしまったり、優先順位や期限等が判り辛かったりすることがあると思われます。
一方 Backlog ではガントチャートを用いてタスク管理ができるので、期限や重要度等が解りやすいです。
というわけで、ChatWork から Backlog へタスクを移す処理を書いてみましたので、
ChatWork API や Backlog API を使おうとしている方の参考になったらなと思います。
関数ごとに紹介します。
1. ChatWork からタスクを取得する
ChatWorkからタスクを取得するには情報が4つ必要になります。
- タスクを振られた人のアカウントID
- タスクを振った人のアカウントID
- タスクを振ったチャットルームのID
- 完了済みのタスクか未完了のタスクかの選択
これらの情報はそれぞれ下記から得られることができます。
- タスクを振られた人へのTo: の後ろの数値
- タスクを振った人へのTo: の後ろの数値
- https://www.chatwork.com/#!ridここの数値(ridは不要)
- 完了済み done : 未完了 open
これらをURLへGETのパラメーターとして付属させてリクエストすることで、json形式でタスク情報が返ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function get_tasks_from_cw( $account_id , $assigned_by_account_id , $room_id ){ $params = array ( 'account_id' = $account_id , //タスクを振られた人のID 'assigned_by_account_id' = $assigned_by_account_id , //タスクを振った人のID 'status' = 'open' , //未完了のタスク ); $headers = array ( 'http' => array ( 'method' = 'GET' , 'header' = implode( "rn" , $headers ), ) ); $json_cw_tasks = file_get_contents ( $url , false, stream_context_create( $context )); return json_decode( $json_cw_tasks ); } |
2. Backlog へ課題を登録する
Backlog へ登録するには必須となる以下の項目が存在します。
- 登録先プロジェクトのID
- 課題の種類(issue type)のID
- 優先度
- 課題の件名
これらは下記の様に設定します。
-
- 登録先プロジェクトのIDはそのプロジェクトの「プロジェクト設定」ページのURLから判断
https://byd.backlog.jp/EditProject.action?project.id=ここの数値
-
- 課題の種類は 2-a. 参照
- 優先度は2が高、3が中、4が低
- 件名はご自由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function add_task_to_backlog( $task , $project_id , $backlog_api_key ){ $issue_type_id = get_issue_type_id_of_tasks( $project_id ); //タスクのissueTypeIdを取得 mb_regex_encoding( 'UTF-8' ); $params = array ( 'projectId' = $project_id , 'issueTypeId' = $issue_type_id , 'priorityId' = 3, //優先度 中 'summary' = 'ChatWork からのタスク' , 'description' = $task [ 'body' ], //登録する課題の内容(CWから取得したタスクの文面(body)) ); $url = 'https://space_name.backlog.jp/api/v2/issues?apiKey=' . $backlog_api_key '&' .http_build_query( $params , '&' ); $header = array ( 'Content-Type:application/x-www-form-urlencoded' ); $context = array ( 'http' => array ( 'method' = 'POST' , 'header' = $header , 'ignore_errors' = true, ) ); file_get_contents ( $url , false, stream_context_create( $context )); } |
2-a. 課題の種類が「タスク」のissueTypeId を取得する
課題の種別に関してはプロジェクトに拠るのでAPIからそのプロジェクトでのissueTypeIdを取得します。
今回は「タスク」という種別のissueTypeidを取得することにします。
※ここだけ curl であることに必要性はありません。やってみただけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | function get_issue_type_id_of_tasks( $project_id , $backlog_api_key ){ $param = array ( 'apiKey' = $backlog_api_key ); $url = 'https://space_name.backlog.jp/api/v2/projects/' . $project_id . '/issueTypes?' .http_build_query( $param ); $ch = curl_init(); $options = array ( CURLOPT_URL = $url , CURLOPT_HTTPGET = true, CURLOPT_HTTPHEADER = array ( 'HTTP/1.0' , 'Content-Type: application/x-www-form-urlencoded' , ), CURLOPT_RETURNTRANSFER = true, ); curl_setopt_array( $ch , $options ); $issue_type_json = curl_exec( $ch ); $issue_types = json_decode( $issue_type_json ); //取得した課題の種別が「タスク」のIDを返り値とする。 foreach ( $issue_types as $issue_type ) { if ( $issue_type ->name == 'タスク' ){ $issu_type = $issue_type ->id; } } return $issu_type ; } |
ざっくりこんな感じです。
ChatWorkのタスクはlimit_timeという要素からtimestampで期限日が取得できるので、
backlog登録時に変換してdueDateパラメーターに入れて登録すると期限日もコピーできて便利だと思います。
是非、拡張してみてください。