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」としています。
スプレッドシートの「拡張機能」から「AppScript」をクリックし、
ここにGAS(Google App Script)を書きます。
次のように書きました。
GASのコードはこちらから確認できます。(クリック)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
// 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新」→詳細はコチラ
つきぐまカステラ