# 代码节点 代码节点支持通过编写代码来生成返回值。扣子编程支持在代码节点内使用 IDE 工具,编写自定义代码逻辑,来处理输入参数并返回响应结果。 扣子编程于2025年9月16日对**工作流的代码节点服务**进行了升级,发布前请**试运行**进行验证。 ## 配置代码节点 ### 基础配置 代码节点的配置参数说明如下: | **配置** | **说明** | | --- | --- | | **输入** | 声明代码中需要使用的变量。添加输入参数时需要设置参数名和变量值,其中变量值支持设置为固定值或引用上游节点的输出参数。
在代码中引用输入参数时,直接通过 params['input'] 取值即可。
| | **代码**: | 代码节点中需要执行的代码片段,你可以直接编写。

* 引用变量:直接使用输入参数中的变量,通过**`return`​**一个对象来输出处理结果。
* 函数限制:不支持编写多个函数。即使仅有一个输出值,也务必保持以对象的形式返回。

支持 JavaScript 和 Python 两种语言。详细说明可参考[开发语言](https://docs.coze.cn/api/open/docs/guides/code_node#79fb9b0d)。 | | **输出** | 代码运行成功后,输出的参数。你可以根据实际需求,在输出结构中只保留必要的参数。
当节点的异常处理方式设置为返回设定内容或执行异常流程时,同时返回 `isSuccess`、`errorBody` 参数,用于在节点执行异常时传递详细信息。
确保此处定义的参数名、类型与代码的 **return** 对象完全一致。以代码节点默认提供的代码为例,输出的参数与代码中定义的 **return** 对象完全一致。
| * 节点执行超时:单请求限制 60s。 * 暂不支持 HTTP/HTTPS 以外的其他协议。 * 每个低代码工作流中最多添加 50 个代码节点。 ### 异常设置 默认情况下,节点运行超时、运行异常时,工作流会中断,工作流调试界面或 API 中会返回错误信息。你也可以手动设置节点运行超时等异常情况下的处理方式,例如超时时间、是否重试、是否跳转异常分支等。 | **异常处理设置** | **说明** | | --- | --- | | 超时时间 | 超时时间指节点运行的最大耗时,如果超过此时长,则判断为节点运行超时。
默认情况下,节点的超时时间默认为 60s,即 1 分钟。你也可以将其改为 0.1s~60s,灵活控制超时时间。 | | 重试次数 | 节点运行超时或异常时,默认不重试,你也可以设置为重试 1 次。 | | 异常处理方式 | 节点运行超时或异常时,默认中断工作流。你也可以手动修改此节点的异常处理方式:

* **中断流程**:工作流执行中断,不再运行后续节点。
* **返回设定内容**:发生异常后,工作流运行不会中断。开发者可自定义设置需要返回的输出字段内容,必须是输出中已定义的字段,且格式为合法的 JSON 格式。另外,节点还会返回输出参数 `isSuccess`、`errorBody`,传递节点异常的详细信息。
* **执行异常流程**:发生异常后,工作流运行不会中断,转而执行异常流程分析,开发者需要为新增的异常分支配置处理流程。异常信息会通过节点的输出参数 `isSuccess`、`errorBody` 返回。 | ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/29a3611502344180aed9eaf50fe9e2a7~tplv-goo7wpa0wc-image.image) ## 示例 ## 开发语言 代码节点支持 JavaScript 和 Python 两种语言。 ### JavaScript 支持 V8 引擎的 11.3.244.8 版本(对应 Node.js 20.3.1 版本),并兼容 ECMAScript 2022 语法。 代码 IDE 支持 TypeScript,提供静态语言的编码体验。 在 JavaScript 中,仅内置了两个三方依赖库: * `dayjs`(版本 1.8.36) * `lodash`(版本 4.17.20) 。 JavaScript 运行时遵循 [WinterCG](https://wintercg.org/) 规范,并支持一系列 Web API,包括: * `atob()`、`btoa()`、`console`、`setTimeout()`、`clearTimeout()`、`structuredClone()`、`URL`、`URLSearchParams`、`AbortController`、`AbortSignal`、`TextEncoder`、`TextDecoder` * `WebStreams` * `WebCrypto(算法仅支持 AES、HMAC、SHA)` JavaScript 的三方依赖库示例代码如下: ```JavaScript //only dayjs and lodash are allowed import dayjs from 'dayjs'; import _ from 'lodash'; async function main({ params }: Args): Promise { // get input params by this way return { content: params.name }; } ``` ### Python 基于 Python 3.11.3 的标准库,大多数模块都能正常运行。不支持的模块包括 `curses`、`dbm`、`ensurepip`、`fcntl`、`grp`、`idlelib`、`lib2to3`、`msvcrt`、`pwd`、`resource`、`syslog`、`termios`、`tkinter`、`turtle.py`、`turtledemo`、`venv`、`winreg`、`winsound`、`multiprocessing`*、*`threading`*、*`sockets`*、*`pty` 和 `tty`*。* 在 Python 环境中,仅内置了两个第三方依赖库:`requests_async` 和 `numpy`。其中,`requests_async` 与 `requests` 类似,但在使用时需要搭配 `await`。 * Python 运行时暂不支持 Http.client 方式的请求。 * 不支持使用除 `requests_async` 、`numpy` 以外的第三方依赖库。 * `time.sleep()` 方法由于是阻塞调用,会对代码执行性能产生影响,因此推荐使用异步版本的 `asyncio.sleep()` 来替代。 示例如下: ```Python import requests_async as requests async def main(args: Args) -> Output: # you can get url by this way url = args.params['url'] response = await requests.get(url) ret = { 'code': response.status_code, 'res': response.text, } return ret ``` ## 使用代码 IDE 编写代码 扣子编程提供了网页版代码 IDE 环境供你使用,无需考虑代码部署等问题,只要关注代码逻辑即可。 在节点内的**代码**区域,单击**在IDE中编辑**,可通过代码 IDE 编辑和调试代码。 如果你已经为代码节点配置好了输入参数,编辑时支持自动补全参数。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/f18c40167e7445eb85b2f17a68dd7355~tplv-goo7wpa0wc-image.image) ## 试运行代码节点 试运行代码节点时,填写输入参数,并单击**运行**。平台会自动执行代码片段,并展示运行结果。运行结果中包括输入参数和输出内容,其中输出内容由原始输出和最终输出组成。 * **原始输出**:代码执行的真实输出结果,包含代码中定义的所有输出参数。你也可以单击**原始输出**,将原始输出的参数结构同步到代码节点。 * **最终输出**:按照代码节点中指定的**输出**参数结构生成的输出结果。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/5e9caa68188045129fb303ce641f1f50~tplv-goo7wpa0wc-image.image) ## 常见问题 ### 可以在代码节点中引入依赖包吗? 代码节点仅支持引用以下第三方依赖,引入其他依赖的语句不生效。 * JavaScript:dayjs、lodash * Python:requests_async 、numpy ### 为什么代码节点输出了 tako_bot_userhistory? 如果在代码节点中通过函数遍历所有变量,可能会识别到部分系统变量,例如系统变量 tako_bot_userhistory,导致代码节点运行报错。如果需要在代码中使用代码节点定义的输入变量,直接通过 `params['input']` 取值即可,无需通过函数遍历。 tako_bot_userhistory 为 String 格式,表示会话中的上下文消息,例如 `TAKO_BOT_HISTORY :[{"content":"早上好","name":"小张","role":"user"}]`。此系统变量即将下线,如需获取会话中的上下文消息,推荐使用[查询消息列表节点](https://docs.coze.cn/api/open/docs/guides/query_message_list)节点。 ### 代码节点中如何使用 sleep 函数? 代码节点中,推荐使用 Python 标准库的 `asyncio.sleep` 函数,`time.sleep` 函数会阻塞工作流执行、导致触发限流。 `asyncio.sleep` 函数在异步编程中挂起当前任务、实现非阻塞的延迟,最长可延迟 1 分钟。此函数常用于需要在异步操作之间添加延迟的场景,例如在异步的数据处理中控制处理速率。目前工作流暂不支持异步插件节点,如果下游节点需要使用异步插件的执行结果,可以通过循环节点实现异步等待和结果轮询,其中异步等待由代码节点的 a`syncio.sleep` 函数实现。 例如以下示例代码表示等待 30 秒: ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/0a67b4cf58c840679589df3eb1af58d2~tplv-goo7wpa0wc-image.image)