本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
授予 Amazon Connect 對函數 AWS Lambda 的存取權
Amazon Connect 可與您的系統互動,動態採取流程中的不同路徑。若要達成此目標,請叫用流程中的 AWS Lambda 函數、擷取結果,並呼叫您自己的服務或與其他 AWS 資料存放區或服務互動。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》。
若要從流程調用 Lambda 函數,請完成以下任務。
任務
建立 Lambda 函數
使用任何執行期建立 Lambda 函數並進行設定。如需詳細資訊,請參閱 AWS Lambda 開發人員指南中的 Lambda 入門。
若您在相同區域建立 Lambda 函數作為聯絡中心,可以如下個任務 新增 Lambda 函數至 Amazon Connect 執行個體 所述,使用 Amazon Connect 主控台,新增 Lambda 函數到您的執行個體。這會自動新增資源許可,讓 Amazon Connect 調用 Lambda 函數。否則,如果 Lambda 函數位於不同的 區域,您可以使用流量設計工具將其新增至流程,並使用 add-permission 命令新增資源許可,以及 Amazon Connect 執行個體ARN的主體 connect.amazonaws.com
和 。詳情請參閱 AWS Lambda 使用者指南中的為 AWS Lambda使用資源型政策。
新增 Lambda 函數至 Amazon Connect 執行個體
您必須先將 Lambda 函數新增至 Amazon Connect 執行個體,然後才可在流程中使用該函數。
將 Lambda 函數新增到您的執行個體
-
在 開啟 Amazon Connect 主控台https://console.aws.amazon.com/connect/
。 -
在執行個體頁面的執行個體別名資料欄中選擇您的執行個體名稱。此執行個體名稱會出現在URL您用來存取 Amazon Connect 的 中。
-
在導覽窗格中,選擇流程。
-
在 AWS Lambda 區段中,使用 函數 下拉式清單,選擇要新增到執行個體的函數。
提示
下拉式清單僅列出與您執行個體相同區域中的函數。如果未列出任何函數,請選擇建立新的 Lambda 函數 ,這會開啟 AWS 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 函數,您都會傳遞一組與進行中聯絡人相關的預設資訊,以及針對新增的調用 AWS Lambda 函數區塊在函數輸入參數區段中定義的任何其他屬性。
以下是 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" }
該請求分為兩個部分:
-
聯絡資料 – 這是每個聯絡都會由 Amazon Connect 傳遞。部分參數是選用的。
此區段可能包括之前與聯絡人關聯的屬性,例如在流程中使用設定聯絡人屬性區塊時。如果沒有任何已儲存的屬性,此對應可能是空的。
下圖顯示這些屬性在設定連絡人屬性的屬性頁面中的顯示位置。
-
參數 – 這些參數專屬於此呼叫,在您建立 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 最多會重試 3 次,最長 8 秒。此時,流程會進入錯誤分支。
若要進一步了解 Lambda 如何重試,請參閱 AWS Lambda 中的錯誤處理和自動重試。
叫用多個 Lambda 函數的最佳實務
Amazon Connect 會將一系列 Lambda 函數的持續時間限制為 20 秒。當總執行時間超過此閾值時,此函數會逾時並出現錯誤訊息。由於客戶在 Lambda 函數執行時不會聽見任何聲音,因此我們建議在函數之間加入播放提示區塊,在長時間互動的期間持續讓客戶保持參與。
透過使用播放提示區塊分解 Lambda 函數鏈,您可以調用持續時間超過 20 秒閾值的多個函數。
設定您的 Lambda 函數以剖析事件
若要在 Lambda 函數和 Amazon Connect 之間成功傳遞屬性和參數,請設定函數以正確剖析從叫用 AWS Lambda 函數區塊傳送的JSON請求或設定聯絡屬性 ,並定義應套用的任何業務邏輯。JSON 剖析的方式取決於您用於函數的執行時間。
例如,下列程式碼顯示如何使用 Node.JS exampleAttributeKey1
從exampleParameterKey1
叫用 AWS Lambda 函數區塊和設定聯絡人屬性區塊存取 :
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 回應可以高達 32 KB。如果您無法連接 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
從函數傳回的輸出必須為一般物件 (flat object) 的鍵值對,其中的值僅能包含英數字元、破折號及底線。傳回的資料大小必須小於 32 KB 的 UTF-8 資料。
下列範例顯示來自這些 Lambda 函數的JSON輸出:
{ "AccountId": "a12345689", "Balance": "$1000" }
如果回應驗證設定為 JSON,Lambda 函數甚至可以傳回巢狀 JSON,例如:
{ "Name": { "First": "John", "Last": "Doe" }, "AccountId": "a12345689", "OrderIds": ["x123", "y123"] }
只要它們是簡單的鍵值對,您可以傳回任何結果。
使用 Lambda 函數回應
有兩種方式可在您的流程中使用函數回應。 您可以直接參考 Lambda 傳回的變數,或將函數傳回的數值存放為聯絡屬性,然後參考存放的屬性。 對 Lambda 函數的回應使用外部參考時,參考會一律從最新調用的函數接收回應。若要在後續函數叫用前使用函數的回應,回應必須儲存為聯絡屬性,或以參數形式傳遞至下一個函數。
1. 直接存取變數
如果您直接存取變數,可以在流程區塊中使用它們,但它們不會包含在聯絡記錄中。若要直接在流程區塊中存取這些變數,請在叫用 AWS Lambda 函數區塊之後新增區塊,然後參考下列範例所示的屬性:
Name - $.External.Name
Address - $.External.Address
CallerType - $.External.CallerType
下圖顯示播放提示區塊的屬性頁面。變數會在 區塊中 text-to-speech指定。
確認在來源屬性中指定的名稱與 Lambda 回傳的金鑰名稱相同。
2. 將變數存為聯絡屬性
如果您將變數存放為聯絡屬性,則可以在流程任何地方使用這些屬性,而且它們會包含在聯絡紀錄中。
若要將傳回的值儲存為聯絡屬性,然後在叫用 AWS Lambda 函數區塊之後,在流程中使用設定聯絡屬性區塊。針對類型選擇使用屬性、外部。按照我們使用的範例,將目標屬性設為 MyAccountId
,並將屬性設為 AccountId
,並為 MyBalance
和平衡執行相同的操作。此組態顯示於下圖中。
將地址新增為來源屬性,並用 returnedContactAddress
作為目標金鑰。然後新增 CallerType
作為來源屬性,並將 returnedContactType
用於目標鍵,如下圖所示。
確認在來源外部屬性中指定的名稱與 Lambda 回傳的金鑰名稱相同。
教學課程:建立 Lambda 函數並在流程中調用
步驟 1:建立 Lambda 範例
登入 AWS Management Console 並在 開啟 AWS Lambda 主控台https://console.aws.amazon.com/lambda/
。 -
在 中 AWS Lambda,選擇建立函數 。
-
如果尚未選擇,請選擇從頭開始撰寫。在基本資訊 下,針對函數名稱 ,輸入 MyFirstConnectLambda。針對所有其他選項,請接受預設值。這些選項顯示在 AWS Lambda 主控台的下圖中。
-
選擇建立函數。
-
在程式碼原始碼方塊的 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。
-
選擇部署。
-
選擇部署後,請選擇測試以啟動測試編輯器。
-
在設定測試事件對話方塊中,選擇建立新事件。對於事件名稱 ,輸入 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 (儲存)。
-
選擇 測試。您應該會看到類似下列影像的內容:
您的餘額將不同。產生亂數的原始碼。
步驟 2:將 Lambda 新增到 Amazon Connect
-
前往 Amazon Connect 主控台,網址為 https://console.aws.amazon.com/connect/
。 -
選擇您的 Amazon Connect 執行個體別名。
-
在導覽功能表中,選擇流程。
-
在 AWS Lambda 區段中,使用 Lambda Functions 下拉式方塊選取 MyFirstConnectLambda。
-
選擇新增 Lambda 函數。
步驟 3:建立聯絡流程
以下影像是您要使用此程序中的步驟建置的流程範例。它包含以下區塊:設定聯絡屬性、播放提示、調用 AWS Lambda 函數,另一個設定聯絡屬性區塊、另一個播放提示塊,最後是中斷連線區塊。
-
登入 Amazon Connect 管理網站https://
instance name
.my.connect.aws/。 -
在導覽功能表中,移至路由、流程、建立連絡流程。
-
將 設定聯絡屬性 區塊拖曳到網格上,並設定其屬性頁面,如下圖所示:
-
命名空間 = 使用者定義。
-
屬性 = companyName。
-
選擇手動設定。值 = GGG。
-
選擇 Save (儲存)。
-
-
將 播放提示 區塊拖曳到網格上,並設定其屬性頁面,如下圖所示:
-
選擇 Text-to-speech 或聊天文字 ,手動設定 ,並將解譯設定為 SSML。在要朗讀文字的方塊中輸入下列文字:
Hello, thank you for calling $.Attributes.companyName inc.
-
選擇 Save (儲存)。
-
-
將另一個 播放提示 區塊拖曳到網格上,並設定其屬性頁面,如下圖所示:
-
選擇Text-to-speech 或聊天文字 ,手動設定 ,並將解譯設定為文字 。在要朗讀文字的方塊中輸入下列文字:
Please try again later.
-
選擇 Save (儲存)。
-
-
將 叫用 AWS Lambda 函式 區塊拖曳到網格上,並設定其屬性頁面,如下圖所示:
-
選擇手動選取 ,然後從下拉式清單MyFirstConnectLambda中選擇 。
-
在目的地金鑰方塊中,輸入 companyName。(這會被傳送到 Lambda。)
-
選擇動態設定方塊
-
對於命名空間,選擇使用者定義。
-
對於屬性 ,輸入 companyName。
-
選擇 Save (儲存)。
-
-
將 設定聯絡屬性 區塊拖曳到網格上,並選擇新增另一屬性,然後設定其屬性頁面,如下圖所示:
-
命名空間 = 使用者定義。屬性 = MyBalance。
-
選擇動態設定。
-
命名空間 = 外部。
-
屬性 = customerBalance。這是來自 Lambda 的結果。
-
選擇 新增其他屬性。
-
命名空間 = User-defined。
-
屬性 = 我的 URL。
-
選擇動態設定。命名空間 = 外部。
-
屬性 = websiteUrl。這是來自 Lambda 的結果。
-
選擇 Save (儲存)。
-
-
將 播放提示 區塊拖曳到網格上,並設定其屬性頁面,如下圖所示:
-
選擇 Text-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作為名稱,然後選擇發佈 。
-
在導覽功能表中,請前往頻道、電話號碼。
-
請選擇您的電話號碼。
-
選取 MyFirstConnectFlow ,然後選擇儲存 。
現在嘗試一下。撥打該電話號碼。您應該聽到一條問候訊息,您的餘額,以及要造訪的網站。