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/