Amazon Connect
管理者ガイド

Lambda 関数を呼び出す

Amazon Connect は お客様のシステムと連携して、問い合わせフロー内のさまざまなパスを動的に使用することができます。これを実現するには、問い合わせフローに Lambda 関数を呼び出して、結果を取得し、お客様独自のサービスを呼び出すか、他の AWS データストアまたはサービスと連携します。詳細については、「AWS Lambda Developer Guide」を参照してください。

問い合わせフローから Lambda 関数を呼び出すには、以下のタスクを実行します。

Lambda 関数の作成

任意のランタイムを使用して Lambda 関数を作成し、設定します。詳細については、『AWS Lambda Developer Guide』の「Lambda 関数の作成」を参照してください。

コンタクトセンターと同じリージョンに Lambda 関数を作成した場合は、次のタスク、Lambda 関数を追加するで説明するように、Amazon Connect コンソールを使用して Lambda 関数をインスタンスに追加できます。これにより、Amazon Connect が Lambda 関数を呼び出すことを許可するリソースアクセス許可が自動的に追加されます。それ以外の場合、Lambda 関数が別の地域にある場合は、問い合わせフローデザイナーを使用して問い合わせフローに追加し、add-permission コマンドを使用して、connect.amazonaws.com のプリンシパルと Amazon Connect インスタンスの ARN を使用してリソースアクセス許可を追加できます。詳細については、『AWS Lambda Developer Guide』の「AWS Lambda でリソースベースのポリシーを使用する」を参照してください。

Lambda 関数を追加する

インスタンスに Lambda 関数を追加した後は、それを問い合わせフローで簡単に使用できます。

Lambda 関数をインスタンスに追加する

  1. Amazon Connect コンソール (https://console.aws.amazon.com/connect/) を開きます。

  2. [インスタンスエイリアス] 列からインスタンスの名前を選択します。

  3. ナビゲーションペインで、[問い合わせフロー] を選択します。

  4. [AWS Lambda] の場合は、[関数] からインスタンスに追加する関数を選択します。このリストには、インスタンスと同じリージョンにある関数のみが含まれています。リストに関数がない場合は、[Create a new Lambda function (新しい Lambda 関数の作成)] を選択して、AWS Lambda コンソールを開きます。

  5. [Lambda 関数の追加] を選択します。関数の ARN が [Lambda Functions (Lambda 関数)] の下に追加されていることを確認します。

Lambda 関数を呼び出す

問い合わせフローから Lambda 関数を呼び出すには、次の手順を使用します。

問い合わせフローで関数を呼び出すには

  1. 問い合わせフローを開くか、作成します。

  2. [AWS Lambda 関数を呼び出す] ブロックを挿入して入力と出力を接続します。

  3. 設定を編集するブロックを選択します。

  4. [Lambda function (Lambda 関数)] で、関数を選択します。このリストには、前のタスクでインスタンスに追加した関数のみが含まれています。

  5. (オプション) [関数入力パラメータ] を追加します。これは、呼び出されたときに Lambda 関数に送信されるキーと値のペアです。関数の [タイムアウト] の値を指定することもできます。

問い合わせフローから Lambda 関数を呼び出すたびに、進行中の問い合わせに関するデフォルトの一連の情報と、追加された [AWS Lambda 関数を呼び出す] ブロックの [関数入力パラメータ] で定義された追加の属性を渡します。

Lambda 関数への 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-XXXXXXXXXX", "Queue": "QueueName", "SystemEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" } }, "Parameters": { "sentAttributeKey": "sentAttributeValue" } }, "Name": "ContactFlowEvent" }

このリクエストは次の 3 つのパートに分かれています。

  • 問い合わせデータ— 問い合わせのたびに、Amazon Connect によって必ず渡されます。一部のパラメータは省略可能です。

  • ユーザー属性— これらは、問い合わせフローの [問い合わせ属性の設定] ブロックの使用時など、以前に問い合わせに関連付けられていた属性です。このマップは、保存されている属性が何もない場合は空の場合もあります。

  • パラメータ— これらは Lambda 関数を作成したときに定義されたこの呼び出しに固有のパラメータです。

呼び出しの再試行ポリシー

問い合わせフロー内の Lambda 呼び出しがスロットリングされた場合、リクエストは再試行されます。一般的なサービス障害 (500 エラー) が発生した場合も再試行されます。

同期呼び出しがエラーを返す場合、Amazon Connect は最大 8 秒間にわたり最大 3 回再試行します。この時点で、フローは Error ブランチを下に進みます。

Lambda 再試行の詳細については、「エラー処理と AWS Lambda での自動再試行」を参照してください。

イベントを解析するように Lambda 関数を設定する

Lambda 関数と Amazon Connect との間で属性を正しく渡すために、[AWS Lambda 関数を呼び出す] ブロックから送られた JSON リクエストを正しく解析し、適用する必要があるビジネスロジックを定義するように関数を設定します。JSON がどのように解析されるかは、関数に使用するランタイムによって異なります。たとえば、次の例は、sing Node.JS を使用して sentAttributeKey にアクセスする方法を説明しています。

var receivedAttribute = event['Details']['Parameters']['sentAttributeKey'];

関数のレスポンスを検証する

Lambda 関数のレスポンスは、単純な文字列マップである必要があります。このマップは最大で 32 k です。Lambda に到達できない場合、関数は例外をスローし、レスポンスが認識されないか、Lambda 関数が制限時間を超え、問い合わせフローは Error ラベルへジャンプします。

Lambda 関数から返された出力をテストして、Amazon Connect に返されたときに正常に使用されることを確認します。次の例は、Node.JS でのサンプルのレスポンスを示します。

exports.handler = function(event, context, callback) { var resultMap = { Name:'CustomerName', Address:'1234 Main Road', CallerType:'Patient' } callback(null, resultMap); }

この例は、Python を使用したサンプルのレスポンスを示します。

def lambda_handler(event, context): resultMap = {"Name":"CustomerName","Address":"1234 Main Road","CallerType":"Patient"} return resultMap

関数から返される出力は、英数字、ダッシュ、アンダースコアのみが含まれる値を持つ、キーと値のペアのフラットオブジェクトである必要があります。ネストされた複雑なオブジェクトはサポートされません。返されるデータのサイズは、UTF-8 データの 32 KB 未満である必要があります。

次の例は、これらの Lambda 関数からの JSON 出力を示します。

{ "Name": "CustomerName", "Address": "1234 Main Road", "CallerType": "Patient" }

Lambda 関数のレスポンスを消費する

問い合わせフローで関数のレスポンスを使用するには 2 つの方法があります。Lambda から返される変数を直接参照するか、問い合わせ属性として関数から返される値を保存してから、保存された属性を参照することができます。Lambda からのレスポンスへの外部参照を使用する場合は、その参照は常に、最近呼び出された関数からのレスポンスを受け取ります。後続の関数が呼び出される前に関数からのレスポンスを使用するには、レスポンスを問い合わせ属性として保存するか、次の関数にパラメータとして渡す必要があります。

変数に直接アクセスする

変数に直接アクセスする場合、それらは問い合わせフローブロックで使用できますが、問い合わせ追跡レコード (CTR) には含まれません。問い合わせフローブロックで直接これらの変数にアクセスするには、[AWS Lambda 関数を呼び出す] ブロックの後にブロックを追加してから、次の例に示すようにそれらの属性を参照します。

Name - $.External.Name Address - $.External.Address CallerType - $.External.CallerType

ソース属性に指定した名前が、Lambda から返されたキー名と一致することを確認します。

変数を問い合わせ属性として保存する

変数を問い合わせ属性として保存すると、問い合わせフロー全体で使用でき、CTR に含まれるようになります。

問い合わせ属性として返された値を保存してから、それらを参照するには、問い合わせフローの [AWS Lambda 関数を呼び出す] ブロックの後で、[問い合わせ属性の設定] ブロックを使用します。[タイプ] で、[外部] を選択します。使用している例に従って、[宛先キー] を returnedContactName に設定し、[ソース属性] を Name に設定します。

アドレスを [ソース属性] として追加し、[宛先キー] として returnedContactAddress を使用します。次に、[ソース属性] として callerType を追加し、[宛先キー] に returnedContactType を使用します。

ソース属性に指定した名前が、Lambda から返されたキー名と一致することを確認します。