ChatworkのタスクをAsanaで管理したかった

## Chatworkの不満
コミュニケーションがチャットワークに依存しています（無料プランだけど...）
そしてチャットワークから他のチャットに移行できない最も重要な（個人的に）機能
タスク管理機能

~~見づらいし微妙すぎる（超失礼）タスク管理機能ですが~~
あのポチポチでタスク登録できるのが便利なんですよね

しかしチャットから発生していないタスクはAsanaで管理している
チャットで発生したタスクはチャットワークでタスク化
そしてAsanaに転記
...面倒くさい

私のググり力では良い連携機能を見つけられなかったので
いま手持ちの環境の中で一番サクッと手軽に作れそうなGASで連携してみることにしました。

全員分連携しようかと思ったけど面倒くさいので自分のチーム（2人だけど）だけ連携

##やりたいこと超概要
![無題のプレゼンテーション.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331573/e2675899-cb29-b489-5acd-fd4218a7b2c8.jpeg)

##前準備
ChatworkのAPIトークンと
監視したいChatworkのルームIDとアカウントID
AsanaのAPIトークンと
タスク追加したいところの
workspaceIDとprojectIDは事前に取得＆調べておきます。
##ソース
chatworkクライアントライブラリを使わせていただいています
https://github.com/cw-shibuya/chatwork-client-gas

```js:コード.gs
function myFunction() {
	var accounts = [
		{"mail": "ASNAMAIL1", "chatwork_token": "CHATWORKTOKEN2", "chatwork_aid": "CHATWORKAID1", "asana_token": "ASANATOKEN1"},
		{"mail": "ASANAMAIL2", "chatwork_token": "CHATWORKTOKEN2", "chatwork_aid": "CHATWORKAID2", "asana_token": "ASANATOKEN2"}
	];
	var chatwork_target_room_id = 'TARGETROOMID';

	var asana_api = "https://app.asana.com/api/1.0/tasks";
	var asana_workspace = "WORKSPACEID";
	var asana_project = "PROJECTID";

	for(var i=0; i<accounts.length; i++){
		var account = accounts[i];
      
		var client = ChatWorkClient.factory({token: account["chatwork_token"]});
		var tasks = client.getRoomTasks(chatwork_target_room_id , {account_id: account["chatwork_aid"], status: 'open'});

		if(tasks!=false){
			for(var j=0; j<tasks.length; j++){
				var task = tasks[j];
				var chatbody = task.body.replace(/\[\/?.+\]/, "");
              
				//Asanaにタスク登録
				var headers = {
					"Authorization": "Bearer " + account["asana_token"]
				};
				var email = account["mail"];
				var limit_time = new Date(task.limit_time * 1000);
				var due_on = Utilities.formatDate(limit_time,"JST","yyyy-MM-dd");
				var data = {
					"data": {
						"workspace": asana_workspace,
						"projects": [asana_project],
						"name": chatbody.slice(0, 100),
						"notes": "https://www.chatwork.com/#!rid"+chatwork_target_room_id+"-"+task.message_id+"\n---\n"+chatbody,
						"assignee": "me"
					}
				}
				if(task.limit_time != 0){
					data["data"]["due_on"] = due_on;
				}
				var json = JSON.stringify(data);
				var options = {
					"method": "post",
					"contentType": "application/json",
					"headers": headers,
					"payload": json,
					"muteHttpExceptions": true
				}
				var response = UrlFetchApp.fetch(asana_api, options);
				var jobj = JSON.parse(response);

				//chatworkTaskを完了にする
				var targetUrl = 'https://api.chatwork.com/v2/rooms/'+chatwork_target_room_id+'/tasks/'+task.task_id+'/status';
				var res = UrlFetchApp.fetch(targetUrl,
					{
						headers: {'X-ChatWorkToken': account["chatwork_token"]},
						method: 'put',
						payload: {'body': "done" },
						muteHttpExceptions : true,
					}
				);
			}
		}
	}
}
```
こいつを1分毎に実行するように設定します。

##やってみよう

4月30日までに焼き肉が食べたいタスクをチャットワークに登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331573/4f706dd6-3ace-b0e7-8351-28b5fc2a1e47.png)

---

勝手に完了します。
雑談ボットが無駄に反応していますが、これ以上の会話は成り立たないので無視します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331573/079ad43f-8b30-93c4-03bf-d3a981dba502.png)

---

Asanaをチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331573/7fef97c4-7938-f758-7967-8a908714e600.png)

---

詳細を見るとリンクも設定されていてなんかいい感じの雰囲気
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331573/b41c9053-c2a8-f057-e57f-55afc3901e92.png)

---

チャットワークは他の類似チャットサービスに比べて誰でもとっつきやすくライトに使える素晴らしいサービスだと超個人的に思っています。
でもタスク管理が不満でした。
でもちょっと忘れないようにくらいの用途だと便利、だから皆使う。でもタスクが増えてくると可視化しづらいので使いづらい。
これで不満がちょっと解消されたので、まだまだチャットワークに依存し続けます。