機械翻訳について

アウトバウンド・コール

ここで、着信コールを却下したり、受け入れられたコールを切断する機能を設定します。

次に、CTIアプリケーションでのアウトバウンド・コールの処理方法について説明します。 たとえば、エージェントが「サービス・リクエスト編集」ページのFusionアプリケーションから担当者モバイル番号リンクをクリックした場合や、エージェントが「デジタル営業担当者」ページから担当者のモバイル・リンクをクリックした場合などです。 CTIアプリケーションにこのイベントのサブスクリプションがある場合、これらのアクションによってOnOutgoingEventがトリガーされ、CTIアプリケーションが通知を取得します。 これは制御不可能なイベントであり、リスナーCTIを追加すると、ロジックをワイヤー・アップしてコールを開始できます。 たとえば、このイベントのイベント・レスポンスの情報に基づいて、UEF NewComm APIをコールします。 このセクションを完了すると、Fusionアプリケーションからアウトバウンド・コールを開始できます

タスクの概要

次に、必要な作業の概要を示します:
  1. onOutgoingEventにサブスクリプションを追加し、newCommイベントを起動するロジックを追加
  2. integrationActionHandlerに次のメソッドを追加します。
  3. VendorHandlerクラスのmakeOutboundCallメソッドを更新します。
  4. appControllertriggerOutboundコール・メソッドを追加します。
  5. makeAgentAvailableメソッドのIntegrationEventsHandlerからsubscribeToOutboundCallsFromFusionをコール
  6. ユーザーによるイベントの受入れおよび拒否をサポートするメソッドを追加します。

1. onOutgoingEventにサブスクリプションを追加し、newCommイベントを起動するロジックを追加

次の場所にあるfusionHandler.tsファイル: src/ts/cti/fusion/fusionHandler.tsonOutgoingEventをサブスクライブする次のメソッドを追加

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アプリケーションから担当者を開き、電話番号をクリックします。