LiveChatでチャット終了後のタグ更新をwebhookでキャッチしたい
の改良版です。
イベントのログを残したい
Logger.logでは複数のログの記録を残せなくて
console.logでのStackdriver LoggingでGCPのプロジェクトと関連付ける程でもなくて
軽くログを見たいだけなのでSpreadsheetに書き出すようにしてみます
一行目は見出しを入れておきます
LiveChat側でWebhookの設定をして
以下のコード.gsの シートのURL を各自で使うものに変更すると
チャット開始、タグの更新、チャット終了のタイミングでシートにログが書き込まれます
コード.gs
function doPost(e) {
var contents = e.postData.contents
var jobj = JSON.parse(contents);
var eventType = jobj['event_type'];
var isEnded = judgeEnded(jobj);
var message;
switch(eventType) {
case 'chat_started':
message = 'not ended';
break;
case 'chat_changed':
if(isEnded) {
message = 'ended & changed';
} else {
message = 'not ended';
}
break;
case 'chat_ended':
message = 'ended';
break;
}
var datetime = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd/HH:mm:ss:SSS');
var values = [eventType, message, contents, datetime];
set_values(values);
}
function judgeEnded(jobj) {
var events = jobj['chat']['events'];
if(events === undefined || events[0] === undefined) {
return false;
}
return true;
}
function set_values(array){
var ss = SpreadsheetApp.openByUrl("シートURL");
var sh = ss.getSheets()[0];
var last_row = sh.getLastRow();
var start_row = last_row + 1;
var start_col = 1;
var num_rows = 1;
var num_cols = array.length;
var range = sh.getRange(start_row, start_col, 1, num_cols);
range.setValues([array]);
}
|
意訳この機能がやること 飛んできたデータからcontentsを取得して オブジェクトに変換して event_typeを取得して chatが終わっているか判定して messageの入れ物を用意して eventTypeによって分岐させる chat_startedなら messageにnot endedを入れる switchの判定から抜ける chat_changedで chatが終わっているなら messageにended & changedを入れる 終わっていないなら messageにnot endedを入れる switchの判定から抜ける chat_endedなら messageにendedを入れる switchの判定から抜ける 現在日時を取得してフォーマットして 配列にeventType, message, contents, datetimeを入れて set_valuesに渡す この機能がやること chatのeventsを取得して もしeventsが存在しないかeventsの0番目が存在しなければ falseを返す 存在していればtrueを返す この機能がやること スプレッドシートを取得して 0番目のシートを取得して 値が入っている最終行を取得して その行数に1足して 1列目から 1行だけ 配列の要素の列数 の範囲を取得して その行に値を入れる シートは2次元配列なので[[1列目の値,2列目の値,3列目の値]]という形にする |
関連記事
LiveChatでチャット終了後のタグ更新をwebhookでキャッチしたい
参考
Building webhook integration
https://developers.livechatinc.com/docs/build-integration/
