はじめに
今回は、Amazon Connectの顧客に自動的に電話をかける「Outbound Contact API」機能に注目して、Alexaスキルからの電話着信を実装してみました。
[補足]Amazon Connect
Amazon Web Servicesが提供しているクラウド型コンタクトセンターのサービス。電話回線・通話録音など、コールセンターに必要な機能を提供、外部発信も可能。
[補足]Amazon Alexa
Amazonのクラウドベースの人工知能(AI)音声認識サービス。Alexaスキルの作成によりカスタマイズが可能。
注意
Alexaには「Alexaコール・メッセージ」機能が搭載されています。Amazon echoデバイス同士のテレビ電話やAlexaアプリ連絡先への通話等は可能です。今回はAmazon Connect連携検証の為に行っているものであり、通話に今回のカスタムスキル開発が必要なわけではありません。
今回作ったもの
「マイ電話」というAlexaスキルを作成しました。想定した流れは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 |
自宅にて XXXくん:「アレクサ、"マイ電話"を開いて」 アレクサ:「あなたのかわりに電話をかけてくれるスキルです。だれにかけますか?」 XXXくん:「(ママ)に連絡して」 アレクサ:「(ママ)に連絡しますね。連絡待っててね!」 外出先 XXXくんのママ:("0X0-XXXX-XXXX"から着信) AmazonConnect:「うちのアレクサから連絡です。電話をお願いします。」 AmazonConnect:「このまま家にかけ直す場合は1を、かけ直さない場合は、2を押してください。」 XXXくんのママ:(1を押す) (1を押した場合、自宅に電話を転送) |
今回のシステム構成
システム構成イメージは以下の通りです。
Alexaスキルで使用しているLambdaからAmazon Connect APIを呼び出し、Amazon Connectの問合せフローに従い、処理をするという構成になります。
[補足]Amazon Connectの問合せフロー
顧客とコンタクトセンターがやり取りする流れを、フローで定義します。
- 着信、オペレータ転送などのフロー
- 再生メッセージや番号選択の内容
- システム連携(Lambda呼び出し)
1.Alexaスキルの作成
1-1. Alexa開発者コンソールから「マイ電話」スキルを作成します。
1-2. インテント及びスロットを定義します。
- インテント:NameIntent
- スロット:Name (今回は”ママ”、”パパ”、”会社”を用意)
1-3. その他スキル作成に必要な設定を行います。
- エンドポイント:LambdaのARNを指定
1-4. Lambda関数を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
const Alexa = require('ask-sdk-core'); const LaunchRequestHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'LaunchRequest'; }, handle(handlerInput) { const speechText = 'あなたのかわりに電話をかけてくれるスキルです。だれにかけますか?'; return handlerInput.responseBuilder .speak(speechText) .reprompt(speechText) .getResponse(); } }; const NameIntentHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'NameIntent'; }, handle(handlerInput) { // 指定された名前を取得 var name = handlerInput.requestEnvelope.request.intent.slots.Name.resolutions.resolutionsPerAuthority[0].values[0].value.name; // Alexaへの応答 const speechText = name + 'に連絡しますね。連絡待っててね!'; return handlerInput.responseBuilder .speak(speechText) .withShouldEndSession(true) .getResponse(); } }; |
2.Amazon Connectの設定
2-1. AWSコンソールからAmazon Connect 仮想サポートセンターインスタンスを作成します。
2-2. 作成したAmazon Connectインスタンスにログインし、以下の設定を行います。
- 電話番号の取得
- オペレーション時間の設定
- キューの作成
- プロンプトの作成
- ルーティングプロファイルの作成
- ユーザーの設定
2-3. 問い合わせフローを作成します。
左側のメニューからドラッグ&ドロップでフローを作成していきます。今回はTransfer=1の場合のみ、自宅への転送を行うように設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
「開始」 ⇒「音声の設定」(日本語、Mizuki) ⇒「プロンプトの再生」(テキスト読み上げ、「うちのアレクサから連絡です。電話をお願いします。」) ⇒「問い合わせ属性の設定」(Attributes.Transferを取得、ユーザー定義属性(Transfer)を設定) ⇒「問い合わせ属性を確認する」(Transferの値により処理を分岐) ⇒Transfer=1の場合 ⇒「顧客の入力を取得する」(テキスト読み上げ、「このまま家にかけ直す場合は1を、かけ直さない場合は、2を押してください。」) ⇒1を押した場合 ⇒「電話番号への転送」(特定の電話番号への転送) ⇒それ以外の場合 ⇒「切断/ハングアップ」 |
問合せフローの例
2-4. Amazon Connect側の設定はこれで終わりです。
別のLambdaを呼び出しや、オペレータに繋ぐといったカスタマイズも可能です。
3.AlexaスキルからのAmazon Connect API呼び出し
3-1. AlexaスキルのLambda側にAPI呼び出しを追加します。
顧客に自動的に電話をかけるには「StartOutboundVoiceContact」を使用します。
呼び出しパラメータは以下の通り
- ContactFlowId:問合せフローID
- DestinationPhoneNumber:発信先電話番号
- InstanceId:コールセンターインスタンスID
- SourcePhoneNumber:着信元電話番号(2-2で取得した電話番号)
- Attributes:カスタム属性(Amazon Connectの問合せフロー中で取得可能)今回は”Transfer”を定義
なお問合せフローIDとコールセンターインスタンスIDは、問合せフロー作成画面の「追加のフロー情報を表示」から確認可能です。
例:arn:aws:connect:ap-northeast-1:[AWSアカウントID]:instance/[コールセンターインスタンスID]/contact-flow/[問合せフローID]
※詳細は公式APIリファレンス参照。
Amazon Connect Service API Reference -StartOutboundVoiceContact-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
const aws = require('aws-sdk'); // AmazonConnectのオブジェクト作成、東京リージョンを選択 const connect = new aws.Connect({region:'ap-northeast-1'}); // AmazonConnectAPIのパラメータ設定 var params = { // 問合せフローID ContactFlowId: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX", // 発信先の電話番号 DestinationPhoneNumber: "+81XXXXXXXXXX", // インスタンスID InstanceId: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX", // 着信元の電話番号 SourcePhoneNumber: "+81XXXXXXXXXX", // 転送有無 Attributes: { Transfer : '1' } }; // // 一部抜粋 // // AmazonConnect // 発信先によってパラメータ調整 switch (name) { case "パパ" : params.DestinationPhoneNumber = "+81XXXXXXXXX1"; break; case "ママ" : params.DestinationPhoneNumber = "+81XXXXXXXXX2"; break; case "会社" : params.DestinationPhoneNumber = "+81XXXXXXXXX3"; params.Attributes.Transfer = "0"; // 転送なし break; } // // 一部抜粋 // // API呼び出し connect.startOutboundVoiceContact(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response }); |
結果
Alexa開発者コンソールからテストしてみます。(※開発中スキルのため、皆様からのスキル使用は出来ません。)
数秒後に指定した番号への着信があり、女性の声で「うちのアレクサから連絡です。電話をお願いします。」のメッセージが流れ、続いて「このまま家にかけ直す場合は1を、かけ直さない場合は、2を押してください。」、1をプッシュすると、指定した番号に転送されました。
まとめ
今回はAlexaとAmazon Connectの連携による電話着信を試してみました。Amazon Connectはコンタクトセンターの導入が簡単で、問合せフローも簡単に設定できる点は大変便利だと思います。外部発信を利用することで、「顧客への自動発信、アンケート、オペレータへ転送」などにも使うことができます。今回はAlexaを例に検証しましたが、他サービスとの連携も可能ですので、利用を検討してみてはいかがでしょうか。
執筆者プロフィール

- tdi デジタルイノベーション技術部
- 入社以来、開発部門にて業務システム開発に従事。現在はAWS技術支援を担当。興味分野はAWS/GCP/Alexa/MachineLearning
この執筆者の最新記事
Pick UP!2023.12.28コンソール操作からコードを生成する「AWS Console-to-Code」
AWS・クラウド2020.01.16Alexaフラッシュブリーフィングスキルの作り方
AWS・クラウド2019.03.18Alexa+Amazon Connectで電話をかける