Amazonでの着信コールの切断または拒否
Connect Streams APIのContact オブジェクトに対して、コールの受入れ、拒否、切断、ミュートなどのすべてのコール関連操作が実行されます。
contact.reject()関数を使用してコールを拒否し、 contact.getAgentConnection().destroy()関数を使用してコールを切断できます。
コールは、次の3つの方法のいずれかで切断できます:
- エージェントは、コールが受け入れられる前に着信コールを拒否します。
- エージェントは、会話の完了後にコールを切断します。
- 顧客がコールを切断します。
シナリオ1: エージェントは、コールが受け入れられる前に着信コールを拒否
次のフロー図は、エージェントがFusionアプリケーションまたはメディア・ツールバー・アプリケーションでのコールを拒否した後に実行される操作の順序を示しています:

- エージェントは、Fusionアプリケーションまたはメディア・ツールバー・アプリケーションからコールを拒否できます。 エージェントがFusionアプリケーションの「辞退」ボタンをクリックすると、
onToolbarInteractionCommandイベントがコマンドrejectで起動されます。 - パートナ・アプリケーションは、このイベントを受信し、イベントがコールを拒否する場合、
Amazon Connect StreamsAPIをコールしてコールを拒否できます。 - CTIサプライヤがパートナ・アプリケーションにコールが拒否されたことを通知した後、パートナ・アプリケーションは
closeCommEventアクションを理由としてREJECTとして起動できます。 - Fusionアプリケーションがこのアクションを識別すると、コール・ダイアログ・ボックスはUIから破棄されます。
rejectCallの例を更新します:
public async rejectCall(): Promise<void> {
this.contact.reject({
success: () => {
console.log("Rejected call")
},
failure: (err: any) => {
console.error("Reject error", err);
}
});
}
シナリオ2: 会話が完了すると、エージェントはコールを切断
次のフロー図は、エージェントがFusionアプリケーションまたはメディア・ツールバー・アプリケーションからコールを切断した後に実行される一連の操作を示しています:

- エージェントは、Fusionアプリケーションまたはメディア・ツールバー・アプリケーションからコールを拒否できます。 エージェントがFusionアプリケーションの「辞退」ボタンをクリックすると、
onToolbarInteractionCommandイベントがコマンドrejectで起動されます。 - パートナ・アプリケーションは、このイベントを受信し、イベントがコールを
disconnectする場合、コールを切断するAmazon Connect StreamsAPIをコールできます。 - CTIサプライヤがパートナ・アプリケーションにコールが拒否されたことを通知した後、パートナ・アプリケーションは
closeCommEventアクションを理由としてHANGUPとして起動できます。 - Fusionアプリケーションは、アクションを識別した後、「まとめ」ウィンドウを表示します。
hangupCallの例を更新します:
public async hangupCall(): Promise<void> {
this.contact.getAgentConnection().destroy({
success: function () {
console.log("Contact complete disconnected");
this.contact.clear({
success: function () {
console.log("Contact call clearContact");
},
failure: function (err: any) {
console.log("Contact call clearContact failure", err);
},
});
},
failure: function (err: any) {
console.log("Contact call complete failure", err);
},
});
}
シナリオ3: 顧客はコールを切断
次のフロー図は、顧客がコールを切断したときに実行される一連の操作を示しています:

- 顧客がコールを切断すると、Amazon Connectは
disconnectedイベントを起動します。 rejectおよびdisconnectイベント用のイベント・リスナーをメディア・ツールバー・アプリケーションに追加します。closeCommEventアクションは、REJECTまたはWRAPUPという理由でメディア・ツールバー・アプリケーションから起動されます。- Fusionアプリケーションは、アクションを識別した後、「まとめ」ウィンドウを表示します。
完全なコード
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> {
this.contact.accept();
}
public async rejectCall(): Promise<void> {
this.contact.reject({
success: () => {
console.log("Rejected call")
},
failure: (err: any) => {
console.error("Reject error", err);
}
});
}
public async hangupCall(): Promise<void> {
this.contact.getAgentConnection().destroy({
success: function () {
console.log("Contact complete disconnected");
/*
this.contact.clear({
success: function () {
console.log("Contact call clearContact");
},
failure: function (err: any) {
console.log("Contact call clearContact failure", err);
},
});
*/
},
failure: function (err: any) {
console.log("Contact call complete failure", err);
},
});
}
// 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);
this.integrationEventsHandler.outboundCallAcceptedHandler(this.eventId);
});
contact.onEnded(async (contact: any) => {
console.log("Contact onEnded >", contact);
this.integrationEventsHandler.callHangupHandler(this.eventId);
});
contact.onMissed((contact: any) => {
console.log("Contact onMissed >", contact);
this.integrationEventsHandler.callRejectedHandler(this.eventId);
});
});
}
}
進捗の確認
Fusionアプリケーションにサインインし、メディア・ツールバーを開きます。 メディア・ツールバー・アプリケーションの「エージェント可用性」ボタンをクリックします。
- インバウンド・コールを行い、Fusionアプリケーションとツールバー・ウィンドウの両方で着信コール通知を確認します。 コールを拒否すると、コール通知がクローズします。
- インバウンド・コールを行い、Fusionアプリケーションとツールバー・ウィンドウの両方で着信コール通知を確認します。 コールを受け入れて、Fusionアプリケーションからのコールを終了すると、エンゲージメントは
wrapup状態に変更されます。 - インバウンド・コールを行い、Fusionアプリケーションとツールバー・ウィンドウの両方で着信コール通知を確認します。 コールを受け入れてから、ユーザー側からのコールを終了すると、エンゲージメントは
wrapup状態に変更されます。