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は、電話を発信する、切断するというシンプルな機能です。
ただ、冒頭に記載しました通り、色々と応用の効く機能であるため、コンタクトセンターにとっては必要な機能です。