startCommEvent
これは、コール受入済シナリオがあり、実際のコール接続を確立する必要がある場合にユーザーが公開する必要がある処理です
たとえば、エージェントがコール通知で「受理」をクリックすると、CTI統合コード・ベースは、同じサブスクリプションが追加されている場合、コマンドがAcceptのonAgentInteractionCommandイベントの通知を受け取ります。
コールacceptコマンドの通知を取得したら、CTI統合でstartCommEvent操作を公開する必要があります。これにより、コール接続が有効になり、このコールの相互作用コンポーネントがUIにロードされます。 送信イベントの場合も、CTIがonOutgoingEventのイベント通知を取得する場合は、送信コールを確立するためにstartCommEventパブリッシュAPIをコールする必要があります。
ノート: このAPIは、コール接続を確立するためにコールされます。 StartCommEvent操作リクエストに渡す必要があるinDataパラメータは、newCommEvent操作レスポンスで取得されるoutDataレスポンスと一致している必要があります。 同様に、StartCommEvent操作リクエストのinDataも、FusionアプリケーションからのOutGoingCallイベントに対するOutGoingCallEvent通知のレスポンスである必要があります。
startCommEvent操作を呼び出すTypescriptの例を次に示します。
/// <reference path="uiEventsFramework.d.ts"/>
const uiEventsFrameworkInstance: IUiEventsFrameworkProvider = await CX_SVC_UI_EVENTS_FRAMEWORK.uiEventsFramework.initialize('appname', 'v1');
const multiChannelAdaptorContext: IMultiChannelAdaptorContext = await uiEventsFrameworkInstance.getMultiChannelAdaptorContext();
const phoneContext: IPhoneContext = await multiChannelAdaptorContext.getCommunicationChannelContext('PHONE') as IPhoneContext;
const request: IMcaStartCommEventActionRequest = uiEventsFrameworkInstance.requestHelper.createPublishRequest('startCommEvent') as IMcaStartCommEventActionRequest;
request.setAppClassification('appClassfication');
request.setInputData(_inboundData);// _inboundData of type - IMcaStartCommInData
const inData: IMcaStartCommInDataRequest = request.getInData();
phoneContext.publish(request).then((res: IOperationResponse) => {
const response: IMcaStartComActionResponse = res as IMcaStartComActionResponse;
}).catch(() => {
})
startCommEvent操作を呼び出すJavaScriptの例を次に示します。
const uiEventsFrameworkInstance = await CX_SVC_UI_EVENTS_FRAMEWORK.uiEventsFramework.initialize('appname', 'v1');
const multiChannelAdaptorContext = await uiEventsFrameworkInstance.getMultiChannelAdaptorContext();
const phoneContext = await multiChannelAdaptorContext.getCommunicationChannelContext('PHONE');
const request = uiEventsFrameworkInstance.requestHelper.createPublishRequest('startCommEvent');
request.setAppClassification('appClassfication');
request.setInputData(_inboundData);// _inboundData of type - IMcaStartCommInData
const inData = request.getInData();
phoneContext.publish(request).then((res) => {
}).catch(() => {
})
UIイベント・フレームワーク統合オブジェクトと対話するためのEngagementContext
UEFを使用するstartCommEventのTypescriptの例を次に示します。この例では、engagementContextを使用して新しいページをポップし、エンゲージメントが開かれているのと同じタブ・コンテキストで別のフィールドをリスニングしてフィールド値を設定します。
const uiEventsFrameworkInstance = await CX_SVC_UI_EVENTS_FRAMEWORK.uiEventsFramework.initialize('appname', 'v1');
const multiChannelAdaptorContext = await uiEventsFrameworkInstance.getMultiChannelAdaptorContext();
const phoneContext = await multiChannelAdaptorContext.getCommunicationChannelContext('PHONE');
const request: IMcaStartCommEventActionRequest = uiEventsFrameworkInstance.requestHelper.createPublishRequest('startCommEvent') as IMcaStartCommEventActionRequest;
request.setAppClassification('self.appClassfication');
request.getInData().setChannelId('');
const response: IMcaStartComActionResponse = await phoneContext.publish(request) as IMcaStartComActionResponse;
const contactId: string = response.getResponseData().getEngagementContext().getEngagementData().getOutputData().getSVCMCA_CONTACT_NUMBER();
// pop a contact page on success of startComm event publish
const globalContext: IGlobalContext = await uiEventsFrameworkInstance.getGlobalContext();
const requestObject: IPopFlowInAppRequest = uiEventsFrameworkInstance.requestHelper.createPublishRequest('PopOperation') as IPopFlowInAppRequest;
requestObject.setRecordType('Contact');
requestObject.setRecordType(contactId);
requestObject.setOpenPageInNewBrowserTab(true);
const popResponse: IPopFlowResponse = await globalContext.publish(requestObject) as IPopFlowResponse;
// get active record in startComm event's engagementContext's tabContext.
const engagementContext: IEngagementContext = response.getResponseData().getEngagementContext();
const tabContext: ITabContext = await engagementContext.getTabContext();
const activeRecord: IRecordContext = await tabContext.getActiveRecord();
// listen to value change in problem description and set it to Notes field
const fvcPayload = uiEventsFrameworkInstance.requestHelper.createSubscriptionRequest('cxEventBusFieldValueChangeEvent') as IFieldValueChangeEventRequest;
fvcPayload.setFields(['ServiceRequest.ProblemDescription']);
activeRecord.subscribe(fvcPayload, (fvcRes) => {
const fvcResponse = fvcRes as IFieldValueChangeEventResponse;
const setfieldValuePayload = uiEventsFrameworkInstance.requestHelper.createPublishRequest('cxEventBusSetFieldValueOperation') as ISetFieldValueOperationRequest;
setfieldValuePayload.field().setValue('ServiceRequest.TransferNote', fvcResponse.getResponseData().getNewValue());
activeRecord.publish(setfieldValuePayload);
});
UEFを使用するstartCommEventのJavaScriptの例を次に示します。この例では、engagementContextを使用して新しいページをポップし、エンゲージメントが開かれているのと同じタブ・コンテキストで別のフィールドをリスニングしてフィールド値を設定します。
const uiEventsFrameworkInstance = await CX_SVC_UI_EVENTS_FRAMEWORK.uiEventsFramework.initialize('appname', 'v1');
const multiChannelAdaptorContext = await uiEventsFrameworkInstance.getMultiChannelAdaptorContext();
const phoneContext = await multiChannelAdaptorContext.getCommunicationChannelContext('PHONE');
const request = uiEventsFrameworkInstance.requestHelper.createPublishRequest('startCommEvent');
request.setAppClassification('self.appClassfication');
request.getInData().setChannelId('');
const response = await phoneContext.publish(request);
const contactId = response.getResponseData().getEngagementContext().getEngagementData().getOutputData().getSVCMCA_CONTACT_NUMBER();
// pop a contact page on success of startComm event publish
const globalContext = await uiEventsFrameworkInstance.getGlobalContext();
const requestObject = uiEventsFrameworkInstance.requestHelper.createPublishRequest('PopOperation');
requestObject.setRecordType('Contact');
requestObject.setRecordType(contactId);
requestObject.setOpenPageInNewBrowserTab(true);
const popResponse = await globalContext.publish(requestObject);
// get active record in startComm event's engagementContext's tabContext.
const engagementContext = response.getResponseData().getEngagementContext();
const tabContext = await engagementContext.getTabContext();
const activeRecord = await tabContext.getActiveRecord();
// listen to value change in problem description and set it to Notes field
const fvcPayload = uiEventsFrameworkInstance.requestHelper.createSubscriptionRequest('cxEventBusFieldValueChangeEvent');
fvcPayload.setFields(['ServiceRequest.ProblemDescription']);
activeRecord.subscribe(fvcPayload, (fvcResponse) => {
const setfieldValuePayload = uiEventsFrameworkInstance.requestHelper.createPublishRequest('cxEventBusSetFieldValueOperation');
setfieldValuePayload.field().setValue('ServiceRequest.TransferNote', fvcResponse.getResponseData().getNewValue());
activeRecord.publish(setfieldValuePayload);
});