チャットからプロジェクトステータスを取得する

chat オブジェクトの fetchProjectStatus メソッドを使うことで、「配信先エンドユーザーにオペレーターがアサインされているか」、「全オペレーターの何割が、まだアサインを受け付けることができるか」などの情報を Widget のスクリプト内で取得することができます。

以下のようなオブジェクトを取得することができます。

{
  "online_operator": { // オンラインオペレーターの中の誰か1人の情報
    "is_bot": false,
    "profile_image_src": "https://img-karte-io.s3.amazonaws.com/image/59687257491890198f03416c::karte.jpg",
    "profile_name": "KARTEちゃん"
  },
  "assigned": true, // 配信先ユーザーのアサイン状況
  "assigned_operator": { // 配信先ユーザーの担当者情報
    "is_bot": false,
    "profile_image_src": "https://img-karte-io.s3.amazonaws.com/image/59687257491890198f03416c::karte.jpg",
    "profile_name": "KARTEちゃん"
  },
  "operator_counts": {
    "all": 42, // 全体オペレーター数
    "online": 23, // オンラインオペレーター数
    "available": 7 // アサイン可能オペレーター数
  }
}

記述例1(オンラインオペレーターの数に応じて、新規ユーザーへのチャット表示を変更する)

スクリプト内で chat.open() している部分を、以下に書き換えます。

chat.fetchProjectStatus(function(err, status) {
  if (err || !status) {
    return;
  }
  if (status.operator_counts.online > 0) {
    chat.open();
  }
});

記述例2(全オペレーターがアサイン上限までアサインされていたら、新規ユーザーにはチャットを出さない)

スクリプト内で chat.open() している部分を、以下に書き換えます。

chat.fetchProjectStatus(function(err, status) {
  if (err || !status) {
    return;
  }
  if (status.assigned // すでにアサインされているユーザーの場合
  || status.operator_counts.available > 0 // アサイン可能オペレーターが1人以上存在する
  ) {
    chat.open();
  }
});

記述例3(オンラインオペレータの8割がアサイン上限までアサインされていたら、その結果に応じてヘッダーの説明文を切り替える)

スクリプト内で chat.option()やchat.open() している部分を、以下に書き換えます。

var header_description = "ご質問があればお尋ねください。KARTEサポート担当者につながります。";

chat.fetchProjectStatus(function(err, status) {
    if (err || !status) return initChat();
    // 未アサイン、かつアサイン可能オペレーターがオンラインオペレーターの2割未満
    if (!status.assigned && status.operator_counts.available / status.operator_counts.online < 0.2) {
        // ヘッダー文言を変更
        header_description = "ただいま混雑しています。回答時間が遅れる可能性がありますので、予めご了承ください。";
    }
    initChat();
});

function initChat() {
    chat.option({
        header_description: header_description,
        // その他のオプションを設定
    });
    chat.open();
}