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形式でタスク情報が返ってきます。
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', //未完了のタスク ); $url = 'https://api.chatwork.com/v1/rooms/'.$room_id.'/tasks?'.http_build_query($params); $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が低
- 件名はご自由
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 であることに必要性はありません。やってみただけです。
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パラメーターに入れて登録すると期限日もコピーできて便利だと思います。
是非、拡張してみてください。