Chatworkがまた改変

仕事でChatwork(フリープラン)を使っているが、今回(2022年10月から)40日以前の履歴が見れないという改変が行われる。もともと使いやすいとは思ってなかったし、正直飽きもあるのでもう別のサービスに変わりたい。ただここ数年間のログは取っておきたい。会社の方針で使い続けることも考えられるので、その場合の対策も。

まず、これまでのログについては
ブラウザの開発機能でJavaScriptを使えばすべてのログ採取が可能。APIからだと仕様で100件しか取れない(何か方法があるのかもしれないが)。

今後の記録はGASでwebアプリを作成してチャットワークのwebhookに設定。
スプレッドシートに記録していく。

 function doPost(e) {//チャットワーク〇〇ルームに投稿/編集があったら実行→スプレッドシートに記録 CWのwebhookを使用 ルームIDはwebhookの設定で変更

   let json = JSON.parse(e.postData.contents);//CWに投稿されたデータ
   let accountId = json.webhook_event.account_id;//投稿したアカウントID
   let name = idToName(accountId);//関数idToNameでアカウントIDを名前に変換
   let messageId = json.webhook_event.message_id;//メッセージID
   let sendTime = json.webhook_event.send_time;//投稿時間(UNIXTIME)
   let updateTime = json.webhook_event.update_time;//編集時間
   let jsonBody = json.webhook_event.body;//投稿内容 

   let addData = [];//スプレッドシートに書き込む配列

   if(updateTime === 0){//新規投稿の場合updateTimeを空白にする
     sendTime = new Date(sendTime*1000);
     sendTime = _HHmm(sendTime);
     addData.push(messageId,name,jsonBody,sendTime,'');
   }
    if(sendTime === 0){//編集の場合sendTimeを空白にする
      updateTime = new Date(updateTime*1000);
      updateTime = _HHmm(updateTime);
      addData.push(messageId,name,jsonBody,'',updateTime);
    }

   let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
   sheet.appendRow(addData);//最終行に追加(一行ずつ、一次元配列)
  }

/*アカウントIDから名前を返す関数*/
function idToName(id){
let account = [
  {name:'Aさん',id:'777777'},
  {name:'Bさん',id:'222222'},
  {name:'Cさん',id:'4444444'},
  {name:'Dさん',id:'666666'}
];
//引数idでaccountオブジェクトをフィルタ、nameを取り出す
let name = account.filter(x => x.id ==id).map(x => x.name);
return name[0];
}

/* 時刻の表記をHH:mmに変更 */
function _HHmm(str){
  return Utilities.formatDate(str, 'JST', 'MM月dd日 HH:mm');
}

GASのdoPost()はコンテナバインドで作成しないとスプレッドシートが扱えないらしい。そうなると各チャットルームごとに別シートとスクリプトを用意する必要がある。やや煩雑だが、IMPORTRANGE関数などを使って一つにまとめることは可能。

これ、編集されたら前のを消すなんて面倒くさいことしてないから、ちょくちょく書き直す人の過程が全て記録されてしまう。なんか覗き見してるようで悪い気もして、今更記録してるって言いにくいな。