アウトバウンド・コール
ここで、着信コールを却下したり、受け入れられたコールを切断する機能を設定します。
次に、CTIアプリケーションでのアウトバウンド・コールの処理方法について説明します。 たとえば、エージェントが「サービス・リクエスト編集」ページのFusionアプリケーションから担当者モバイル番号リンクをクリックした場合や、エージェントが「デジタル営業担当者」ページから担当者のモバイル・リンクをクリックした場合などです。 CTIアプリケーションにこのイベントのサブスクリプションがある場合、これらのアクションによってOnOutgoingEvent
がトリガーされ、CTIアプリケーションが通知を取得します。 これは制御不可能なイベントであり、リスナーCTIを追加すると、ロジックをワイヤー・アップしてコールを開始できます。 たとえば、このイベントのイベント・レスポンスの情報に基づいて、UEF NewComm
APIをコールします。 このセクションを完了すると、Fusionアプリケーションからアウトバウンド・コールを開始できます
タスクの概要
onOutgoingEvent
にサブスクリプションを追加し、newComm
イベントを起動するロジックを追加integrationActionHandler
に次のメソッドを追加します。VendorHandler
クラスのmakeOutboundCall
メソッドを更新します。appController
にtriggerOutbound
コール・メソッドを追加します。makeAgentAvailable
メソッドのIntegrationEventsHandler
からsubscribeToOutboundCallsFromFusion
をコール- ユーザーによるイベントの受入れおよび拒否をサポートするメソッドを追加します。
1. onOutgoingEventにサブスクリプションを追加し、newCommイベントを起動するロジックを追加
次の場所にあるfusionHandler.ts
ファイル: src/ts/cti/fusion/fusionHandler.ts
、onOutgoingEvent
をサブスクライブする次のメソッドを追加
public static async acknowledgeOutBoundCallEvent(eventResponse: IMcaonOutgoingEventResponse): Promise<void> {
const request: IMcaNewCommEventActionRequest = FusionHandler.frameworkProvider.requestHelper.createPublishRequest('newCommEvent') as IMcaNewCommEventActionRequest;
const eventId: string = eventResponse.getResponseData().getOutData().SVCMCA_CALL_ID;
request.setEventId(eventId);
const indata: any = {
...eventResponse.getResponseData().getOutData(),
'callData': {
"phoneLineId": "1",
"eventId": eventId,
},
'SVCMCA_COMMUNICATION_DIRECTION': 'ORA_SVC_OUTBOUND',
'SVCMCA_WRAPUP_TIMEOUT': '',
'appClassification': ''
// you can add additional indata here
};
FusionHandler.publishNewCommEvent(eventId, indata);
}
public static async subscribeToOutboundCallsFromFusion(onOutboundCall: Function): Promise<void> {
const requestObject: IMcaEventRequest = FusionHandler.frameworkProvider.requestHelper.createSubscriptionRequest('onOutgoingEvent') as IMcaEventRequest;
requestObject.setAppClassification(FusionHandler.appClassification);
FusionHandler.phoneContext.subscribe(requestObject, async (eventResponse: IEventResponse) => {
await onOutboundCall((eventResponse as IMcaonOutgoingEventResponse).getResponseData().getOutData());
await FusionHandler.acknowledgeOutBoundCallEvent(eventResponse as IMcaonOutgoingEventResponse);
});
}
2. integrationActionHandlerにメソッドを追加
public makeCall(phoneNumber: string, eventId: string): Promise<void> {
return this.vendor.makeOutboundCall(phoneNumber, eventId);
}
3. VendorHandlerクラスのmakeOutboundCallメソッドを更新
public async makeOutboundCall(phoneNumber: string, eventId: string) {
// TODO: call the vendor specific api to make the make an outbound call
}
4. appControllerにtriggerOutboundコール・メソッドを追加
public triggerOutboundCall = (outdata: IMcaOnOutgoingEventOutData) => {
this.callContext({
...this.callContext(),
direction: 'outbound',
phonenumber: outdata.SVCMCA_ANI,
callerName: outdata.SVCMCA_DISPLAY_NAME,
eventId: outdata.SVCMCA_CALL_ID,
state: 'RINGING'
});
this.integrationActionHandler.makeCall(outdata.SVCMCA_ANI, outdata.SVCMCA_CALL_ID);
}
5. makeAgentAvailableメソッドのIntegrationEventsHandlerからsubscribeToOutboundCallsFromFusionをコール
public async makeAgentAvailable(): Promise<void> {
try {
await FusionHandler.makeAgentAvailable();
this.ctiAppViewModel.agentState(true);
FusionHandler.subscribeToToolbarInteractionCommandsFromFusion((command: string) => { this.listenToToolbarInteractionCommandsFromFusion(command); });
// code block starts
FusionHandler.subscribeToOutboundCallsFromFusion((outdata: IMcaOnOutgoingEventOutData) => {
this.ctiAppViewModel.triggerOutboundCall(outdata);
});
// code block ends
} catch (err) {
console.log("Error while making agent available", err)
}
}
6. ユーザー受入れ、拒否イベントをサポートするメソッドを追加
RootViewModelクラスに次のメソッドを追加します:
public handleOutgoingCallAccepted = () => {
this.callContext({
...this.callContext(),
state: 'ACCEPTED'
});
}
public handleOutgoingCallEnded = () => {
this.callContext({
...this.callContext(),
state: 'DISCONNECTED'
});
}
IntegrationEventsHandlerクラスに次のメソッドを追加します:
public async outboundCallAcceptedHandler(eventId: string): Promise<void> {
try {
await FusionHandler.notifyCallAcceptedToFusion(eventId);
this.ctiAppViewModel.handleOutgoingCallAccepted();
} catch {
console.log("Error: Unable to notify call accepted.")
}
}
public async callHangupHandler(eventId: string): Promise<void> {
try {
await FusionHandler.notifyCallDisconnectedToFusion(eventId, "WRAPUP");
this.ctiAppViewModel.handleOutgoingCallEnded();
} catch {
console.log("Error: Unable to notify Call disconnected.")
}
}
public async callRejectedHandler(eventId: string): Promise<void> {
try {
await FusionHandler.notifyCallDisconnectedToFusion(eventId, "REJECT");
this.ctiAppViewModel.handleOutgoingCallEnded();
} catch {
console.log("Error: Unable to notify Call disconnected.")
}
}
進捗の確認
これらのステップを完了したら、OJETサーバーを使用してアプリケーションを起動し、Fusionアプリケーションにサインインします。 メディア・ツールバーを開き、「エージェント可用性」ボタンをクリックしてエージェントをコールに使用できるようにします。 アウトバウンド・コールを開始するには、Fusionアプリケーションから担当者を開き、電話番号をクリックします。