翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 コマンドを使用してリソースアクセス許可を Amazon Connect インスタンスARNの プリンシパルconnect.amazonaws.com
と に追加できます。詳細については、AWS Lambda デベロッパーガイドの「AWS Lambdaのリソースベースのポリシーを使用する」を参照してください。
Amazon Connect インスタンスに Lambda 関数を追加する
Lambda 関数をフローで使用するには、Amazon Connect インスタンスに追加する必要があります。
Lambda 関数をインスタンスに追加する
-
で Amazon Connect コンソールを開きますhttps://console.aws.amazon.com/connect/
。 -
[インスタンス] ページで、[インスタンスエイリアス] 列からインスタンス名を選択します。このインスタンス名は、Amazon Connect へのアクセスURLに使用する に表示されます。
-
ナビゲーションペインで、[フロー] を選択します。
-
[AWS Lambda] セクションの [関数] ドロップダウンボックスを使用して、インスタンスに追加する関数を選択します。
ヒント
このドロップダウンには、インスタンスと同じリージョンにある関数のみが表示されます。関数がリストされていない場合は、 AWS Lambda 新しい Lambda 関数の作成 を選択してコンソールを開きます。
別のリージョンまたはアカウントで Lambda を使用するには、 で AWS Lambda 関数の呼び出し関数 を選択する で、Lambda ARNの を入力します。次に、その Lambda に対応するリソースベースのポリシーを設定し、フローがそれを呼び出すことを許可します。
lambda:AddPermission
を呼び出すには、以下のことが必要です。-
プリンシパルを [connect.amazonaws.com] に設定します。
-
ソースアカウントを、インスタンスが置かれているアカウントに設定します。
-
ソースARNをインスタンスARNの に設定します。
詳細については、「他のアカウントへのアクセス権を関数に付与する」を参照してください。
-
-
[Lambda 関数の追加] を選択します。関数ARNの が Lambda Functions に追加されていることを確認します。
これで、フローでその 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。以下は、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 の解析方法は、関数に使用するランタイムによって異なります。
例えば、次のコードは、 AWS Lambda Node.JS を使用して、関数ブロックを呼び出す 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 または のいずれかであり、フローで AWS Lambda 関数の呼び出しブロックを設定するときに設定JSONする必要があります。レスポンスの検証が 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、
{ "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
次の画像は、[プロンプトのループ] ブロックの [プロパティ] ページを示しています。変数は ブロックで指定されます text-to-speech。
ソース属性に指定した名前が、Lambda から返されたキー名と一致することを確認します。
2. 変数を問い合わせ属性として保存する
変数を問い合わせ属性として保存すると、フロー全体で使用でき、問い合わせレコードに含まれるようになります。
返された値を問い合わせ属性として保存し、参照するには、呼び出し AWS Lambda 関数ブロックの後にフローで問い合わせ属性の設定ブロックを使用します。[タイプ] で、[属性の使用]、[外部] の順に選択します。使用している例に従って、[送信先属性] を MyAccountId
に設定し、[属性] を AccountId
に設定します。その後、MyBalance
と [Balance] (残高) で同じ操作を繰り返します。この設定は、次の画像に示されています。
[ソース属性] としてアドレスを追加し、[送信先のキー] として returnedContactAddress
を使用します。次に、[ソース属性] として CallerType
を追加し、[送信先のキー] として returnedContactType
を使用します。
ソースの外部属性に指定した名前が、Lambda から返されたキー名と一致することを確認します。
チュートリアル: Lambda 関数を作成してフローで呼び出す
ステップ 1: Lambda の例を作成する
にサインイン AWS Management Console し、 で AWS Lambda コンソールを開きますhttps://console.aws.amazon.com/lambda/
。 -
で 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:// で Amazon Connect 管理者ウェブサイトにログインします。
instance name
.my.connect.aws/。 -
ナビゲーションメニューで、[Routing] (ルーティング)、[Flows] (フロー)、[Create a contact flow] (問い合わせフローを作成) の順に移動します。
-
コンタクト属性の設定 ブロックをグリッド上にドラッグし、次の図に示すようにプロパティページを設定します。
-
名前空間 = ユーザー定義。
-
属性 = companyName。
-
[Set manually] (手動で設定) を選択します。値 = GGG。
-
[Save] を選択します。
-
-
プロンプトの再生 ブロックをグリッド上にブロックし、次の図に示すように、プロパティページを設定します。
-
T ext-to-speech またはチャットテキスト を選択し、手動で を設定し、解釈を に設定しますSSML。読み上げるテキストのボックスに、次のテキストを入力します。
Hello, thank you for calling $.Attributes.companyName inc.
-
[Save] を選択します。
-
-
別の プロンプトの再生 ブロックをグリッド上にブロックし、次の図に示すように、プロパティページを設定します。
-
T ext-to-speech またはチャットテキスト を選択し、手動で を設定し、解釈をテキスト に設定します。読み上げるテキストのボックスに、次のテキストを入力します。
Please try again later.
-
[Save] を選択します。
-
-
AWS Lambda 関数の呼び出し ブロックをグリッド上にブロックし、次の図に示すように、プロパティページを設定します。
-
手動で選択 を選択し、ドロップダウンMyFirstConnectLambdaから選択します。
-
送信先キーボックスに、 と入力しますcompanyName。(これは Lambda に送信されます)。
-
[Set dynamically] (動的に設定) ボックスを選択します。
-
[Namespace] (名前空間) で、[User-defined] (ユーザー定義) を選択します。
-
属性 には、 と入力しますcompanyName。
-
[Save] を選択します。
-
-
コンタクト属性の設定 ブロックをグリッド上にドラッグし、[Add another attribute] (別の属性を追加) を選択して、次の図に示すように、プロパティページを設定します。
-
名前空間 = ユーザー定義。属性 = MyBalance。
-
[Set dynamically] (動的に設定) を選択します。
-
名前空間 = 外部。
-
属性 = customerBalance。これは Lambda からの結果です。
-
[Add another attribute (他の属性を追加)] を選択します。
-
名前空間 = ユーザー定義。
-
属性 = マイ URL。
-
[Set dynamically] (動的に設定) を選択します。名前空間 = 外部。
-
属性 = websiteUrl。これは Lambda からの結果です。
-
[Save] を選択します。
-
-
プロンプトの再生 ブロックをグリッド上にブロックし、次の図に示すように、プロパティページを設定します。
-
T ext-to-speech またはチャットテキスト を選択し、解釈を に設定します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、保存 を選択します。
ここで、動作を試してみます。番号を呼び出します。あいさつのメッセージ、残高、アクセスするウェブサイトが聞こえるはずです。