本文介紹調用函數組件的配置詳情。此組件可以協助您在流程中調用您在阿里雲Function Compute產品中的自訂函數。通過此組件,您可以在流程中實現自訂商務邏輯,如資料處理、遠程服務調用、訊息投遞、資料存放區等。
組件資訊
元件圖表標 | 組件名稱 |
在調用函數對話方塊中,選擇函數入參標籤頁,在代碼編輯器中輸入 JSON 格式的入參(如 | 調用函數 |
操作概述
使用Function Compute組件時,需要開通阿里雲Function Compute服務並在其中配置、設計函數,總體操作大致分為 3 步:
建立並配置函數:在Function Compute產品中建立並配置函數。
設計函數:在Function Compute產品中設計函數。
組件配置:配置流程中的調用函數組件,協助您在流程中調用您在Function Compute產品中的自訂函數,以實現自訂商務邏輯。
前提條件
已開通Function Compute服務。
1. 建立並配置函數
您可以參考以下步驟建立並配置函數。
進入Function Compute控制台,點擊左側頁面,並在頁面頂部選擇地區,建議該地區與流程所在地區保持一致。在Function Compute FC 3.0 控制台頂部導覽列中,將地區切換為新加坡,然後在左側導覽列中單擊函數列表,進入函數列表頁面。
在函数列表中點擊。
主要配置:函数代码 > 運行環境:選擇合適的運行環境類型。下面樣本將通過的函數進行介紹。
Tab 1 標題
Tab 1 本文
Tab 2 標題
Tab 2 本文
在運行環境配置項中,依次選擇內建運行時 > Python > Python 3.10。
其餘可按需配置。
2. 設計函數
直接使用流程編輯器的函數模板可以協助您聚焦於自訂商務邏輯的實現,並快速部署一個簡單可用的流程函數。
在函数详情頁面的代码頁簽中,將預設的
index.py檔案內容替換為下列模板內容。說明該部分內容是相容流程調用邏輯的WSGI處理常式,不包含您的自訂商務邏輯,您無需修改此檔案中的函數及其內容。
在Function Compute FC 控制台的函數列表中,單擊目標函數名(例如 test1)進入函數詳情頁面,選擇頂部 函數詳情 Tab 頁簽,然後在二級 Tab 欄中單擊 代碼 頁簽,在代碼編輯器中編輯代碼後單擊 部署代碼 按鈕。
import json from my import * # DO NOT CHANGE THIS ENTIRE FILE! # handle wsgi request # about wsgi: https://wsgi.readthedocs.io/en/latest/learn.html def handler(environ, start_response): # get request_body try: request_body_size = int(environ.get('CONTENT_LENGTH', 0)) except ValueError: request_body_size = 0 request_body = environ['wsgi.input'].read(request_body_size) print(request_body) # get path info path_info = environ['PATH_INFO'] print(path_info) # load http triggering request to json # as flow node input args body = json.loads(request_body.decode('utf-8')) # do custom node process if path_info == '/handle_exec': output = handle_exec(body['variables']) elif path_info == '/handle_awake': output = handle_awake( body['asyncId'], body['async_event_data'], body['variables'] ) else: raise Exception('Invalid path ' + path_info) status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return [json.dumps(output).encode('utf-8')]建立指令檔
my.py,將以下代碼複製到my.py檔案中。
以下模板實現了一個根據流程變數輸入(random_number_length)進行對應長度的隨機數字產生,並根據數位奇偶性返回對應流程分支code(even、odd),同時輸出兩個變數至流程中(random、type)的功能。
import random
# impl: py spi handle_exec
def handle_exec(variables) -> dict:
# translate fun request
random_number_length = variables['random_number_length']
random_number = generate_random_by_length(random_number_length)
print("random generated as " + str(random_number))
if (random_number % 2) == 0:
number_type = "even"
else:
number_type = "odd"
result = {
'success': True,
'message': 'OK',
'await': False,
'outputVariables': {
'random': random_number,
'type': number_type
},
'toBranchCode': number_type
}
return result
# impl: py spi handle_awake
def handle_awake(async_id, async_event_data, variables) -> dict:
return {}
def generate_random_by_length(random_number_length) -> int:
length = int(random_number_length)
start = 10 ** (length - 1)
stop = 10 ** length
print("from " + str(start) + "(inclusive) to " + str(stop) + "(exclusive)")
return random.randrange(start, stop)
無論您的自訂邏輯如何,my.py檔案中下列兩個函數是必須的。
下列兩個函數分別用於流程的調用和事件處理,如果您已在Chat Flow中配置了Function Compute組件的事件處理,則無需再進行事件處理。
def handle_exec(variables) -> dictdef handle_awake(async_id, async_event_data, variables) -> dict
無論您的自訂邏輯如何,上述兩個函數的返回結構是固定的。
success:標識了該次函數調用是否成功,如果失敗,流程會拋出錯誤並終止運行。
message:提示資訊,可自訂。
await:是否仍需等待後續事件處理(如果您在流程中配置了Function Compute組件的事件處理),一般情況下無需進行事件處理。如果為False,流程會採納下列輸出變數和分支code進行下一步處理。
outputVariables:輸出至流程的變數名及其值,您可以在後續流程中引用這些變數。只有在await為False時才會被流程採納。
toBranchCode:輸出至流程的分支code(如果您在流程中配置了Function Compute組件的多分支),流程會根據您返回的分支code以及您在流程編輯器中的流程配置決定後續走向。只有在await為False時才會被流程採納。
result = {
'success': True,
'message': 'OK',
'await': False,
'outputVariables': {
'myVarExample1': 'a',
'myVarExample2': 'b'
},
'toBranchCode': 'example'
}
檔案修改後,點擊部署代码。
在函數詳情頁面,單擊代碼頁簽,在內嵌編輯器中編寫函數代碼後,單擊部署代碼。
3. 組件配置
您可以參考以下操作,配置流程中的調用函數組件,協助您在流程中調用您在Function Compute產品中的自訂函數,以實現自訂商務邏輯。
前提條件
可以通過已存在的流程或者建立新的流程進入流程的畫布編排頁面。
進入已存在的流程畫布編排頁面
在頁簽,單擊需編輯的流程名称,進入流程的編排頁面。
建立新的流程進入畫布編排頁面。具體操作請參見建立流程。
單擊畫布上的調用函數元件圖表標,查看右側組件配置地區。
在流程編輯器中,選擇調用函數(FunctionComputeNode)節點,右側開啟配置面板。可用變數包括
incomingMessage、wabaId、wabaPhoneNumber、customerPhoneNumber、customerName。在HTTP觸發設定地區,填寫URL和Region(必填項),並設定逾時時間(秒)。在回合設定中,可通過Webhook或API喚醒該節點,並按需開啟非同步喚醒開關。完成配置後,單擊儲存。根據需求配置組件資料,詳細配置說明請參見配置項說明。
配置完成後,單擊保存,在彈出的對話方塊中單擊保存,完成儲存。
配置項說明
父配置項 | 子配置項 | 說明 |
回合設定 | 非同步喚醒 | 開啟後,支援觸發和喚醒的非同步呼叫。 |
非同步等待逾時 | 設定非同步逾時等待時間,單位:秒。 | |
HTTP觸發設定 | URL | 配置URL:在Function Compute控制台,點擊左側功能欄,找到對應函數進入函数详情頁,點擊触发器中的公网访问地址。 說明 初次使用時需點擊授权我们调用你的函数。 在HTTP觸發設定地區,配置Function Compute的URL後,單擊URL下方的授權我們調用你的函數連結,完成HTTP觸發器的授權配置。 |
Region | 配置Region:函數配置中ARN的第三段。 在Function Compute控制台,點擊左側功能欄,找到對應函數進入函数详情頁,點擊配置中的复制 ARN擷取。 說明 比如我複製的ARN是: 那麼Region是: | |
逾時時間 | 自訂逾時時間。 | |
參數設定 | - | 如果需要,配置函數入參為您函數中接收的參數名,其值為常量或流程變數。 |
多分支設定 | - | 如果需要,配置函數多分支,分支Code對應為您函數中將返回的分支Code。如果您的函數返回了流程中未定義的分支Code,流程會進入Else分支。 |
響應設定 | - | 如果需要,配置函數輸出作為流程變數,變數名需要和您函數中返回的變數名匹配。 |