Fusionアプリケーションまたはツールバー・アプリケーションからの着信コールを受け入れます
メディア・ツールバー・アプリケーションおよびFusionアプリケーションで着信コール通知を設定したので、メディア・ツールバー・アプリケーションおよびFusionアプリケーションからの着信コール通知の受け入れを設定します。
対応するUI(顧客360、サービス・リクエストの詳細など)をスクリーン・ポップして、コール中にエージェントを支援できます。 次の設定タスクを設定したら、着信コールを受け入れることができます。
タスクの概要
- パート1: メディア・ツールバー・アプリケーションからの着信コールの受入
- 「受入」ボタンのクリック・イベントのイベント・ハンドラを追加します。
callAcceptedEventHandler
ファンクションを定義します。- ファンクション
acceptIncomingCall in integrationActionHandler.ts
ファイルを定義します。 - CTIサプライヤのSDKに基づいて、
vendorHandler.ts
ファイルにacceptCall()
関数を実装します。 - ファンクション
notifyCallAcceptedToFusion in fusionHandler.ts
ファイルを定義します。
- 第2部: Fusionアプリケーションからの着信コールの受入れ
FusionHandler
クラスにsubscribeToToolbarInteractionCommandsFromFusion
というメソッドを追加し、onToolbarInteractionCommand
イベントにサブスクライブするロジックを記述します。integrationEventsHandler.ts
ファイルのmakeAgentAvailable
関数から関数をコールします。integrationEventsHandler.ts
ファイルでファンクションlistenToToolbarInteractionCommandsFromFusion
を定義します。
パート1: メディア・ツールバー・アプリケーションからの着信コールの受入
エージェントが「Accept」ボタンをクリックすると、コール・パネル・コンポーネントは、コンポーネントがロードされているコンテナに通知するイベントを起動します。 この場合は、コンポーネントがメディア・ツールバー・アプリケーションにロードされます。 拒否ボタンを選択すると、イベントも同様に起動されます。
また、対応するUI(顧客360、サービス・リクエスト詳細など)の画面ポップアップが表示され、コール中にエージェントが役立ちます。
コンテナから、これらのイベントを処理するためにイベント・ハンドラを定義する必要があります。
次の図は、エージェントがメディア・ツールバー・アプリケーションからの呼び出しを受け入れるときに実行される一連のアクションを示しています:
エージェント・コール・フローは次のとおりです:
- エージェントは、メディア・ツールバー・アプリケーションから「回答」ボタンをクリックします。
- パートナ・アプリケーションは、サプライヤ固有のAPIをコールしてコールを受け入れるようにCTIサプライヤに通知します。
- CTIサプライヤがパートナ・アプリケーションにコールの受入れを通知すると、パートナ・アプリケーションは
startCommEvent
アクションを起動できます。 - Fusionアプリケーションがこのアクションを識別すると、一致した担当者とエンゲージメント・パネルが、スクリーン・ポップのFusion構成管理で構成されたルールに基づいて開きます。
スクリーン・ポップ・ルールを構成するには、「スクリーン・ポップ・ページを構成するにはどうすればよいですか。」を参照してください。
次のステップでは、これをツールバー・アプリケーションに実装する方法を示します:
1. 「受入れ」ボタンのクリック・イベントのイベント・ハンドラを追加
index.htmlファイルの次の例のように、コール・パネル・コンポーネントで「受入れ」ボタンをクリックしたイベント・ハンドラを追加します:
<oj-bind-if test="[[callContext().state === 'RINGING' || callContext().state === 'ACCEPTED']]">
<call-panel call-context="[[callContext]]"
on-accept-button-clicked="[[ callAcceptedEventHandler ]]"></call-panel>
</oj-bind-if>
2. callAcceptedEventHandler関数の定義
次の例に示すように、appController.ts
ファイルでcallAcceptedEventHandler
関数を定義します。 callAcceptedEventHandler
関数は、integrationActionHandler
で定義される他の2つの関数 acceptIncomingCall
と、appController.ts
自体で定義される updateCallPanelState
を内部的にコールします。
//.....
import "oj-c/button";
// ....
class RootViewModel {
// ....
constructor() {
// ....
};
public callAcceptedEventHandler: (event: any) => void = (event: any): void => {
this.integrationActionHandler.acceptIncomingCall(this.callContext().eventId).then(() => {
this.updateCallPanelState('ACCEPTED');
}).catch(() => {
console.log("Error: Unable to accept the call.")
});
}
//...
}
}
3. integrationActionHandler.tsファイルにファンクションacceptIncomingCallを定義
acceptIncomingCall
ファンクションには、コールを受け入れるようにCTIサプライヤに通知するロジックが含まれています。また、このファンクションには、startCommEvent
アクションを起動してコールが受け入れられることをFusionアプリケーションに通知するロジックが含まれています。
import { IntegrationEventsHandler } from "./integrationEventsHandler";
import { ICtiVendorHandler } from "./vendor/ICtiVendorHandler";
import { VendorHandler } from "./vendor/vendorHandler";
import { FusionHandler } from "./fusion/fusionHandler";
export class IntegrationActionHandler {
private vendor: ICtiVendorHandler;
private integrationEventsHandler: IntegrationEventsHandler;
constructor(integrationEventsHandler: IntegrationEventsHandler) {
this.vendor = new VendorHandler();
this.integrationEventsHandler = integrationEventsHandler;
}
//....
public async acceptIncomingCall(eventId: string): Promise<IMcaStartCommEventOutData> {
await this.vendor.acceptCall();
const startCommResponseFromFusion: IMcaStartCommEventOutData = await FusionHandler.notifyCallAcceptedToFusion(eventId);
return startCommResponseFromFusion;
}
}
4. CTIプロバイダのSDKに基づいて、vendorHandler.tsファイルにacceptCall()関数を実装
CTIサプライヤのドキュメントを参照して、コールの受入れに使用するAPIを特定してください。 vendorHandler.ts
ファイルにロジックを追加できます:
import { ICtiVendorHandler } from './ICtiVendorHandler';
export class VendorHandler implements ICtiVendorHandler {
// ....
public async acceptCall() {
// TODO: call the vendor specific api to accept a call
}
// ....
}
5. fusionHandler.tsファイルにファンクションnotifyCallAcceptedToFusionを定義
fusionHandler.ts
から、startCommEvent
アクションを起動してコールが受け入れられることをFusionアプリケーションに通知します。
export class FusionHandler {
private static engagementContext: IEngagementContext;
// ....
public static async notifyCallAcceptedToFusion(eventId: string): Promise<IMcaStartCommEventOutData> {
let request: IMcaStartCommEventActionRequest = FusionHandler.frameworkProvider.requestHelper.createPublishRequest('startCommEvent') as IMcaStartCommEventActionRequest;
const newCommResponse: any = FusionHandler.callToNewCommResponseMap.get(eventId);
if (newCommResponse) {
for (const property in newCommResponse) {
request.getInData().setInDataValueByAttribute(property, newCommResponse[property]);
}
}
//TODO pass unique identifier from your CTI data
request.setEventId(eventId);
request.setAppClassification(FusionHandler.appClassification);
const operationResponse: IMcaStartComActionResponse = await FusionHandler.phoneContext.publish(request) as IMcaStartComActionResponse;
FusionHandler.engagementContext = operationResponse.getResponseData().getEngagementContext();
return operationResponse.getResponseData().getOutData();
}
// ...
}
第2部: Fusionアプリケーションからの着信コールの受入れ
エージェントがFusionコール通知から「受理」ボタンをクリックすると、メディア・ツールバー・アプリケーションとCTIサプライヤに、エージェントがコールを受け入れたことを通知する必要があります。 これを処理するには、Fusionシナリオから受け入れられたコールを使用する必要があります。 次の図は、エージェントがFusionアプリケーションからのコールを受け入れるときに実行される一連のアクションを示しています:
- エージェントがFusionアプリケーションの「回答」ボタンをクリックすると、
onToolbarInteractionCommand
イベントがコマンドにacceptとして起動されます。 - パートナ・アプリケーションは、このイベントを受信し、イベントがコールを受理する場合、パートナ・アプリケーションは、CTIサプライヤにコールを受理するように通知します。
- CTIサプライヤがパートナ・アプリケーションにコールの受入れを通知すると、パートナ・アプリケーションは
startCommEvent
アクションを起動します。 - Fusionアプリケーションでこのアクションが識別されると、一致した担当者とエンゲージメント・パネルは、スクリーン・ポップのFusion構成管理で構成されたルールに基づいて開きます。
スクリーン・ポップ・ルールを構成するには、「スクリーン・ポップ・ページを構成するにはどうすればよいですか。」を参照してください。
1: FusionHandlerクラスにメソッドsubscribeToToolbarInteractionCommandsFromFusionを追加し、onToolbarInteractionCommandイベントをサブスクライブするロジックを記述
通話の受入れ、拒否、切断などのエージェントの相互作用は、UEF APIを介して onToolbarInteractionCommand
イベントにサブスクライブすることで識別できます。 イベント・レスポンスは、Fusionアプリケーション・ウィンドウでエージェントによって実行される操作に関する情報で構成されます。 次の例に示すように、onToolbarInteractionCommand
イベントのファンクションをfusionHandler.ts
ファイルに追加します:
export class FusionHandler {
// ....
public static subscribeToToolbarInteractionCommandsFromFusion(callback: Function): void {
const request: IMcaEventRequest = FusionHandler.frameworkProvider.requestHelper.createSubscriptionRequest('onToolbarInteractionCommand') as IMcaEventRequest;
FusionHandler.phoneContext.subscribe(request, (eventResponse: IEventResponse) => {
const eventResponseDetails: IMcaOnToolbarInteractionCommandDataResponse = (eventResponse as IMcaOnToolbarInteractionCommandEventResponse).getResponseData();
callback(eventResponseDetails.getCommand());
});
}
// ....
}
Fusionアプリケーション・ウィンドウからイベントを受信すると、コールバック関数に eventType
を渡してコールバック関数が実行されます。
2. integrationEventsHandler.tsのmakeAgentAvailable関数から前述の関数をコール
onToolbarInteractionCommand
イベント・サブスクリプションは、エージェントが使用可能になった初期ステップ中に追加する必要があります。 そのため、エージェントを使用可能にすると、subscribeToToolbarInteractionCommandsFromFusion
がコールされます。 コールバック関数は、引数としてsubscribeToToolbarInteractionCommandsFromFusion
関数にも渡されます。 コールバック関数は、 interactionEventsHandler.ts
ファイル自体で定義する必要がある別の関数listenToToolbarInteractionCommandsFromFusion
をコールします。
export class IntegrationEventsHandler {
// ....
public async makeAgentAvailable(): Promise<void> {
try {
await FusionHandler.makeAgentAvailable();
FusionHandler.subscribeToToolbarInteractionCommandsFromFusion((command: string) => { this.listenToToolbarInteractionCommandsFromFusion(command); });
this.ctiAppViewModel.agentState(true);
} catch (err) {
console.log("Error while making agent available", err)
}
}
// ....
}
3. integrationEventsHandler.tsでファンクションlistenToToolbarInteractionCommandsFromFusionを定義
この関数は、パラメータとしてコマンド変数を取ります。 コールが受け入れられると、コマンド変数に渡される値はaccept
です。 この場合、callAcceptedEventHandler
ファンクションが起動され、これはappController
で定義され、vendorHandler.ts
ファイルのacceptCall
ファンクションがコールされ、startCommEvent
アクションがコールされ、コールがACCEPTEDのコール・パネル・コンポーネントUIも更新されます。
export class IntegrationEventsHandler {
// ....
public listenToToolbarInteractionCommandsFromFusion(command: string): void {
switch (command) {
case "accept":
this.ctiAppViewModel.callAcceptedEventHandler(null);
break;
}
}
// ....
}
進捗の確認
前述のステップを完了したら、OJETサービスを使用してアプリケーションを起動し、Fusionアプリケーションにサインインします。 メディア・ツールバーを開き、エージェントの使用可ボタンをクリックして、エージェントがコールに使用できるようにします。 カスタマ・ケア番号へのコールを開始します。 メディア・ツールバー・アプリケーションおよびFusionアプリケーション・ウィンドウで着信コール通知を受信します。 このコールは、メディア・ツールバー・アプリケーションまたはFusionアプリケーションから受け入れることができます。 コールを受け入れると、メディア・ツールバーの状態がACCEPTED状態に変更され、エンゲージメントがFusionアプリケーションで開きます。