ChatWorkのやりとりをGASでスプレッドシートに書き出す流れ。

  • URLをコピーしました!

ChatWorkのやりとりのデータをスプレッドシートに書き出して、履歴として貯めていくことができます。

その設定の流れをまとめてみました。

目次

ChatWorkの無料プランだと40日前まで

お客さまとのやりとりをするツールの1つで、ChatWorkを使っています。

ChatWorkというのはビジネス版のLINEのようなイメージ。

LINEのようにやりとりの履歴を残せますし、Dropboxのリンクを貼ってファイルを共有したりと便利です。

ただ、無料版の場合にはちょっといただけない仕様になっています。直前40日までのやりとりしか確認することができないのです。

過去を振り返らないというのも1つの考えですが、やはりお互いに確認ができることで「前のやりとりを見ることができなくて…」というわずらわしさをなくせます。

ただ、お伝えしたように無料版のChatWorkでは40日より前のやりとりを確認することはできません。

そこでChatWorkのAPIを利用します。APIを利用することでGoogleスプレッドシートに書き込んで履歴を残すことができます。

会計ソフトと同様に営業の方向性は好みではないのですが、お客さまも使っているケースが多く消去法で使っています。

必要な材料を集める

今回のしくみは次のように設定しています。

・GASでChatWorkのやりとりをスプレッドシートに書き出す
・定期的にデータの更新をチェックする
・追加のやりとりだけを最下行に書き込む(ブログのような積み上げのイメージ)

ということで、スプレッドシートにChatWorkのやりとりを残すことができます。

ChatWorkのやりとりをスプレッドシートに書き出すには、いくつか情報が必要です。

ChatWorkのAPI連携トークン

ChatWorkのデータを書き出すのに、APIトークンをとりましょう。

Chatwork画面の右上にある [利用者名] 以下のメニューにある [サービス連携] から、「APIトークン発行ページ」にアクセスします。

表示されているAPIトークンをコピーしましょう。スプレッドシートでGAS(Google App Script)を書くときに使います。

トークルームID

ChatWorkのやりとりをしている場所のルームIDが必要です。ルームIDはやりとりしている場所のURLに表示されている「/#!rid」のあとの番号。

たとえば、「!rid123456789」とあれば、「123456789」がルームIDになります。


スプレッドシートID

書き出し先のスプレッドシートのIDが必要になります。空白のスプレッドシートをクリックして、新規ファイルをつくります。

アドレスバーにある「d/」のあとから「/edit」の前までがスプレッドシートのIDです。

「https://docs.google.com/spreadsheets/d/123456789/edit」なら「123456789」がIDです。

この3つのIDをもとにスプレッドシートでGASを書いていきます。

ChatWorkのやりとりをスプレッドシートに書き出すGAS

まずはスプレッドシートを準備します。A列から順に「日時」、「応答した人」、「メッセージ」、「メッセージID」と4つの項目を用意して、シート名はここでは「Message」としています。

Screenshot

スプレッドシートの「拡張機能」から「AppScript」をクリックし、

ここにGAS(Google App Script)を書きます。

次のように書きました。

GASのコードはこちらから確認できます。(クリック)
// ChatWorkのAPIトークン(じぶんのAPIトークンを設定)
var CHATWORK_API_TOKEN = 'じぶんのAPIトークンID';

// 書き出したいChatWork部屋のID
var ROOM_ID = 'ルームID';

// スプレッドシートの指定(シート名とスプレッドシートIDを指定)
var SHEET_NAME = 'Messages'; // メッセージを保存するシート名
var SPREADSHEET_ID = 'スプレッドシートのID'; // スプレッドシートのID

// ChatWorkのメッセージを抽出してスプレッドシートに保存
function getChatWorkMessages() {
  // スプレッドシートの指定したシートを取得
  var sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME);

  // シートの最後の行を見つける(最新のメッセージIDを確認するため)
  var lastRow = sheet.getLastRow();
  var lastMessageId = 0; // 初期値として0を設定(メッセージがない場合)

  // データがある場合のみ、最後のメッセージIDを抽出(4列目に保存されている想定)
  if (lastRow > 1) { // 1行目はヘッダー行として無視
    var lastMessageCell = sheet.getRange(lastRow, 4).getValue(); // 4列目の値を抽出
    if (lastMessageCell) {
      lastMessageId = lastMessageCell; // 最後のメッセージIDを取得
    }
  }

  // ChatWork APIからメッセージを引用するためのURLを作成
  var url = 'https://api.chatwork.com/v2/rooms/' + ROOM_ID + '/messages?force=1';
  if (lastMessageId !== 0) {
    // 最後のメッセージID以降のメッセージのみ引用する場合
    url += '&last_message_id=' + lastMessageId;
  }

  // APIリクエストのオプション(ヘッダーにAPIトークンを含む)
  var options = {
    'method': 'get',
    'headers': {
      'X-ChatWorkToken': CHATWORK_API_TOKEN
    }
  };

  // ChatWork APIにリクエストを送信、反応を見る
  var response = UrlFetchApp.fetch(url, options);
  var messages = JSON.parse(response.getContentText()); // レスポンスをJSON形式に変換

  // 新しいメッセージがない場合の処理
  if (messages.length === 0) {
    Logger.log("新しいメッセージはありません。");
    return; // 関数の実行を終了
  }

  // 既存のメッセージIDを全て抽出して列に保存(2行目以降の4列目)
  var existingMessages = [];
  if (lastRow > 1) {
    existingMessages = sheet.getRange(2, 4, lastRow - 1).getValues().flat(); // フラット化して配列に変換
  }

  // 新しいメッセージを1件ずつ処理
  messages.forEach(function(message) {
    var messageDate = new Date(message.send_time * 1000); // Unixタイムスタンプを日時に変換
    var messageContent = message.body; // メッセージ本文
    var senderName = message.account.name; // 送信者の名前

    // 既存のメッセージIDと重複していない場合のみ、シートに追加
    if (!existingMessages.includes(message.message_id)) {
      sheet.appendRow([messageDate, senderName, messageContent, message.message_id]); // 新しい行にデータを追加
    }
  });
}

このように設定しておき、実行をすると

この画面が出たら左下の「高度な…」をクリックし、

「許可する」をクリックすると、

スプレッドシートに40日前から書き出しが始まります。

というと、「やっぱり40日前からしか書き出せないのか」と思われるかもしれません。

それを避けるために、

・定期的にチェック
・新規のやりとりがあれば一番下の行に追加する

という設定をしているので、一番上には書き出しをはじめた時点のデータが残ることになります。

トリガーで定期的に更新をチェック

定期的にチェックするしくみには、GASの「トリガー」を使います。

左のメニューの時計のアイコンをクリックし、「新しいトリガーを作成します」をクリック。

データの更新をいつチェックするかを設定しておきます。

「1件のトリガーを設定しています」の状態になっていれば大丈夫です。

あとは、定期的にGASが動いて、やりとりのデータが更新されているという流れです。

ここで「あれ?」と思われた方もいらっしゃるかもしれません。

スプレッドシートのリンクを共有すれば、無料プランでも過去のやりとりを確認できることになります。ということは…。

…なのですが、このChatWorkというのは、ダウングレードができない仕様になっていて、有料プランを解約しにくくしているのが実にイケてません。

アカウントをご解約のうえ新規登録いただくか、別アカウントで新規登録してください。

となっていますので。イチからやり直すかどうか。何とももやもやする仕様になっています。さいわい、お客さまは無料プランですけどね。

ただ、こうした設定をすることは、プログラミングやデータ連携のしくみを知るのにはいい勉強になります。ChatGPTに聞きながらやってみるのもおすすめです。

ということで、ChatWorkを利用されている方の参考になればうれしいです。



【編集後記】
昨日は打合せ。その後はディーラーでクルマの点検。日曜日に買ったガンダムのプラモデル、RX-78が先月につくったジオングに比べるとけっこう難易度が高く、サポートしつついっしょにつくることになりそうです。

【昨日の1日1新】
※「1日1新」→詳細はコチラ
つきぐまカステラ


この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次