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

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) return console.log('[KARTE fetchProjectStatus err]' + err);
  if (!status || !status.operator_counts) return;
  if (status.assigned // すでにアサインされているユーザーの場合
  || status.operator_counts.available > 0 // アサイン可能オペレーターが1人以上存在する
  ) {
    chat.open();
  }
});

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

以下のスクリプトを追加します。

chat.fetchProjectStatus(function(err, status) {
  if (err) return console.log('[KARTE fetchProjectStatus err]' + err);
  if (!status || !status.operator_counts) return;
  if (!status.assigned // まだアサインされていないユーザーの場合
  && status.operator_counts.available / status.operator_counts.online < 0.2 // アサイン可能オペレーターがオンラインオペレーターの2割未満の場合
  ) {
    chat.option({
      header_description: "ただいま混雑しています。回答時間が遅れる可能性がありますので、予めご了承ください。"
    });
  }
});

記述例4(オンラインオペレーターの有無を定期的に確認し、その結果に応じて説明表記を切り替える)

以下のスクリプトを追加します。

chat.open();
setInterval(function() {
  chat.fetchProjectStatus(function(err, status) {
    if (err) return console.log('[KARTE fetchProjectStatus err]' + err);
    if (!status || !status.operator_counts) return;

    if (status.operator_counts.online > 0) {
      chat.option({
        header_description: "オペレーターがオンライン状態です。"
      });
    } else {
      chat.option({
        header_description: "オペレーターがオフライン状態です。"
      });
    }
  });
}, 5000);

Updated 5 months ago

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


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.