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パラメーターに入れて登録すると期限日もコピーできて便利だと思います。
是非、拡張してみてください。
0