Amazonでの着信通話通知の表示
Contact APIには、特定の担当者のかわりにコールできるイベント・サブスクリプション・メソッドおよびアクション・メソッドが用意されています。 メディア・ツールバー・アプリケーションから、connecting eventをリスニングし、このイベントを受信したら必要なステップを実行する必要があります。
次のフロー図は、顧客が電話からサービス・センターの電話番号にダイヤルした後に実行される一連の操作を示しています:

- Amazon Connectは着信コール通知を受信し、ペイロードとしてコール情報とともに接続イベントを起動します。
- ツールバー・アプリケーションの
Amazon Connect StreamsAPIの担当者オブジェクト上の接続イベント・リスナーは、Callペイロードとともにこのイベントを受信します。 newCommは、ツールバー・アプリケーションから起動されます。- Fusionアプリケーションは、このアクションを識別すると、担当者番号参照を実行し、アクション・レスポンスの担当者詳細を返します。
要件に合わせてデフォルトの逆参照を構成するには、「参照フィルタの作成」を参照してください。
- 最後に、Fusionアプリケーションは、ダイアログ・ボックスを介して着信コール・オファー通知についてエージェントに通知します。
- エージェントはコールに応答または拒否できます。
VendorHandlerクラスを更新して、Amazon Connect Streams APIイベントをサブスクライブ
vendorHandler.tsファイルのmakeAgentAvailable関数に次のコードを追加し、VendorHandlerクラスにeventIdプロパティを追加します。
private eventId: string = '';
private subscribeContactEvents() {
this.connect.contact((contact: any) => {
this.contact = contact;
this.eventId = contact.contactId;
contact.onConnecting((contact: any) => {
console.log("Contact onConnecting >", contact);
const phoneNumber = contact.getActiveInitialConnection().getEndpoint().phoneNumber;
this.integrationEventsHandler.incomingCallHandler(phoneNumber, this.eventId);
});
contact.onAccepted((contact: any) => {
console.log("Contact onAccepted >", contact);
});
contact.onEnded(async (contact: any) => {
console.log("Contact onEnded >", contact);
});
contact.onMissed((contact: any) => {
console.log("Contact onMissed >", contact);
});
});
}
完了コード
import { ICtiVendorHandler } from './ICtiVendorHandler';
import "amazon-connect-streams";
import { IntegrationEventsHandler } from '../integrationEventsHandler';
export class VendorHandler implements ICtiVendorHandler {
private connect: any;
private agent: any;
private contact: any;
private integrationEventsHandler: IntegrationEventsHandler;
private eventId: string = '';
constructor(integrationEventsHandler: IntegrationEventsHandler) {
this.integrationEventsHandler = integrationEventsHandler;
this.connect = (window as any)["connect"];
}
public async makeAgentAvailable(): Promise<void> {
if (!this.agent) {
this.init();
this.subscribeForAmazonEvents();
this.subscribeContactEvents();
} else {
let state = this.agent.getAgentStates()[0];
this.agent.setState(state);
}
}
public async makeAgentUnavailable(): Promise<void> {
let state = this.agent.getAgentStates()[1];
this.agent.setState(state);
}
public async makeOutboundCall(phoneNumber: string, eventId: string): Promise<void> {
}
public async acceptCall(): Promise<void> {
}
public async rejectCall(): Promise<void> {
}
public async hangupCall(): Promise<void> {
}
// Intialize Amazon connect ccp
private init() {
const containerDiv = document.getElementById("amazon-connect-cca-container");
this.connect.core.initCCP(containerDiv, {
ccpUrl: 'https://cti-amazon-connect-demo.my.connect.aws/ccp-v2', // REQUIRED
loginPopup: true, // optional, defaults to `true`
loginPopupAutoClose: true, // optional, defaults to `false`
loginOptions: {
// optional, if provided opens login in new window
autoClose: true, // optional, defaults to `false`
height: 600, // optional, defaults to 578
width: 400, // optional, defaults to 433
top: 0, // optional, defaults to 0
left: 0, // optional, defaults to 0
},
region: "eu-west-2", // REQUIRED for `CHAT`, optional otherwise
softphone: {
// optional, defaults below apply if not provided
allowFramedSoftphone: true, // optional, defaults to false
disableRingtone: false, // optional, defaults to false
},
pageOptions: {
//optional
enableAudioDeviceSettings: false, //optional, defaults to 'false'
enableVideoDeviceSettings: false, //optional, defaults to 'false'
enablePhoneTypeSettings: true, //optional, defaults to 'true'
},
ccpAckTimeout: 5000, //optional, defaults to 3000 (ms)
ccpSynTimeout: 3000, //optional, defaults to 1000 (ms)
ccpLoadTimeout: 10000, //optional, defaults to 5000 (ms)
});
}
private subscribeForAmazonEvents() {
this.connect.agent((agent: any) => {
this.agent = agent;
let state = this.agent.getAgentStates()[0];
this.agent.setState(state);
});
}
private subscribeContactEvents() {
this.connect.contact((contact: any) => {
this.contact = contact;
this.eventId = contact.contactId;
contact.onConnecting((contact: any) => {
console.log("Contact onConnecting >", contact);
const phoneNumber = contact.getActiveInitialConnection().getEndpoint().phoneNumber;
this.integrationEventsHandler.incomingCallHandler(phoneNumber, this.eventId);
});
contact.onAccepted((contact: any) => {
console.log("Contact onAccepted >", contact);
});
contact.onEnded(async (contact: any) => {
console.log("Contact onEnded >", contact);
});
contact.onMissed((contact: any) => {
console.log("Contact onMissed >", contact);
});
});
}
}
進捗の確認
Fusionアプリケーションにサインインし、メディア・ツールバーを開きます。 メディア・ツールバー・アプリケーションから「エージェント可用性」ボタンをクリックします。 インバウンド・コールを実行すると、Fusionアプリケーションとツールバー・ウィンドウの両方に着信コール通知が表示されます。