キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
告知

JTAC-Mid-Career-Recruitment-2021.8

FAQ

 

2280
閲覧回数
5
いいね!
2
返信
Daiju
Beginner

CISCO finesse のstatus、Ready/Not Readyの確認及び切替が出来るAPI

現在finesseの導入を検討しておりますが、Ready/Not ReadyだけはWebブラウザではなく別で用意したツールから変更をかけられるようにしたいと考えております。

 

例えば、トイレなど行く際にショートカットキーだけでReadからNot Readyに変えられれば、ブラウザの中のfinesseのTABを探さなくても良くなるのではないかという風に目論んでいます。

 

REST APIも一通り目を通しましたが、Data Structure for Agents Statisticsで総件数までは取れそうですが、個々のユーザの状態の取得及び設定までは対応していない様に見受けました。

 

何か手段がございましたら、ご教示頂く事は出来ませんでしょうか?

 

1 件の受理された解決策

受理された解決策
turatake
Cisco Employee

 

 Finesseデスクトップの中にカスタムのガジェットを作成することは可能です。
 例えば、エージェントのステートを変更するボタンなどを含むガジェットも作ることも可能です。

 そのガジェットのサンプルとしては下記リンク先のものが役立ちます。

 

 https://github.com/CiscoDevNet/finesse-sample-code/tree/master/LearningSampleGadget

 

 ガジェットの中でFinesse JavaScriptライブラリを読み込み、finesse.restservices.UserクラスのsetState()メソッドでエージェントのステートを理由コードを指定して変更することが可能です。
 

ガジェットのXMLでボタンを定義

<div id="goReady">
  <button onClick="finesse.modules.SampleGadget.setUserState('READY');">Change state to READY</button>
</div>

 

ガジェットのロジックを実装するJavaScriptコード

finesse.modules.SampleGadget = (function ($) {
  var user, states, dialogs, clientlogs,

  // 変数や関数の定義など
  ...
  return {
    /**
    * Sets the user state
    */
    setUserState : function (state) {
      clientLogs.log("setUserState(): The user's current state is: " + state);
      if (state === 'READY') {
        user.setState(states.READY);
      } else if (state === 'NOT_READY') {
        user.setState(states.NOT_READY);
      }
    },

      ...

    init : function () {
      // Finesse JavaScriptの初期化
      var cfg = finesse.gadget.Config;
      ...
      finesse.clientservices.ClientServices.init(cfg, false);
      ...
      user = new finesse.restservices.User({
        id: cfg.id, 
        onLoad : handleUserLoad,
        onChange : handleUserChange
      });
      states = finesse.restservices.User.States;
      ...
    }
    ...
  }; 
}(jQuery));



 なお、エージェントのステータスを変更する際に、サポートされるステータスの移行(のパス)は下記リンク先でご確認ください。(リンク先のUnified CCXの部分をご覧ください。)


 https://developer.cisco.com/docs/finesse/#userchange-agent-state/userchange-agent-state

 

 例えば、通話していない待受の状態からいきなり通話中(TALKING)への状態移行はできないなどの制約があります。

 

 そのため、エージェントが通話中は状態変更のガジェットを非表示(hide)にしたり、通話終了後に表示(fadein)するなどの振る舞いがあると通話中に邪魔にならないようです。

 

 上記サンプルにはキーボードの入力を受け付けるロジックが含まれておりません。
 これは別途ご自身でご確認いただくしかないのですが、ブラウザのキーイベントを受け付けて処理する方法はいろいろあろうかと思いますので詳細は割愛しますが、例えば、下記の様にjQuery Hotkeysなどを利用して、状態を変更することが可能ではないでしょうか。

 

$(document).on("keydown", null, "ctrl+b", function(){ 
  alert("CTRL+B が押されました");
  finesse.modules.SampleGadget.setUserState('READY');
});

 また、ガジェットをFinesseのデスクトップに組み込む際に、タブの中ではなく、タブの外側に追加することも可能です。この場合、タブを切り替えても常に表示される様になります。

 

 以上、ご参考になりましたら幸いです。

 

元の投稿で解決策を見る

2件の返信2
turatake
Cisco Employee

 

 Finesseデスクトップの中にカスタムのガジェットを作成することは可能です。
 例えば、エージェントのステートを変更するボタンなどを含むガジェットも作ることも可能です。

 そのガジェットのサンプルとしては下記リンク先のものが役立ちます。

 

 https://github.com/CiscoDevNet/finesse-sample-code/tree/master/LearningSampleGadget

 

 ガジェットの中でFinesse JavaScriptライブラリを読み込み、finesse.restservices.UserクラスのsetState()メソッドでエージェントのステートを理由コードを指定して変更することが可能です。
 

ガジェットのXMLでボタンを定義

<div id="goReady">
  <button onClick="finesse.modules.SampleGadget.setUserState('READY');">Change state to READY</button>
</div>

 

ガジェットのロジックを実装するJavaScriptコード

finesse.modules.SampleGadget = (function ($) {
  var user, states, dialogs, clientlogs,

  // 変数や関数の定義など
  ...
  return {
    /**
    * Sets the user state
    */
    setUserState : function (state) {
      clientLogs.log("setUserState(): The user's current state is: " + state);
      if (state === 'READY') {
        user.setState(states.READY);
      } else if (state === 'NOT_READY') {
        user.setState(states.NOT_READY);
      }
    },

      ...

    init : function () {
      // Finesse JavaScriptの初期化
      var cfg = finesse.gadget.Config;
      ...
      finesse.clientservices.ClientServices.init(cfg, false);
      ...
      user = new finesse.restservices.User({
        id: cfg.id, 
        onLoad : handleUserLoad,
        onChange : handleUserChange
      });
      states = finesse.restservices.User.States;
      ...
    }
    ...
  }; 
}(jQuery));



 なお、エージェントのステータスを変更する際に、サポートされるステータスの移行(のパス)は下記リンク先でご確認ください。(リンク先のUnified CCXの部分をご覧ください。)


 https://developer.cisco.com/docs/finesse/#userchange-agent-state/userchange-agent-state

 

 例えば、通話していない待受の状態からいきなり通話中(TALKING)への状態移行はできないなどの制約があります。

 

 そのため、エージェントが通話中は状態変更のガジェットを非表示(hide)にしたり、通話終了後に表示(fadein)するなどの振る舞いがあると通話中に邪魔にならないようです。

 

 上記サンプルにはキーボードの入力を受け付けるロジックが含まれておりません。
 これは別途ご自身でご確認いただくしかないのですが、ブラウザのキーイベントを受け付けて処理する方法はいろいろあろうかと思いますので詳細は割愛しますが、例えば、下記の様にjQuery Hotkeysなどを利用して、状態を変更することが可能ではないでしょうか。

 

$(document).on("keydown", null, "ctrl+b", function(){ 
  alert("CTRL+B が押されました");
  finesse.modules.SampleGadget.setUserState('READY');
});

 また、ガジェットをFinesseのデスクトップに組み込む際に、タブの中ではなく、タブの外側に追加することも可能です。この場合、タブを切り替えても常に表示される様になります。

 

 以上、ご参考になりましたら幸いです。

 

Tarutake 様

 

お忙しい中、詳細の情報ありがとうございます。

HQからFinesseのアクセス権を再入手し次第、頂きました情報トライしてみたく思います。

 

また、下記の頂きましたRest APIの情報ありがとうございます。

こちら使えれば、やりたいことが完全に実現すると思われます。

https://developer.cisco.com/docs/finesse/#userchange-agent-state/platformbased-api-differences

 

本当にお忙しい中ありがとうございました。

 

今後とも宜しくお願い致します。