翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Connect の AWS Lambda
関数へのアクセスを付与する
Amazon Connect は独自のシステムと連携して、フロー内のさまざまなパスを動的に使用することができます。これを実現するには、フローで AWS Lambda 関数を呼び出し、結果を取得し、独自のサービスを呼び出すか、他の AWS データストアやサービスとやり取りします。詳細については、AWS Lambda デベロッパーガイドを参照してください。
フローから Lambda 関数を呼び出すには、以下のタスクを実行します。
タスク
「Lambda 関数の作成」
任意のランタイムを使用して Lambda 関数を作成し、設定します。詳細については「AWS Lambda デベロッパーガイド」の「Lambda の開始方法」を参照してください。
コンタクトセンターと同じリージョンに Lambda 関数を作成した場合は、次のタスク Amazon Connect インスタンスに Lambda 関数を追加する で説明するように、Amazon Connect コンソールを使用して Lambda 関数をインスタンスに追加できます。これにより、Amazon Connect が Lambda 関数を呼び出すことを許可するリソースのアクセス許可が自動的に追加されます。それ以外の場合、Lambda 関数が別のリージョンにある場合は、フローデザイナーを使用してフローに追加し、add-permission コマンドを使用して、connect.amazonaws.com
のプリンシパルと Amazon Connect インスタンスの ARN を使用してリソースのアクセス許可を追加できます。詳細については、AWS Lambda デベロッパーガイドの「AWS Lambdaのリソースベースのポリシーを使用する」を参照してください。
Amazon Connect インスタンスに Lambda 関数を追加する
Lambda 関数をフローで使用するには、Amazon Connect インスタンスに追加する必要があります。
Lambda 関数をインスタンスに追加する
-
Amazon Connect コンソール (https://console.aws.amazon.com/connect/
) を開きます。 -
[インスタンス] ページで、[インスタンスエイリアス] 列からインスタンス名を選択します。このインスタンス名は、Amazon Connect へのアクセスに使用する URL に表示されます。
-
ナビゲーションペインで、[フロー] を選択します。
-
[AWS Lambda] セクションの [関数] ドロップダウンボックスを使用して、インスタンスに追加する関数を選択します。
ヒント
このドロップダウンには、インスタンスと同じリージョンにある関数のみが表示されます。関数が表示されない場合は、新しい Lambda 関数の作成を選択してコンソールを開きます AWS Lambda 。
別のリージョンまたはアカウントで Lambda を使用するには、 AWS Lambda 関数の呼び出し の [関数の選択] の下で、Lambda の ARN を入力します。次に、その Lambda に対応するリソースベースのポリシーを設定し、フローがそれを呼び出すことを許可します。
lambda:AddPermission
を呼び出すには、以下のことが必要です。-
プリンシパルを [connect.amazonaws.com] に設定します。
-
ソースアカウントを、インスタンスが置かれているアカウントに設定します。
-
ソース ARN をインスタンスの ARN に設定します。
詳細については、「他のアカウントへのアクセス権を関数に付与する」を参照してください。
-
-
[Lambda 関数の追加] を選択します。関数の ARN が [Lambda Functions (Lambda 関数)] の下に追加されていることを確認します。
これで、フローでその Lambda 関数を参照できるようになります。
フローからの Lambda 関数の呼び出し
-
フローを開くか、作成します。
-
(統合グループの中の) AWS Lambda 関数の呼び出し ブロックをグリッドに追加します。ブロックと分岐を結合します。
-
[ AWS Lambda 関数の呼び出し] ブロックのタイトルを選択して、プロパティページを開きます。
-
[関数の選択] で、関数のリストからインスタンスに追加した関数を選択します。
-
(任意) [関数入力パラメータ] で、[パラメータを追加する] を選択します。Lambda 関数を呼び出すときにその関数に渡すキーと値のペアを指定できます。関数の [タイムアウト] の値を指定することもできます。
-
[タイムアウト (最大 8 秒)] で、Lambda がタイムアウトするまで待機する時間を指定します。この後、問い合わせはエラーブランチにルーティングされます。
フローからの Lambda 関数の呼び出しごとに、進行中の問い合わせに関連する一連のデフォルト情報と、[Function input parameters] (関数入力パラメータ) セクションに定義されている追加の属性を、追加した [Invoke AWS Lambda function] (関数を呼び出す) ブロックに渡します。
Lambda 関数への JSON リクエストの例を次に示します。
{
"Details": {
"ContactData": {
"Attributes": {
"exampleAttributeKey1": "exampleAttributeValue1"
},
"Channel": "VOICE",
"ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX",
"CustomerEndpoint": {
"Address": "+1234567890",
"Type": "TELEPHONE_NUMBER"
},
"CustomerId": "someCustomerId",
"Description": "someDescription",
"InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX",
"InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK",
"InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX",
"LanguageCode": "en-US",
"MediaStreams": {
"Customer": {
"Audio": {
"StreamARN": "arn:aws:kinesisvideo::eu-west-2:111111111111:stream/instance-alias-contact-ddddddd-bbbb-dddd-eeee-ffffffffffff/9999999999999",
"StartTimestamp": "1571360125131", // Epoch time value
"StopTimestamp": "1571360126131",
"StartFragmentNumber": "100" // Numberic value for fragment number
}
}
},
"Name": "ContactFlowEvent",
"PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX",
"Queue": {
"ARN": "arn:aws:connect:eu-west-2:111111111111:instance/cccccccc-bbbb-dddd-eeee-ffffffffffff/queue/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"Name": "PasswordReset"
"OutboundCallerId": {
"Address": "+12345678903",
"Type": "TELEPHONE_NUMBER"
}
},
"References": {
"key1": {
"Type": "url",
"Value": "urlvalue"
}
},
"SystemEndpoint": {
"Address": "+1234567890",
"Type": "TELEPHONE_NUMBER"
}
},
"Parameters": {"exampleParameterKey1": "exampleParameterValue1",
"exampleParameterKey2": "exampleParameterValue2"
}
},
"Name": "ContactFlowEvent"
}
このリクエストは次の 2 つのパートに分かれています。
-
問い合わせデータ – 問い合わせのたびに、Amazon Connect によって必ず渡されます。一部のパラメータは省略可能です。
このセクションには、フローの [Set contact attributes] (問い合わせ属性の設定) ブロックの使用時など、以前に問い合わせに関連付けられていた属性が含まれることがあります。このマップは、保存されている属性が何もない場合は空の場合もあります。
次の図は、これらの属性が、[問い合わせ属性の設定] のプロパティページに表示される場所を示しています。
-
パラメータ – これらは Lambda 関数を作成したときに定義されたこの呼び出しに固有のパラメータです。次の図は、これらのパラメータが、[ AWS Lambda 関数の呼び出し] ブロックのプロパティページに表示される場所を示しています。
Lambda の呼び出しブロックは、プリミティブデータ型とネストされた JSON の両方に対応する JSON 形式の入力パラメータを受け取ることができます。Invoke Lambda ブロックで活用できる JSON 入力の例は、次のとおりです。
{
"Name": "Jane",
"Age":10,
"isEnrolledInSchool": true,
"hobbies": {
"books":["book1", "book2"],
"art":["art1", "art2"]
}
}
呼び出しの再試行ポリシー
フロー内の Lambda 呼び出しがスロットリングされた場合、リクエストは再試行されます。一般的なサービス障害 (500 エラー) が発生した場合も再試行されます。
同期呼び出しがエラーを返す場合、Amazon Connect は最大 8 秒間にわたり最大 3 回再試行します。この時点で、フローは Error ブランチを下に進みます。
Lambda の再試行方法の詳細については、AWS 「Lambda でのエラー処理と自動再試行」を参照してください。
複数の Lambda 関数を呼び出すためのベストプラクティス
Amazon Connect は、Lambda 関数のシーケンスの持続期間を 20 秒に制限します。合計実行時間がこのしきい値を超えると、エラーメッセージでタイムアウトします。Lambda 関数の実行中は無音になるため、その実行時間が長くなる場合に顧客が関心を失わないよう、関数間に [プロンプトの再生] ブロックを追加することをお勧めします。
Lambda 関数の連結を [プロンプトの再生] ブロックで分割すると、20 秒のしきい値を超えて実行を継続する複数の関数を呼び出すことができます。
イベントを解析するよう Lambda 関数を設定する
Lambda 関数と Amazon Connect の間で属性とパラメータを正常に渡すには、呼び出し関数ブロックまたは問い合わせ属性の設定から送信された JSON リクエストを正しく解析するように AWS Lambda 関数を設定し、適用する必要があるビジネスロジックを定義します。JSON がどのように解析されるかは、関数に使用するランタイムによって異なります。
例えば、次のコードは、Node.JS を使用して AWS Lambda 関数ブロックを呼び出す exampleParameterKey1
および 問い合わせ属性の設定 ブロックexampleAttributeKey1
から にアクセスする方法を示しています。
exports.handler = function(event, context, callback) {
// Example: access value from parameter (Invoke AWS Lambda function)
let parameter1 = event['Details']['Parameters']['exampleParameterKey1'];
// Example: access value from attribute (Set contact attributes block)
let attribute1 = event['Details']['ContactData']['Attributes']['exampleAttributeKey1'];
// Example: access customer's phone number from default data
let phone = event['Details']['ContactData']['CustomerEndpoint']['Address'];
// Apply your business logic with the values
// ...
}
関数のレスポンスを検証する
ヒント
配列の参照はフローではサポートされていません。配列は別の Lambda 関数でのみ使用できます。
Lambda 関数のレスポンスは STRING_MAP または JSON のいずれかであり、フローで AWS Lambda 関数の呼び出しブロックを設定するときに設定する必要があります。レスポンスの検証が STRING_MAP に設定されている場合、Lambda 関数は文字列型のキーバリューのペアのフラットオブジェクトを返す必要があります。それ以外の場合、レスポンスの検証が JSON に設定されている場合、Lambda 関数はネストされた JSON を含む任意の有効な JSON を返すことができます。

Lambda のレスポンスは最大 32kb となる場合があります。Lambda にアクセスできない場合、関数が例外を出力した場合、レスポンスが理解不能な場合、または Lambda 関数が制限時間を超えた場合、フローは Error
ラベルへジャンプします。
Lambda 関数から返された出力をテストして、Amazon Connect に返されたときに正常に使用されることを確認します。次の例は、Node.JS でのサンプルのレスポンスを示します。
exports.handler = function(event, context, callback) {
// Extract data from the event object
let phone = event['Details']['ContactData']['CustomerEndpoint']['Address'];
// Get information from your APIs
let customerAccountId = getAccountIdByPhone(phone);
let customerBalance = getBalanceByAccountId(customerAccountId);
let resultMap = {
AccountId: customerAccountId,
Balance: '$' + customerBalance,
}
callback(null, resultMap);
}
この例は、Python を使用したサンプルのレスポンスを示します。
def lambda_handler(event, context):
// Extract data from the event object
phone = event['Details']['ContactData']['CustomerEndpoint']['Address']
// Get information from your APIs
customerAccountId = getAccountIdByPhone(phone)
customerBalance = getBalanceByAccountId(customerAccountId)
resultMap = {
"AccountId": customerAccountId,
"Balance": '$%s' % customerBalance
}
return resultMap
関数から返される出力は、英数字、ダッシュ、アンダースコアのみが含まれる値を持つ、キーと値のペアのフラットオブジェクトである必要があります。返されるデータのサイズは、32 KB 未満の UTF-8 データである必要があります。
次の例は、これらの Lambda 関数からの JSON 出力を示します。
{
"AccountId": "a12345689",
"Balance": "$1000"
}
レスポンスの検証が JSON に設定されている場合、Lambda 関数はネストされた JSON を含む任意の有効な JSON を返すこともできます。例は次のとおりです。
{
"Name": {
"First": "John",
"Last": "Doe"
},
"AccountId": "a12345689",
"OrderIds": ["x123", "y123"]
}
単純なキーと値のペアであれば、任意の結果を返すことができます。
Lambda 関数のレスポンスを使用する
フローで関数のレスポンスを使用するには 2 つの方法があります。Lambda から返される変数を直接参照するか、問い合わせ属性として関数から返される値を保存してから、保存された属性を参照することができます。Lambda 関数からのレスポンスへの外部参照を使用する場合は、その参照は常に、直近に呼び出された関数からのレスポンスを受け取ります。後続の関数が呼び出される前に関数からのレスポンスを使用するには、レスポンスを問い合わせ属性として保存するか、次の関数にパラメータとして渡す必要があります。
1. 変数に直接アクセスする
変数に直接アクセスする場合、それらはフローブロックで使用できますが、問い合わせレコードには含まれません。フローブロック内でこれらの変数に直接アクセスするには、呼び出し AWS Lambda 関数ブロックの後に ブロックを追加し、次の例に示すように属性を参照します。
Name - $.External.Name
Address - $.External.Address
CallerType - $.External.CallerType
次の画像は、[プロンプトのループ] ブロックの [プロパティ] ページを示しています。変数は、[テキスト読み上げ] ブロックで指定されます。
![[プロンプトの再生] ブロックの [プロパティ] ページ。](images/lambda-useExternal.png)
ソース属性に指定した名前が、Lambda から返されたキー名と一致することを確認します。
2. 変数を問い合わせ属性として保存する
変数を問い合わせ属性として保存すると、フロー全体で使用でき、問い合わせレコードに含まれるようになります。
返された値を問い合わせ属性として保存し、参照するには、呼び出し AWS Lambda 関数ブロックの後にフローで問い合わせ属性の設定ブロックを使用します。[タイプ] で、[属性の使用]、[外部] の順に選択します。使用している例に従って、[送信先属性] を MyAccountId
に設定し、[属性] を AccountId
に設定します。その後、MyBalance
と [Balance] (残高) で同じ操作を繰り返します。この設定は、次の画像に示されています。
![[コンタクト属性の設定] ブロックの [プロパティ] ページ。](images/lambda-useInSetAttributes.png)
[ソース属性] としてアドレスを追加し、[送信先のキー] として returnedContactAddress
を使用します。次に、[ソース属性] として CallerType
を追加し、[送信先のキー] として returnedContactType
を使用します。
![[プロンプトの再生] ブロックの [プロパティ] ページ。](images/lambda-useAttributeInPlayPrompt.png)
ソースの外部属性に指定した名前が、Lambda から返されたキー名と一致することを確認します。
チュートリアル: Lambda 関数を作成してフローで呼び出す
ステップ 1: Lambda の例を作成する
にサインイン AWS Management Console し、 AWS Lambda コンソールを https://console.aws.amazon.com/lambda/
://www.com で開きます。 -
で AWS Lambda、関数の作成を選択します。
-
まだ選択されていない場合は、[一から作成] を選択します。[基本的な情報] の [関数名] に「MyFirstConnectLambda」と入力します。その他すべてのオプションについては、デフォルト値を受け入れます。これらのオプションは、次の AWS Lambda コンソールの画像に示されています。
-
[Create function (関数の作成)] を選択します。
-
[コードソース] ボックスの [index.js] タブで、コードエディタからテンプレートコードを削除します。
-
次の図に示すように、次のコードをコピーしてコードエディタに貼り付けます。
exports.handler = async (event, context, callback) => { // Extract information const customerNumber = event.Details.ContactData.CustomerEndpoint.Address; const companyName = event.Details.Parameters.companyName; // Fetch data const balance = await fetchBalance(customerNumber, companyName); const support = await fetchSupportUrl(companyName); // Prepare result const resultMap = { customerBalance: balance, websiteUrl: support } callback(null, resultMap); } async function fetchBalance(customerPhoneNumber, companyName) { // Get data from your API Gateway or Database like DynamoDB return Math.floor(Math.random() * 1000); } async function fetchSupportUrl(companyName) { // Get data from your API Gateway or Database like DynamoDB return 'www.GGG.com/support'; }
このコードは、customerBalance に対してランダムな結果を生成します。
-
[デプロイ] を選択します。
-
[デプロイ] を選択した後、[テスト] を選択してテストエディタを起動します。
-
[テストイベントの設定] ダイアログボックスで、[Create new event] (新しいイベントの作成) を選択します。[イベント名] で、テスト名として「ConnectMock」と入力します。
-
[イベント JSON] ボックスでサンプルコードを削除し、代わりに次のコードを入力します。
{ "Details": { "ContactData": { "Attributes": {}, "Channel": "VOICE", "ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "CustomerEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" }, "InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK", "InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX", "PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "Queue": { "ARN": "arn:aws:connect:eu-west-2:111111111111:instance/cccccccc-bbbb-dddd-eeee-ffffffffffff/queue/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Name": "PasswordReset" }, "SystemEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" } }, "Parameters": { "companyName": "GGG" } }, "Name": "ContactFlowEvent" }
-
[Save] を選択します。
-
[Test] を選択します。次の画像のような結果が表示されます。
お客様の実際の残高は異なります。コードにより、乱数が生成されます
ステップ 2: Amazon Connect に Lambda を追加する
-
Amazon Connect コンソール (https://console.aws.amazon.com/connect/
) に移動します。 -
Amazon Connect インスタンスエイリアスを選択します。
-
ナビゲーションメニューで、[Flows] (フロー) を選択します。
-
AWS Lambda セクションで、Lambda Functions ドロップダウンボックスを使用して MyFirstConnectLambda を選択します。
-
[Lambda 関数の追加] を選択します。
ステップ 3: 問い合わせフローを作成する
次の図は、この手順のステップを使用して構築するフローの例です。以下のブロックが含まれています。[コンタクト属性の設定]、[プロンプトの再生]、[ AWS Lambda 関数の呼び出し]、もう 1 つの [コンタクト属性の設定] ブロック、もう 1 つの [プロンプトの再生] ブロック、そして最後に [切断] ブロックです。

-
https://
instance name
.my.connect.aws/ で Amazon Connect 管理者ウェブサイトにログインします。 -
ナビゲーションメニューで、[Routing] (ルーティング)、[Flows] (フロー)、[Create a contact flow] (問い合わせフローを作成) の順に移動します。
-
コンタクト属性の設定 ブロックをグリッド上にドラッグし、次の図に示すようにプロパティページを設定します。
-
名前空間 = ユーザー定義。
-
属性 = companyName。
-
[Set manually] (手動で設定) を選択します。値 = GGG。
-
[Save] を選択します。
-
-
プロンプトの再生 ブロックをグリッド上にブロックし、次の図に示すように、プロパティページを設定します。
-
[テキスト読み上げまたはチャットテキスト]、[Set manually] (手動設定) の順に選択し、[解釈する] を [SSML] に設定します。読み上げるテキストのボックスに、次のテキストを入力します。
Hello, thank you for calling $.Attributes.companyName inc.
-
[Save] を選択します。
-
-
別の プロンプトの再生 ブロックをグリッド上にブロックし、次の図に示すように、プロパティページを設定します。
-
[テキスト読み上げまたはチャットテキスト]、[Set manually] (手動設定) の順に選択し、[解釈する] を [テキスト] に設定します。読み上げるテキストのボックスに、次のテキストを入力します。
Please try again later.
-
[Save] を選択します。
-
-
AWS Lambda 関数の呼び出し ブロックをグリッド上にブロックし、次の図に示すように、プロパティページを設定します。
-
[Select manually] (手動で選択) を選択し、ドロップダウンから [MyFirstConnectLambda] を選択します。
-
[Destination Key] (宛先キー) ボックスに、「companyName」と入力します。(これは Lambda に送信されます)。
-
[Set dynamically] (動的に設定) ボックスを選択します。
-
[Namespace] (名前空間) で、[User-defined] (ユーザー定義) を選択します。
-
[属性] に、「companyName」と入力します。
-
[Save] を選択します。
-
-
コンタクト属性の設定 ブロックをグリッド上にドラッグし、[Add another attribute] (別の属性を追加) を選択して、次の図に示すように、プロパティページを設定します。
-
名前空間 = ユーザー定義。属性 = MyBalance。
-
[Set dynamically] (動的に設定) を選択します。
-
名前空間 = 外部。
-
属性 = customerBalance。これは Lambda からの結果です。
-
[Add another attribute (他の属性を追加)] を選択します。
-
名前空間 = ユーザー定義。
-
属性 = MyURL。
-
[Set dynamically] (動的に設定) を選択します。名前空間 = 外部。
-
属性 = websiteUrl。これは Lambda からの結果です。
-
[Save] を選択します。
-
-
プロンプトの再生 ブロックをグリッド上にブロックし、次の図に示すように、プロパティページを設定します。
-
[テキスト読み上げまたはチャットテキスト] を選択し、[解釈する] を [SSML] に設定します。ボックスに次のテキストを入力します。
Your remaining balance is <say-as interpret-as="characters">$.Attributes.MyBalance</say-as>.
Thank you for calling $.Attributes.companyName.
Visit $.Attributes.MyURL for more information.
-
[Save] を選択します。
-
-
切断/ハングアップ ブロックをグリッドにドラッグします。
-
すべてのブロックを接続して、フローが、この手順の最上部に表示されている画像のようになるようにします。
-
名前として「MyFirstConnectFlow」と入力し、[公開] を選択します。
-
ナビゲーションメニューで、[Channels] (チャネル)、[Phone Numbers] (電話番号) の順に移動します。
-
電話番号を選択します。
-
[MyFirstConnectFlow]、[保存] の順に選択します。
ここで、動作を試してみます。番号を呼び出します。あいさつのメッセージ、残高、アクセスするウェブサイトが聞こえるはずです。