どんな事でもお気軽にお問い合わせください
0120-803-656
24時間受付いたします

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


お問い合わせ 採用情報 エンジニアブログ
ISO27001認証
Contact PageTop
株式会社ビヨンド

© beyond Co., Ltd. All rights reserved.