見出し画像

チャネルトークとほかのツールと連携したい(スニペット・asana編) その4

続くかわからない詐欺をしながら記事の書き方もろくに考えず思うままに書いてたところ、ついにその4に到達しました! こんにちはtmdです。
流石に1〜4までしかないのに安定感のない書き方なので後で直したいですね。

この記事シリーズの目標

・チャネルトークで気になるチャットを見つけた時に、スニペットにあるボタンを押したらasanaにタスクが作成されるようにしたい。
・すでにasanaにタスクがある場合はチャネルトークのスニペットに表示させたい。

今回の目標

asanaに該当タスクがあったら何個でも取ってきて表示する。

初回について

こちらの記事を参考にしてください。

コードのサンプル

function doPost(e) {
  var snippetData = JSON.parse(e.postData.getDataAsString());
  var asanaData = getAsanaTasks(snippetData["user"]["id"]);

 var data2 = [{
  "id": "title",
   "type": "text",
   "text": snippetData["user"]["name"],
  "style": "h1"
 }];

 for (i=0;i<asanaData.length;i++){
  data2.push({
   "id": "asanaData"+i,
   "type": "text",
   "text": asanaData[i],
   "style": "h3"
  });
 };

  var data ={
    "snippet": {
     "version": "v0",
      "layout":data2,
     "params": {
        "customerKey": "channelIO"
     }
    }
  };
  return ContentService.createTextOutput(JSON.stringify(data))
    .setMimeType(ContentService.MimeType.JSON);
};

function getAsanaTasks(userID1) {
    var options = {
    'method': 'get',
    'contentType': 'application/json',
    'headers': {
      'Authorizatio': 'Bearer ' + 【アクセストークン】
    },
  }
 var response = UrlFetchApp.fetch('https://app.asana.com/api/1.0/projects/【プロジェクトID】/tasks?opt_fields=notes,permalink_url', options);
  var result = JSON.parse(response);
  var list = [];  
  if(result.data){
    for(var i = 0; i < result.data.length; i++){
      var asanaNotesData= result.data[i]["notes"].replace(/\r?\n/g,",");
      var asanaNotesDataSplit= asanaNotesData.split(",");
        if((asanaNotesDataSplit[0])==userID1){
         list.push(result.data[i]["permalink_url"]);
        };
    };
  };
  return list;
};

コードの説明

var data のあたりがガラッと変わりました。
layoutの中は直接記載せず、その上でfor文を入れています。

まずは固定で入れておくものを指定して

 var data2 = [{
  "id": "title",
   "type": "text",
   "text": snippetData["user"]["name"],
  "style": "h1"
 }];

情報量が変わるものをfor文で必要な回数回して、都度pushしていきます。
この時idが同じだとよろしくないので都度idが変わるようにしましょう。

 for (i=0;i<asanaData.length;i++){
  data2.push({
   "id": "asanaData"+i,
   "type": "text",
   "text": asanaData[i],
   "style": "h3"
  });
 };

list=""だったところを配列にします。

 var list = [];  

該当するタスクの情報も1つじゃなくなるのでpushで追加する形に変更です。

 list.push(result.data[i]["permalink_url"]);

さて、今回もこんな感じで動くかなって思います。
次こそはasanaを作成するぞー!


この記事が気に入ったらサポートをしてみませんか?