【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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
読み込み中...
0 票, 平均: 0.00 / 10
735
X facebook はてなブックマーク pocket
【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author