调用函数
本文介绍调用函数组件的配置详情。此组件可以帮助您在流程中调用您在阿里云函数计算产品中的自定义函数。通过此组件,您可以在流程中实现自定义业务逻辑,如数据处理、远程服务调用、消息投递、数据存储等。
组件信息
组件图标 | 组件名称 |
| 调用函数 |
操作概述
使用函数计算组件时,需要开通阿里云函数计算服务并在函数计算产品中配置、设计函数,总体操作大致分为3步:
创建并配置函数:在函数计算产品中创建并配置函数。
设计函数:在函数计算产品中设计函数。
组件配置:配置流程中的调用函数组件,帮助您在流程中调用您在函数计算产品中的自定义函数,以实现自定义业务逻辑。
前提条件
已开通函数计算服务。
1. 创建并配置函数
您可以参考以下步骤创建并配置函数。
进入函数计算控制台,点击左侧页面,并在页面顶部选择地域,建议该地域与流程所在地域保持一致。在函数计算 FC 3.0 控制台顶部导航栏中,将地域切换为新加坡,然后在左侧导航栏中单击函数列表,进入函数列表页面。
在函数列表中点击。
主要配置:函数代码 > 运行环境:选择合适的运行环境类型。下面示例将通过的函数进行介绍。
Tab 1 标题
Tab 1 正文
Tab 2 标题
Tab 2 正文
在运行环境配置项中,依次选择内置运行时 > Python > Python 3.10。
其余可按需配置。
2. 设计函数
直接使用流程编辑器的函数模板可以帮助您聚焦于自定义业务逻辑的实现,并快速部署一个简单可用的流程函数。
在函数详情页面的代码页签中,将默认的
index.py文件内容替换为下列模板内容。说明该部分内容是兼容流程调用逻辑的WSGI处理程序,不包含您的自定义业务逻辑,您无需修改此文件中的函数及其内容。
在函数计算 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中配置了函数计算组件的事件处理,则无需再进行事件处理。
def handle_exec(variables) -> dictdef handle_awake(async_id, async_event_data, variables) -> dict
无论您的自定义逻辑如何,上述两个函数的返回结构是固定的。
success:标识了该次函数调用是否成功,如果失败,流程会抛出错误并终止运行。
message:提示信息,可自定义。
await:是否仍需等待后续事件处理(如果您在流程中配置了函数计算组件的事件处理),一般情况下无需进行事件处理。如果为False,流程会采纳下列输出变量和分支code进行下一步处理。
outputVariables:输出至流程的变量名及其值,您可以在后续流程中引用这些变量。只有在await为False时才会被流程采纳。
toBranchCode:输出至流程的分支code(如果您在流程中配置了函数计算组件的多分支),流程会根据您返回的分支code以及您在流程编辑器中的流程配置决定后续走向。只有在await为False时才会被流程采纳。
result = {
'success': True,
'message': 'OK',
'await': False,
'outputVariables': {
'myVarExample1': 'a',
'myVarExample2': 'b'
},
'toBranchCode': 'example'
}
文件修改后,点击部署代码。
在函数详情页面,单击代码页签,在内嵌编辑器中编写函数代码后,单击部署代码。
3. 组件配置
您可以参考以下操作,配置流程中的调用函数组件,帮助您在流程中调用您在函数计算产品中的自定义函数,以实现自定义业务逻辑。
前提条件
可以通过已存在的流程或者创建新的流程进入流程的画布编排页面。
进入已存在的流程画布编排页面
在页签,单击需编辑的流程名称,进入流程的编排页面。
创建新的流程进入画布编排页面。具体操作请参见创建流程。
单击画布上的调用函数组件图标,查看右侧组件配置区域。
在流程编辑器中,选择调用函数(FunctionComputeNode)节点,右侧打开配置面板。可用变量包括
incomingMessage、wabaId、wabaPhoneNumber、customerPhoneNumber、customerName。在HTTP触发设置区域,填写URL和Region(必填项),并设置超时时间(秒)。在运行设置中,可通过Webhook或API唤醒该节点,并按需开启异步唤醒开关。完成配置后,单击保存。根据需求配置组件数据,详细配置说明请参见配置项说明。
配置完成后,单击保存,在弹出的对话框中单击保存,完成保存。
配置项说明
父配置项 | 子配置项 | 说明 |
运行设置 | 异步唤醒 | 开启后,支持触发和唤醒的异步调用。 |
异步等待超时 | 设置异步超时等待时间,单位:秒。 | |
HTTP触发设置 | URL | 配置URL:在函数计算控制台,点击左侧功能栏,找到对应函数进入函数详情页,点击触发器中的公网访问地址。 说明 初次使用时需点击授权我们调用你的函数。 在HTTP触发设置区域,配置函数计算的URL后,单击URL下方的授权我们调用你的函数链接,完成HTTP触发器的授权配置。 |
Region | 配置Region:函数配置中ARN的第三段。 在函数计算控制台,点击左侧功能栏,找到对应函数进入函数详情页,点击配置中的复制 ARN获取。 说明 比如我复制的ARN是: 那么Region是: | |
超时时间 | 自定义超时时间。 | |
参数设置 | - | 如果需要,配置函数入参为您函数中接收的参数名,其值为常量或流程变量。 |
多分支设置 | - | 如果需要,配置函数多分支,分支Code对应为您函数中将返回的分支Code。如果您的函数返回了流程中未定义的分支Code,流程会进入Else分支。 |
响应设置 | - | 如果需要,配置函数输出作为流程变量,变量名需要和您函数中返回的变量名匹配。 |