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


Chatworkの不満

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

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

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

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

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

やりたいこと超概要

前準備

ChatworkのAPIトークンと
監視したいChatworkのルームIDとアカウントID
AsanaのAPIトークンと
タスク追加したいところの
workspaceIDとprojectIDは事前に取得&調べておきます。

ソース

chatworkクライアントライブラリを使わせていただいています
https://github.com/cw-shibuya/chatwork-client-gas

コード.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日までに焼き肉が食べたいタスクをチャットワークに登録


勝手に完了します。
雑談ボットが無駄に反応していますが、これ以上の会話は成り立たないので無視します


Asanaをチェック


詳細を見るとリンクも設定されていてなんかいい感じの雰囲気


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