Amazon Connect Streamsを使ってカスタムエージェントステータス名を取得する方法

2021.01.05

Amazon ConnectのCCP上で選択できるエージェントステータスですが、

デフォルトでは Available(受付可)Offline(オフライン) があります。 その他に、通話が終了すると自動的に ACW(後処理) ステータスになりますが、離席や後処理ステータスも設定できるようにしたい場合は、このように追加することが可能です。

ただし、画面上にも書かれている通り、追加したステータスは削除できないので注意が必要ですが。。

追加したカスタムエージェントステータスは、CCP上で選択できるようにしたり、非表示にしたりすることができ、更にはAmazon Connect Streamsを使ってCCPをカスタマイズすることで、エージェントステータスに応じてアプリケーションの動作を制御するといったことが可能になります。

今回はAmazon Connect Streamsを使ってカスタムエージェントステータスを取得する方法について書きます。

Amazon Connect Streamsのセットアップ

このあたりに、いくつか方法が記載されておりますが、とりあえず試すだけでしたらGithub上でZIPファイルをダウンロードして release フォルダの中にある connect-streams-min.jsconnect-streams.js を参照すれば使えるようになります。

エージェントステータスを取得する方法

まず、エージェントに関するイベントをサブスクライブする必要があるため、 connect.agent() メソッドを使います。

https://github.com/amazon-connect/amazon-connect-streams/blob/master/Documentation.md#connectagent

次に Agent API でエージェントステータスが取得できそうなものを探します。

https://github.com/amazon-connect/amazon-connect-streams/blob/master/Documentation.md#agent-api

結論:agent.onStateChange イベントをサブスクライブすれば取得可能

agent.onStateChange イベントによって oldState(変更前のステータス)newState(変更後のステータス) が取得できます。

connect.agent(function(agent) {
  agent.onStateChange(function(agentStateChange) {
    alert("agentStateChange.oldState=" + agentStateChange.oldState);
    alert("agentStateChange.newState=" + agentStateChange.newState);
  });
});

例えば私の環境を例にしますと、このように取得できます。 デフォルト、カスタムともにステータス名を取得できますので、あとは取得結果によってアプリケーションロジックを組めば良いということになります。

agentStateChange.oldState=Available
agentStateChange.newState=ACW
agentStateChange.oldState=ACW
agentStateChange.newState=Training
agentStateChange.oldState=Training
agentStateChange.newState=Available
agentStateChange.oldState=Available
agentStateChange.newState=ReasonCode3
agentStateChange.oldState=ReasonCode3
agentStateChange.newState=ReasonCode1

ただし、いくつか補足したいと思うことがありますので、下記に書いてブログを終ろうと思います。

エージェントのステータス取得に関する補足事項

agent.onXXXXX イベントで取得しようとすると、どうなるか?

エージェントの状態が、 受付可受付可以外オフライン後処理(Amazon Connectで用意されてるもの) になった場合に発生するイベントがあります。

  • agent.onRoutable() イベント
    • エージェントが受付可になった時に発生するイベント
  • agent.onNotRoutable() イベント
    • エージェントが受付可以外のステータスになった時に発生するイベント
  • agent.onOffline() イベント
    • エージェントがオフラインのステータスになった時に発生するイベント
  • agent.onAfterCallWork() イベント
    • エージェントがオフラインのステータスになった時に発生するイベント

このように各イベントをサブスクライブして、 agent.getState() メソッドを使うことでエージェントステータス名を取得することができます。

connect.agent(function(agent) {
  agent.onRoutable(function(agent) {
    var state = agent.getState();
    alert("state.name=" + state.name);
  });

  agent.onNotRoutable(function(agent) {
    var state = agent.getState();
    alert("state.name=" + state.name);            
  });

  agent.onOffline(function(agent) {
    var state = agent.getState();
    alert("state.name=" + state.name);             
  });

  agent.onAfterCallWork(function(agent) {
    var state = agent.getState();
    alert("state.name=" + state.name);             
  });
}

このような結果を得られます。

onNotRoutable
→state.name=Training
onOffline
→state.name=Offline
onRoutable
→state.name=Available
onAfterCallWork
→state.name=AfterCallWork

ただし、これらのイベントはステータスが変わらないと発生しません。つまり、 カスタムエージェントステータスからカスタムエージェントステータスへの変更は、 onNotRoutable な状態から変わっていないため、最初のカスタムエージェントステータスへの変更の時だけイベントが発生します。

agent.onStateChange イベントで取得できるエージェントステータスは?

というわけで、結論に書いた通り agent.onStateChange イベントを使うことになるのですが、どのようなステータスが取得できるのか確認しました。

発信の場合(発信先が着信拒否した)

onStateChange
agentStateChange.oldState=Available ←受付可能
agentStateChange.newState=CallingCustomer ←発信した

onStateChange
agentStateChange.oldState=CallingCustomer ←発信した
agentStateChange.newState=FailedConnectCustomer ←発信先が着信拒否した

発信の場合(発信側で切断した)

onStateChange
agentStateChange.oldState=Available ←受付可能
agentStateChange.newState=CallingCustomer ←発信した

onStateChange
agentStateChange.oldState=CallingCustomer ←発信した
agentStateChange.newState=FailedConnectAgent ←発信側で切断した

着信の場合(着信して応答した)

onStateChange
agentStateChange.oldState=Available ←受付可能
agentStateChange.newState=PendingBusy ←着信中

onStateChange
agentStateChange.oldState=PendingBusy ←着信中
agentStateChange.newState=Busy ←応答後の状態

着信の場合(着信したが、発信側に切断された(応答できなかった))

onStateChange
agentStateChange.oldState=Available ←受付可能
agentStateChange.newState=PendingBusy ←着信中

onStateChange
agentStateChange.oldState=PendingBusy ←着信中
agentStateChange.newState=MissedCallAgent ←発信側で切断した

このようにエージェントステータスには呼に関するものも含まれますので、アプリケーション側で個々のイベントをハンドリングしていくことになります。

呼に関するイベントもいろいろとありますので、今後取り上げてみたいと思います。