LANG SELRCT

コードを書く場所についてはこちら

2019年4月28日日曜日

LiveChatでチャット終了後のタグ更新をwebhookでキャッチしたい


LiveChatで利用できるWebhookのイベントは6つある

  1. chat starts
  2. chat ends
  3. chat changed
  4. visitor is queued
  5. ticket is created
  6. canned response changed


前提
  • chat ends はチャットが終わったときにデータを送る
  • chat changed はタグが更新されたときにデータを送る

今回欲しいのは

  • chat ends 後の chat changed の情報


何があれば取得できそう?
  • chat changed で送られたデータの中に「チャットが終わっている」という情報があるといい(例えば chat_ended: true みたいな)

調べてみた結果

  1. チャット中と終了後にタグを更新したログを見ると ended_timestamp がある
    • けれど
      • チャット中にタグを更新した時にも値が入る(ここがnullなら使えた)
      • チャット終了時に値が更新される
    • なので使えない
  2. チャットが終了していない場合は、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/