Amazon Connect Outbound ContactのPreview版を試してみる
事業開発部の酒匂です。
Amazon Connect Outbound Contactのpreview版を試してみました。
Amazon Connect Outbound Contactとは
顧客などに自動的に電話を架けることができるようになる機能です。 コンタクトセンターのソリューションとして、アウトバウンドダイアラーみたいなものがございますが、 そのようなものを実現できる機能です。
昨年の11月頃に発表されまして、現時点ではpreview版のみで提供されております。
Amazon Connect Adds Automated Outbound Calling, Now Available in Preview
利用シーンとしては、以下のように何かしらイベントをトリガーに電話を自動でかけたり、 キャンペーンで複数の顧客に電話をしたい場合に、予め対象顧客をリスト化しておいて、自動的に電話をかけていくなどがあります。
- 予定のリマインダーとして通知する
- 業務で使っているシステムがダウンしたので、担当者へ電話をかけて障害連絡を通知する
- クレジットカード詐欺に遭ったことを通知する
Amazon Connect Outbound Contactの使い方
Amazon Connect Outbound ContactはAPIとして提供されるため、何かしらのプログラミング言語でコールして使うことになります。 現時点では、下記の言語向けのSDKが提供されております。
- java
- js
- php
- ruby
Amazon Connect Outbound Contact APIの内容
現時点では、下記が提供されております。
API | 内容 |
---|---|
StartOutboundVoiceContact | アウトバウンドコンタクト(コール)を行う |
StopContact | StartOutboundVoiceContactによって発信されたコンタクト(コール)を停止する |
StartOutboundVoiceContact
- アウトバウンドコンタクト(コール)を行う
- IAMユーザーでAPIをコールする場合、下記の権限が必要
- connect:StartOutboundVoiceContact
リクエスト形式
PUT /contact/outbound-voice HTTP/1.1 Content-type: application/json { "Attributes": { "string" : "string" }, "ClientToken": "string", "ContactFlowId": "string", "DestinationPhoneNumber": "string", "InstanceId": "string", "QueueId": "string", "SourcePhoneNumber": "string" }
リクエストボディの内容
パラメータ | 入力必須 | 説明 |
---|---|---|
Attributes | No | コンタクトフローからアクセス可能なkey-value形式の値。 |
ClientToken | No | APIリクエストの冪等性を保証するために設定する ユニークなトークン(大文字と小文字を区別)。 このトークンは作成後7日間有効。 コンタクト(コール)が既に開始されている場合は、コンタクトIDが返されます。 コールが切断されると、新しいコールが開始されます。 |
ContactFlowId | Yes | アウトバウンドコールを行うためのコンタクトフローのID。 |
DestinationPhoneNumber | Yes | 架電先の電話番号。E.164形式で設定 |
InstanceId | Yes | Amazon ConnectのコールセンターインスタンスのID。 |
QueueId | No※ | <キューIDを設定した場合> 発信者IDとしてキューに設定された電話番号が使用され、 <キューIDを設定しない場合> |
SourcePhoneNumber | No※ | Amazon Connectのインスタンスに紐づいている アウトバウンドコール用の電話番号。E.164形式で設定。 |
(※)マニュアルの記載は"Required: No"となっているのですが、いざAPIをコールしてみると、"'Either of QueueId or SourcePhoneNumber should be present'"というエラーが出たので、どちらかは値を設定する必要がございました。
レスポンス形式
HTTP/1.1 200 Content-type: application/json { "contactId": "string" }
レスポンスボディの内容
APIコールが正常に実行された場合、ステータス200が返却されます。
パラメータ | 説明 |
---|---|
contactId | コンタクトID。コンタクトIDは各コールに採番されるもので、Amazon Connectのインスタンス内で管理されるユニークな識別子 |
主なエラーについて
エラーメッセージ | HTTP ステータスコード |
説明 |
---|---|---|
DestinationNotAllowedException | 403 | 宛先の電話番号への発信が許可されていない。 |
InternalServiceException | 500 | リクエスト内容がサービス側のエラーまたは障害により、失敗した。 |
InvalidParameterException | 400 | リクエスト内容に指定したパラメータが無効な値(1つ、もしくはそれ以上)。 |
InvalidRequestException | 400 | リクエスト内容が有効ではない。 |
LimitExceededException | 429 | キュー内で許可されているアクティブなコール数の上限を超えた。 |
OutboundContactNotPermittedException | 403 | (リクエストした)コンタクト(コール)が許可されていない。 |
ResourceNotFoundException | 404 | 指定したリソースが見つからない。 |
StopContact
- StartOutboundVoiceContactによって発信されたコンタクト(コール)を停止する
- IAMユーザーでAPIをコールする場合、下記の権限が必要
- connect:StopContact
リクエスト形式
POST /contact/stop HTTP/1.1 Content-type: application/json { "ContactId": "string", "InstanceId": "string" }
リクエストボディの内容
パラメータ | 入力必須 | 説明 |
---|---|---|
ContactId | No | コンタクト(コール)を識別するユニークなID。 |
InstanceId | Yes | アクティブなコンタクト(コール)がAmazon ConnectのコールセンターインスタンスのID。 |
レスポンス形式
HTTP/1.1 200
レスポンスボディの内容
APIコールが正常に実行された場合、ステータス200が返却されます。
※レスポンスボディは無し
主なエラーについて
エラーメッセージ | HTTP ステータスコード |
説明 |
---|---|---|
ContactNotFoundException | 410 | 指定したコンタクト(コール)のIDがアクティブでないか、存在しない |
InternalServiceException | 500 | リクエスト内容がサービス側のエラーまたは障害により、失敗した |
InvalidParameterException | 400 | リクエスト内容に指定したパラメータが無効な値(1つ、もしくはそれ以上)。 |
InvalidRequestException | 400 | リクエスト内容が有効ではない。 |
ResourceNotFoundException | 404 | 指定したリソースが見つからない。 |
APIをコールしてみる
上記の通り、SDKが複数の言語で提供されておりますが、js(node.js)で試してみます。
準備
AWS SDKの差し替え
AWSから提供されるSDKファイル(aws-sdk.tgz)を展開し、aws-sdkフォルダごと差し替えます。
(aws-sdkが存在しない場合は、そのまま置く)
設定ファイル(config.json)
AWS SDKをコールする為に下記を設定します。
amazon connectの利用リージョンはシドニーにしている為、"region"には"ap-southeast-2"を設定しております。
{ "accessKeyId": <YOUR_ACCESS_KEY_ID>, "secretAccessKey": <YOUR_SECRET_ACCESS_KEY>, "region": "ap-southeast-2" }
StartOutboundVoiceContactをコールするためのファイル(callStartOutboundVoiceContact.js)
// import entire SDK var AWS = require('aws-sdk'); // load config file AWS.config.loadFromPath('./config.json'); // create amazon connect object connect = new AWS.Connect({apiVersion: '2017-08-08'}); // create API request parameter var params = { ContactFlowId: "<YOUR_CONTACT_FLOW_ID>", // 電話番号をE.164形式で設定するため、例えば「050-0000-0000」の場合は、 //国番号(日本:81)を付けて以下のようになります。 DestinationPhoneNumber: "+815000000000", // amazon connectのコールセンターのインスタンスID InstanceId: "<YOUR_INSTANCE_ID>", // 電話番号の設定方法は、DestinationPhoneNumberと同様 SourcePhoneNumber: "+815000000000" }; // call API with parameter connect.startOutboundVoiceContact(params, function(err, data) { if (err) { console.log(err); } else if (data) { console.log(JSON.stringify(data)); } });
StartOutboundVoiceContactをコールする
node callStartOutboundVoiceContact.js
レスポンス
こんな感じで、発信されたコンタクト(コール)のIDが返ってきます。それと並行してDestinationPhoneNumberに指定した電話番号に電話がかかってきます。
{"ContactId":"f5192def-0fb0-479e-bcd8-be4abf7624a2"}
StopContactをコールするためのファイル
パラメータには、StartOutboundVoiceContactを実行したあとに返ってきたContactIdを指定します。
注意点としては、指定したContactIdのコンタクト(コール)が有効な間のみ実行できます。有効な状態とは、電話がかかってきている状態、通話中の状態を意味します。
// import entire SDK var AWS = require('aws-sdk'); // load config file AWS.config.loadFromPath('./config.json'); // create amazon connect object connect = new AWS.Connect({apiVersion: '2017-08-08'}); // create API request parameter var params = { ContactId: "f5192def-0fb0-479e-bcd8-be4abf7624a2", // amazon connectのコールセンターのインスタンスID InstanceId: "<YOUR_INSTANCE_ID>", }; // call API with parameter connect.stopContact(params, function(err, data) { if (err) { console.log(err); } else if (data) { console.log(JSON.stringify(data)); } });
StopContactをコールする
node callStopContact.js
レスポンス
正常終了の場合は、コンタクト(コール)が切断されます。
レスポンスデータについては、何も返ってきません。以下の通り空オブジェクトです。("no news is good news!")
{ }
さいごに
Amazon Connect Outbound Contactは、電話を発信する、切断するというシンプルな機能です。
ただ、冒頭に記載しました通り、色々と応用の効く機能であるため、コンタクトセンターにとっては必要な機能です。