LiveChatで利用できるWebhookのイベントは6つある
- chat starts
- chat ends
- chat changed
- visitor is queued
- ticket is created
- canned response changed
前提
- chat ends はチャットが終わったときにデータを送る
- chat changed はタグが更新されたときにデータを送る
今回欲しいのは
- chat ends 後の chat changed の情報
何があれば取得できそう?
- chat changed で送られたデータの中に「チャットが終わっている」という情報があるといい(例えば chat_ended: true みたいな)
調べてみた結果
- チャット中と終了後にタグを更新したログを見ると ended_timestamp がある
- けれど
- チャット中にタグを更新した時にも値が入る(ここがnullなら使えた)
- チャット終了時に値が更新される
- なので使えない
- チャットが終了していない場合は、chat の中に events が存在しない
- 1の情報は使えないので使えるとしたらこれ
2でやってみる
コード.gs
function doPost(e) { var contents = e.postData.contents console.log(contents); var jobj = JSON.parse(contents); var isEnded = judgeEnded(jobj); if(isEnded) { var chatId = jobj['chat']['id']; var tags = jobj['chat']['tags']; doSomething(chatId, tags); } else { console.log('not ended'); } } function judgeEnded(jobj) { var events = jobj['chat']['events']; if(events === undefined) { return false; } return true; } function doSomething(chatId, tags) { console.log(["ended!", chatId, tags]); } |
意訳この機能がやること 送られてきたデータからcontentsを取得して ログに出す JSONからJavaScriptのオブジェクトに変換する chatが終わっているかどうかtrue/falseで判定する chatが終わっていたら idを取得して tagsを取得して それを使って任意の処理をする chatが終わっていなければ not endedをログに出す この機能がやること 受け取ったデータの中の events を取得する eventsが見つからなければ falseを返す 見つかれば trueを返す この機能がやること 受け取ったchatId, tagsをログに出す |
関連記事
LiveChatのwebhookを使ってみる
LiveChatのwebhookを使ってみる(チャット終了後にタグを更新する)
LiveChatのwebhookを使ってみる(チャット中と終了後にタグを更新したログ)
参考
Building webhook integration
https://developers.livechatinc.com/docs/build-integration/