全部產品
Search
文件中心

Chat APP Message Service:調用函數

更新時間:Nov 02, 2024

本文介紹調用函數組件的配置詳情。此組件可以協助您在流程中調用您在阿里雲Function Compute產品中的自訂函數。通過此組件,您可以在流程中實現自訂商務邏輯,如資料處理、遠程服務調用、訊息投遞、資料存放區等。

組件資訊

組件表徵圖

調用函數@1x (1)

組件名稱

調用函數。

操作概述

使用Function Compute組件時,需要開通阿里雲Function Compute服務並在Function Compute產品中配置、設計函數,總體操作大致分為3步:

  1. 配置函數:在Function Compute產品中配置函數。

  2. 設計函數:在Function Compute產品中設計函數。

  3. 組件配置:配置流程中的調用函數組件,協助您在流程中調用您在Function Compute產品中的自訂函數,以實現自訂商務邏輯。

前提條件

已開通Function Compute服務。

1. 配置函數

您可以參考以下步驟配置函數,需要先建立一個服務,然後在服務中根據主要配置建立函數。

  1. 進入Function Compute控制台>服務及函數頁面,並在頁面頂部選擇地區,建議該地區與流程所在地區保持一致。image

    說明

    若找不到服務及函數,請您嘗試在頁面右上方單擊返回Function Compute2.0,再次嘗試。

  2. 單擊建立服務,建立一個服務。建立完成後,會自動進入該服務的函數管理頁面。

  3. 函數管理中建立一個函數,函數主要配置如下,其餘可按需配置。image

    配置項

    選擇

    配置圖示

    函數代碼-運行環境

    您可選擇運行環境類型適合您的函數。

    image

    基本設定-請求處理常式類型

    處理HTTP請求。

    image

    進階設定-請求處理常式

    保持預設配置(index.handler)。

    image

    觸發器配置-要求方法

    至少保留POST,流程會以POST方法請求您的函數。

    image

    觸發器配置-禁用公網訪問URL

    否,流程未部署在您的VPC內,需要通過公網訪問您的函數。

    觸發器配置-認證方式

    簽名認證,流程會通過Function Compute的簽名方式保證調用參數的合法性,您無需額外配置簽名規則。

2. 設計函數

直接使用流程編輯器的函數模板可以協助您聚焦於自訂商務邏輯的實現,並快速部署一個簡單的流程可用的函數。下面樣本將通過Python類型的函數進行介紹。

  1. 建立一個運行環境為Python類型的函數,具體操作請參見建立函數,建立時,運行環境選擇Python。image

  2. 函數詳情頁面的函數代碼頁簽中,將預設的index.py檔案內容替換為下列模板內容。該部分內容是相容流程調用邏輯的WSGI處理常式,不包含您的自訂商務邏輯,您無需修改此檔案中的函數及其內容。image

    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')]
  3. 建立指令檔my.py(或您的自訂檔案名稱),並將該檔案通過from my import *匯入上述index.py檔案中。

  4. my.py檔案內容添加為下列模板內容。

    說明

    以下模板實現了一個根據流程變數輸入(random_number_length)進行對應長度的隨機數字產生,並根據數位奇偶性返回對應流程分支code(evenodd),同時輸出兩個變數至流程中(randomtype)的功能。

    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) -> dict
    def 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產品中的自訂函數,以實現自訂商務邏輯。

  1. 前提條件

    您可以通過已存在的流程或者建立新的流程進入流程的畫布編排頁面。

    • 進入已存在的流程畫布編排頁面

      Chat App Message Service控制台>流程編輯器>流程管理頁簽,單擊需編輯的流程名稱,進入流程的畫布編排頁面。

      image

    • 建立新的流程進入畫布編排頁面。具體操作請參見建立流程

  2. 單擊畫布上的調用函數元件圖表標,查看右側組件配置地區。

    image

  3. 根據需求配置組件資料,詳細配置說明請參見配置項說明

  4. 配置完成後,單擊儲存,在彈出的對話方塊中單擊儲存,完成儲存。

    image

配置項說明

父配置項

子配置項

說明

樣本圖

回合設定

非同步喚醒

開啟後,支援觸發和喚醒的非同步呼叫。

image

非同步逾時等待時間

設定非同步逾時等待時間,單位:秒。

HTTP觸發設定

URL

配置URL為您在Function Compute控制台>服務及函數>函數管理>函數詳情>觸發器管理中的公網地址。

說明

初次使用時需點擊授權連結授權我們調用您的函數。

image

Region

配置Region為您函數配置中ARN的第三段。可在Function Compute控制台>服務及函數>函數管理>函數詳情>函數配置中擷取。

image

逾時時間

自訂逾時時間。

image

參數設定

-

如果需要,配置函數入參為您函數中接收的參數名,其值為常量或流程變數。

image

多分支設定

-

如果需要,配置函數多分支,分支Code對應為您函數中將返回的分支Code。如果您的函數返回了流程中未定義的分支Code,流程會進入Else分支。

image

響應設定

-

如果需要,配置函數輸出作為流程變數,變數名需要和您函數中返回的變數名匹配。

image