Coze 实战 · 第6课 · P01 · 核心课 · ≈60 min · 开源可用

P01 · 竞品日报推送飞书(工作流)

本系列最重要的一课:在应用「竞品日报实战」里编排工作流 daily_competitor_report, 用 LLM 生成四所交易所竞品日报 → Python Code 安全编码 JSON → HTTP 推送到飞书(或 httpbin 演示)。 前置:已完成 P07 应用 IDE(应用和工作流空壳已建好)。

🎯 第6课目标(核心)在应用内把工作流 daily_competitor_report 编成 开始 → LLM → Code(json.dumps) → HTTP(RAW_TEXT) → 结束,试运行成功(演示可用 httpbin),并理解飞书 400/19001 为何必须用 Code 转义。

总流程与最终节点链

本步目的:完成「总流程与最终节点链」。请先看懂下方红框标注的截图,再按编号逐步操作;做完用验收行自检。
开始3 个输入
LLM生成日报
CodeJSON 编码
HTTPPOST 推送
结束输出结果
节点链(必须按此顺序连线):
  开始 → 生成竞品日报(大模型)→ 编码飞书消息(代码 Python)→ 推送飞书(HTTP)→ 结束
本课产物固定命名(照抄)
应用竞品日报实战
工作流英文名daily_competitor_report(仅字母数字下划线)
开始节点输出report_datelark_hintwebhook_url
0

前置条件

本步目的 / 作用:确认机器、仓库、Docker、模型 Key 等硬前置已具备,避免后面步骤做到一半才发现环境不行。
要求怎么检查
服务http://localhost:8888 可访问浏览器能打开登录页
启动coze-studio 根目录 make webmake debugDocker 容器健康
模型管理后台至少启用 1 个大模型/admin/#model-management 有绿色已启用
应用已创建 竞品日报实战P07 或本课第 2 步补做
工作流应用内已有 daily_competitor_report左侧树能看到,画布有开始→结束
开源版没有内置 Cron 定时触发。本课先用手动「试运行」验收;「每天早上 9 点自动推」在 P08 用外部 crontab 调 OpenAPI 实现。
1

登录并进入项目开发

本步目的:完成「登录并进入项目开发」。请先看懂下方红框标注的截图,再按编号逐步操作;做完用验收行自检。
  1. 打开 http://localhost:8888/sign
  2. 输入邮箱密码 → 点 登录
  3. 左侧 工作空间 → Personal Space → 项目开发
  4. 地址变为 /space/<space_id>/develop
登录页

图 1:登录页 — 用自建账号登录本地 Coze。

数字 1→2→3 = 操作顺序 · 请按编号依次点击 / 填写

项目开发页

图 2:项目开发列表 — 应能看到「竞品日报实战」应用卡片。

数字 1→2→3 = 操作顺序 · 请按编号依次点击 / 填写

2

打开应用「竞品日报实战」

本步目的 / 作用若 P07 已创建:直接点卡片进入。若还没有,按下列步骤补建。

2.1 补建应用(仅当列表里没有时)

  1. 项目开发页右上角 + 创建
  2. 选右侧 创建应用(不是智能体)
  3. 名称:竞品日报实战
  4. 介绍:每日生成四所交易所竞品日报并推送飞书(教程演示)
  5. 创建 → 自动进入应用 IDE

2.2 从项目开发进入应用 IDE

  1. 在项目开发列表,单击「竞品日报实战」卡片
  2. 进入应用 IDE,URL 含 project-ide
从项目开发进入应用

图 3:从项目开发页点进应用 IDE 的路径示意。

数字 1→2→3 = 操作顺序 · 请按编号依次点击 / 填写

3

打开工作流 · 学会「添加节点」

本步目的:进入画布,并认准底部工具栏的 + 添加节点——后面 LLM / Code / HTTP 都从这里加。

3.1 补建工作流(仅当左侧树里没有时)

  1. 应用 IDE 左侧 工作流 旁点 +
  2. 名称(英文):daily_competitor_report
  3. 描述(中文):每日竞品日报生成并推送飞书
  4. 确认 → 进入画布
工作流名禁止中文每日竞品日报 会红字报错。✅ 只用 daily_competitor_report

3.2 打开已有工作流

  1. 左侧树 工作流 → daily_competitor_report,单击
  2. 中间出现画布,默认 开始结束
  3. 若弹出「画布交互模式」说明,点 知道了 关掉
工作流画布

图 4:完整五节点画布总览(做完后应长这样)。先对照认节点名,再回到空壳画布按下面步骤逐个加。

数字 1→2→3 = 操作顺序 · 请按编号依次点击 / 填写

3.3 添加节点面板(后面三步共用)

  1. 看画布底部工具栏,点蓝色 + 添加节点(也可在空白处右键)
  2. 弹出节点库:搜索框可输入「大模型」「代码」「HTTP」
  3. 本课只要三类:大模型代码HTTP 请求
添加节点面板示意

图 5:添加节点面板示意 — ① 底部「+ 添加节点」→ ② 大模型 → ③ 代码 → ④ HTTP 请求。

此图为界面配置示意,方便对照字段位置;实操以你本地开源版文案为准。

✅ 验收:能打开节点库,并搜到「大模型 / 代码 / HTTP」。
4

配置「开始」节点 — 三个输入参数

本步目的 / 作用:试运行和 API 调用时由你传入「今天日期、群备注、Webhook 地址」。这些值用 {{变量名}} 传给下游 LLM。

4.1 逐步操作

  1. 画布上单击「开始」节点(左侧第一个)
  2. 右侧出现配置面板,找到 输入 / 输出变量(有的版本叫「输入参数」)
  3. + 添加,按表新增 3 行,类型一律选 String / 字符串
  4. 每行填完后回车或失焦确认;不要用中文做变量名
变量名(英文,严格一致)必填说明试运行示例值
report_date日报日期,注意是 date 不是 data2026-07-16
lark_hint飞书群备注,会出现在消息前缀增长情报群
webhook_urlWebhook 地址(也可写死在 HTTP 节点 URL)https://httpbin.org/post
开始节点配置示意

图 6:开始节点配置示意 — ① 点开始节点 → ② +添加 → ③ 三个字符串变量齐备。

变量名必须和本表完全一致。下游 LLM 提示词写 {{report_date}},若写成 report_data 会取不到值。
✅ 验收:开始节点卡片上能看到 report_date / lark_hint / webhook_url 三个输出。
5

添加「大模型」节点 — 生成竞品日报

本步目的:用 LLM 根据开始节点的日期与群备注,生成四所交易所竞品日报 Markdown。

5.1 放入画布并连线

  1. 底部 + 添加节点 → 选 大模型 / LLM
  2. 新节点出现后,拖到「开始」右侧、「结束」左侧
  3. 连线:从「开始」右侧小圆点拖到 LLM 左侧;LLM 右侧先暂时连到「结束」(后面再改接到 Code)
  4. 双击或单击节点标题,改名为 生成竞品日报

5.2 右侧面板逐项配置

配置项填什么注意
节点名称生成竞品日报后面 Code 引用时靠这个名字
模型管理后台已启用的模型(实录常用 claude-v1)Tokens=0 多半是模型未启用
系统提示词可选:你是加密货币交易所竞品分析师可留空
用户提示词下方整段原样粘贴必须含 {{report_date}} {{lark_hint}}
输出变量默认 outputCode 节点会引用 生成竞品日报.output
技能 / Skills保持「未配置」本课不需要挂插件
请生成今日竞品日报。报告日期:{{report_date}}。飞书群备注:{{lark_hint}}。

覆盖交易所:Binance、Bybit、Bitget、Gate.io。

输出结构(Markdown):
1. 一句话摘要
2. 四所交易所各一段:活动 / 上新 / 费率 / 推广动态
3. 对 BitMart 的启示(2~3 条)

若无实时检索能力,请基于公开行业认知生成,并在文末标注「部分内容为模型推断」。
大模型节点配置示意

图 7:大模型节点配置示意 — ① 模型下拉 → ② 用户提示词(含双花括号变量)→ ③ 输出 output

变量引用:双花括号会在运行时替换成开始节点的入参。这是工作流里最常用的传参方式。
Tokens=0 / 模型报错/admin/#model-management 检查模型是否启用、API Key 是否配置。
✅ 验收:节点名「生成竞品日报」、模型已选、提示词含两个 {{...}}、输出为 output
6

添加「代码」节点(Python)— 编码飞书 JSON

为什么必须有 Code 节点?
飞书自定义机器人要求 POST Body 是合法 JSON{"msg_type":"text","content":{"text":"..."}}
日报含换行、双引号。若在 HTTP 用 JSON 模板直接塞 LLM 长文本,不会自动转义,飞书返回 400 / errcode 19001
正确做法:Python json.dumps() → HTTP 用 RAW_TEXT 原样发送。

6.1 放入画布

  1. + 添加节点代码 → 语言选 Python 3(开源版仅 Python)
  2. 节点名称改为 编码飞书消息
  3. 描述可写:把日报安全编码成飞书 webhook JSON
  4. 重新连线:开始 → 生成竞品日报 → 编码飞书消息 →(暂)结束

6.2 输入 / 输出映射(最容易配错)

方向本节点变量名引用上游类型
输入report生成竞品日报.outputString
输入hint开始.lark_hintString
输出payload(本节点产出)String

6.3 代码全文(覆盖默认模板)

import json

async def main(args: Args) -> Output:
    params = args.params
    report = params.get('report') or ''
    hint = params.get('hint') or ''
    # 飞书文本前缀:含「竞品日报」可过关键词安全设置
    text = '【竞品日报】' + str(hint) + '\n\n' + str(report)
    # 飞书单条文本建议不超过约 4000 字,保守截断
    if len(text) > 3500:
        text = text[:3500] + '\n...(内容过长已截断)'
    payload = json.dumps({
        'msg_type': 'text',
        'content': {'text': text}
    }, ensure_ascii=False)
    ret: Output = {'payload': payload}
    return ret
代码节点配置示意

图 8:代码节点配置示意 — ① 输入映射 report/hint → ② 输出 payload → ③ Python 编辑区。

代码做了什么对应飞书要求
json.dumps(..., ensure_ascii=False)中文保留,且自动转义引号换行
前缀 【竞品日报】机器人若开「自定义关键词」必须含该词
截断 3500 字避免超长被飞书拒绝
输出 payload给 HTTP 节点当 RAW_TEXT 整体发送
跳过 Code 直接 HTTP 拼 JSON httpbin 可能仍返回 200,换真飞书几乎必现 400 / 19001。这是本课最关键的工程经验。
✅ 验收:输入两个映射正确、输出有 payload、代码含 json.dumps【竞品日报】
7

添加「HTTP」节点 — POST 推送

本步目的:把 Code 产出的 payload 原样 POST 出去。演示用 httpbin;上线换飞书 Webhook。

7.1 放入画布并连线

  1. + 添加节点HTTP 请求
  2. 节点名称:推送飞书
  3. 描述可写:推送竞品日报到飞书自定义机器人 webhook
  4. 最终连线:开始 → LLM → Code → HTTP → 结束(删掉多余连线,保证无分叉)

7.2 右侧面板逐项填写(对照表)

配置项试运行(演示)上线(真飞书)
MethodPOST
URLhttps://httpbin.org/posthttps://open.feishu.cn/open-apis/bot/v2/hook/<token>
国际版:open.larksuite.com
鉴权 Auth关闭 / None(token 已在 URL 里)
Headers新增:Content-Type = application/json
Body 类型RAW_TEXT(也叫 Raw / 纯文本)← 关键
Body 内容引用 编码飞书消息.payload
HTTP 节点配置示意

图 9:HTTP 节点配置示意 — ① Method+URL → ② Body 类型选 RAW_TEXT → ③ 引用 payload

RAW_TEXT 是关键:Body 已是完整 JSON 字符串,不要再选「JSON 模板」手写 {"text":"{{output}}"}
演示务必先用 httpbin.org/post:会把收到的 JSON echo 回来,且不需要真飞书 token。

7.3 httpbin 返回怎样算成功?

{
  "json": {
    "msg_type": "text",
    "content": { "text": "【竞品日报】增长情报群\n\n..." }
  }
}

节点输出应有 statusCode: 200,以及 body / headers

✅ 验收:POST + httpbin URL + RAW_TEXT + Content-Type + 引用 payload;画布上 HTTP 接在 Code 与结束之间。
8

配置「结束」节点 — 暴露结果

本步目的:把日报正文与推送状态码暴露为工作流最终输出,方便试运行面板和后续 OpenAPI 读取。

8.1 逐步配置

  1. 单击「结束」节点
  2. 输出模式选 返回变量(不要选「直接回答」之类对话模式)
  3. 在输出变量里 + 添加 两行:
    • report ← 引用 生成竞品日报.output
    • lark_status ← 引用 推送飞书.statusCode
  4. 确认连线为:开始 → 生成竞品日报 → 编码飞书消息 → 推送飞书 → 结束
  5. 点顶部或画布旁 保存(多数版本也会自动保存)
结束节点配置示意

图 10:结束节点配置示意 — 输出 reportlark_status

完整五节点画布

图 11:完整画布实录 — 五个节点名称、输入输出应与上表一致。

数字 1→2→3 = 操作顺序 · 请按编号依次点击 / 填写

✅ 验收:五节点全部连线、无孤立节点;结束输出含 report + lark_status;保存无报错。
9

试运行 — 填写示例参数

本步目的 / 作用:不发布也能端到端跑一遍,确认 LLM → Code → HTTP 全通。
  1. 画布右上角或右侧栏点 试运行(或 ▶ 图标)
  2. 弹出参数表单,逐字填写
字段填入(复制)
report_date2026-07-16
lark_hint增长情报群
webhook_urlhttps://httpbin.org/post(若开始节点有该字段;URL 也可只配在 HTTP 节点)
  1. 运行 / 开始运行
  2. 等待每个节点变绿(LLM 可能 1~3 分钟,视模型速度)
  3. 点开各节点查看输入输出;重点看 HTTP 节点 statusCode: 200
  4. 结束节点应能看到完整 report Markdown 和 lark_status: 200
试运行填参

图 12:试运行侧栏 — 三个开始参数 + 运行按钮。

数字 1→2→3 = 操作顺序 · 请按编号依次点击 / 填写

✅ 实录通过标准:全节点成功 · lark_status: 200 · 结束节点 report 含四所交易所内容 · Token 消耗 > 0。
httpbin 200 但飞书群没消息正常——你还在演示 URL。第 10 步换真 webhook。
10

换成真实飞书 Webhook

本步目的:完成「换成真实飞书 Webhook」。请先看懂下方红框标注的截图,再按编号逐步操作;做完用验收行自检。
  1. 飞书桌面端 → 进入目标群 → 右上角 设置
  2. 群机器人 → 添加机器人 → 自定义机器人
  3. 名称随意,安全设置若开「自定义关键词」,填 竞品日报(与 Code 前缀一致)
  4. 复制 Webhook 地址,形如:
    https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  5. 回到 Coze 画布 → 单击 推送飞书 HTTP 节点
  6. 把 URL 从 httpbin 换成刚复制的飞书 Webhook
  7. 保存 → 再次 试运行(参数同上,report_date 改成今天)
  8. 飞书群应收到带 【竞品日报】增长情报群 前缀的长消息
安全:Webhook URL 等同群写权限。不要提交到 Git 公开仓库;泄露后请在飞书机器人设置里「重置地址」。
✅ 验收:飞书群出现日报消息,且 HTTP 节点 statusCode 为 200。
11

关于「每日自动」— 无内置 Cron

本步目的 / 作用事实:开源 Coze Studio 工作流编辑器没有内置定时触发节点(代码注释里写 will support soon)。所以「竞品日报」的「每日」要靠外部调度
  1. 本课目标:手动试运行跑通 — 已完成
  2. 若要每天 9:00 自动推:需先 发布应用,再用 crontab 调 OpenAPI
  3. 具体 curl、PAT Token、workflow_id 获取 → 见 P08 发布 · PAT · OpenAPI
# P08 会详讲,这里仅预览(每天 9:00)
0 9 * * * curl -sS -X POST 'http://localhost:8888/v1/workflow/run' \
  -H 'Authorization: Bearer <你的PAT>' \
  -H 'Content-Type: application/json' \
  -d '{"workflow_id":"<工作流ID>","parameters":{"report_date":"'"$(date +%F)"'","lark_hint":"增长情报群"}}' \
  >> /tmp/coze-comp-daily.log 2>&1

工作流 ID:打开画布时 URL 末尾数字,如 .../workflow/7662919178956832768

!

踩坑清单(速查表)

本步目的:完成「踩坑清单(速查表)」。请先看懂下方红框标注的截图,再按编号逐步操作;做完用验收行自检。
现象原因处理
工作流名红色报错用了中文名改成 daily_competitor_report
LLM 变量是字面量 {{report_date}}开始节点未定义或名写错检查开始输出是否 report_date
推送飞书 400 / 19001无 Code 节点,JSON 未转义按第 6 步加 Python + RAW_TEXT
HTTP Body 选了 JSON 模板长文本再次破坏 JSON改 Body 类型为 RAW_TEXT,引用 payload
Tokens = 0模型未启用 / Key 无效管理后台检查模型配置
httpbin 200 群无消息仍是演示 URLHTTP URL 换飞书 Webhook
飞书无消息但 HTTP 200机器人关键词过滤文案含「竞品日报」或关关键词限制
想每天自动跑无内置 cronP08 外部 crontab + OpenAPI
本步目的 / 作用和智能体分工:临时追问「对比 Binance 和 Bybit」→ 用 P02 智能体;每日例行进群 → 本工作流 + P08 定时;要实时资讯 → 再加搜索插件(P05,需鉴权)。
  • □ 五节点链:开始 → LLM → Code → HTTP → 结束
  • □ 开始输出:report_date / lark_hint / webhook_url
  • □ Code:json.dumps + 3500 截断 + 【竞品日报】前缀
  • □ HTTP:POST + RAW_TEXT + Content-Type application/json
  • □ 试运行 httpbin 200,换飞书后群收到消息
全部完成 → 继续 P03 为智能体挂载技能(第7课),或跳 P08 学发布与定时。