扣子代码节点中需用平台fetch发起异步请求,显式传入bot_token;通过input/context安全获取数据;必须用try-catch做超时、状态码及JSON解析异常兜底。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

扣子代码节点中使用JavaScript处理异步请求
在扣子(Coze)平台的「代码节点」中编写 JavaScript,需绕过浏览器环境限制,直接调用平台提供的 fetch 方法发起 HTTP 请求——它不支持 XMLHttpRequest 或原生 fetch 全局对象。
第一步:确认请求目标是否启用 CORS 并允许 POST/GET;扣子后端已预置代理,但若目标接口返回 403 或跨域拒绝,需改用平台内置 fetch 而非自行构造。
第二步:在代码节点编辑区写入以下结构化请求逻辑:
const response = await fetch("https://api.example.com/data", { method: "GET", headers: { "Authorization": "Bearer " + bot_token } });<br>const data = await response.json();<br>return { output: data };
立即学习“Java免费学习笔记(深入)”;
注意:【bot_token 必须提前在 Bot 设置 → API Tokens 中开启并传入上下文】,否则请求头缺失将直接返回 401;代码节点不自动注入 token,需显式拼接。
第三步:若需 POST 提交 JSON 数据,改用:
const payload = { query: input.query, user_id: context.user.id };<br>const response = await fetch("https://your-api.com/submit", {<br> method: "POST",<br> headers: { "Content-Type": "application/json" },<br> body: JSON.stringify(payload)<br>});
扣子代码节点中安全访问用户输入与上下文数据
代码节点接收的数据来自前序节点输出或用户消息,全部封装在 input 和 context 两个只读对象中,不可修改原始结构。
方法一:直接解构 input 中的字段(推荐)
const { query, attachments } = input;<br>if (!query?.trim()) return { output: "请提供有效问题" };
方法二:从 context 提取用户身份信息(仅限已授权 Bot)
const userId = context.user?.id;<br>const userName = context.user?.name || "未知用户";<br>// 注意:context.group?.id 在群聊中才存在,私聊时为 undefined
方法三:校验附件是否存在且为支持类型
if (Array.isArray(attachments) && attachments.length > 0) {<br> const image = attachments.find(a => a.type === "image");<br> if (image) {<br> return { output: `检测到图片: ${image.url}` };<br> }<br>}
扣子代码节点中实现条件分支与错误兜底
代码节点默认无 try-catch 包裹,未捕获的异常会导致整个流程中断并返回系统错误,必须主动防御。
① 对外部请求做超时与状态码双校验:
try {<br> const ctrl = new AbortController();<br> setTimeout(() => ctrl.abort(), 8000);<br> const res = await fetch(url, { signal: ctrl.signal });<br> if (!res.ok) throw new Error(`HTTP ${res.status}`);<br> return { output: await res.json() };<br>} catch (err) {<br> if (err.name === "AbortError") {<br> return { output: "请求超时,请稍后重试" };<br> }<br> return { output: "服务暂时不可用" };<br>}
② 对 JSON 解析失败做降级处理:
let parsed;<br>try {<br> parsed = JSON.parse(rawString);<br>} catch {<br> parsed = { error: "invalid_json", raw: rawString };<br>}
这一步操作起来很简单,直接把 catch{} 块写成空语句块再赋默认值就行,避免因格式错误导致流程崩溃。


















