郑文峰的博客 郑文峰的博客
首页
  • Go语言高性能编程
  • Bug 通缉令
分类
标签
归档
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
GitHub (opens new window)

zhengwenfeng

穷则变,变则通,通则久
首页
  • Go语言高性能编程
  • Bug 通缉令
分类
标签
归档
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
GitHub (opens new window)
  • 初识 MCP Server
  • 初识n8n之对接飞书多维表格
    • 前言
    • 创建飞书工作台
    • 创建多维表格并关联应用
    • 获取 mcd mcp 的token
    • 搭建n8n
    • 配置 AI Agent
    • 清洗数据
    • 配置飞书
    • 运行
  • 使用dify对接飞书多维表格
  • AI
zhengwenfeng
2026-02-23
目录

初识n8n之对接飞书多维表格

# 前言

本文主要记录自己使用n8n构建workflow流程,通过麦当劳的mcp mcd (opens new window)获取麦当劳优惠日历信息然后保存到飞书的多维表格中。

17718467102211771846710169.png

# 创建飞书工作台

在飞书开放平台中的工作台 (opens new window)中创建企业自建应用。

17722797752481772279775145.png

进入应用中添加多维表格的权限。

17718472322221771847231833.png

# 创建多维表格并关联应用

提前创建好多维表格,新建表头为:活动日期、活动标题、活动内容,原始图片链接

17722799132491772279913117.png

给当前多维表格添加上面新增的应用。

17718979023721771897901411.png

17718979543721771897953751.png

# 获取 mcd mcp 的token

打开页面麦当劳的 mcp 平台 (opens new window),然后进行登录并获取到token

17722818102541772281809328.png

# 搭建n8n

因为n8n saas版本需要收费,而它又是开源的,所以参考n8n官方文档 (opens new window),使用 docker 本地启动n8n服务。

docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
1
2

启动成功后,访问 http://localhost:5678 (opens new window),创建用户并登录

# 配置 AI Agent

创建一个 AI Agent Node,名称为麦当劳情报官,User Message 让它调用mcd mcp campaign-calender 来获取活动日历信息,然后输出json格式的信息,内容如下所示:

**核心任务**:
1. 调用 `campaign-calender` 获取活动日历。
2. **数据处理**: 
   - 将获取到的活动信息整理为 JSON 格式。
   - 必须包含字段: `活动日期`, `活动标题`, `活动内容`, `原始图片链接`。
   - **关键调整 - 活动内容 (Activity Content)**: 
     - 必须生成为**一段紧凑的文本**,**严禁换行**。
     - 模仿**朋友圈/小红书**文案风格,使用 Emoji 来分割不同的关键点。
     - 格式参考: "💥开年💥劲爆💥事件!㊙️某神秘巨星天团🛫空降常驻随心配1+1🌟「鱼酷玉咖牛」五大巨星🙋个个都是美味&品质担当👀连带着随心配也全面焕新💘红白配变蓝粉配,超养眼🔍记得来麦一探究竟!"
3. **输出要求**:
   - 仅输出纯 JSON 数组,不要包含 Markdown 代码块标记(如 ```json),也不要任何解释性文字。
   - 格式示例: `[{"活动日期": "...", "活动标题": "...", "活动内容": "💥开年...", ...}]`
1
2
3
4
5
6
7
8
9
10
11
12

在 System Message 中添加角色内容:

**角色设定**: 你是麦当劳总部的“麦麦情报局长”,负责掌握所有最新的营销活动信息。你的说话风格专业、热情,带有麦当劳特色(喜欢用🍟、🍔等emoji)。
1

17718974953731771897494439.png

创建 openapi chat model来对接AI Agent,我这里使用七牛云的大模型服务,首次体验有 1000万的 Token 免费送,可以通过邀请链接获取 https://s.qiniu.com/NnyiMn (opens new window)

在七牛云上可以获取到模型的 API KEY

17718485412181771848541154.png

然后配置到 openapi chat model中

17718484662181771848465520.png

创建 MCP Client 对接到 AI Agent中,token 通过上面的步骤获取获取 mcd mcp 的token

17718973613741771897361329.png

然后可以点击 Execute step 来进行测试,获取到活动信息。

17718980473701771898047155.png

# 清洗数据

因为模型返回的json数据会包含markdown格式的 ```json 内容 ```,所以需要使用一段js脚本来清洗数据,将 ```json 内容 ``` 转换成纯json数据。

const aiOutput = items[0].json.output || $node["Agent"].json.output;

function robustParse(input) {
    if (typeof input === 'object' && input !== null) return input;

    let str = String(input).trim();
    // 1. 去除 Markdown 代码块标记
    str = str.replace(/^```json\s*/i, '').replace(/^```\s*/i, '').replace(/\s*```$/, '');

    // 2. 尝试标准解析
    try { return JSON.parse(str); } catch (e) {}

    // 3. 修复被截断的 JSON 数组
    if (str.startsWith('[') && !str.endsWith(']')) {
        for (let i = str.length - 1; i >= 0; i--) {
            if (str[i] === '}') {
                const potentialJson = str.substring(0, i + 1) + ']';
                try {
                    const res = JSON.parse(potentialJson);
                    if (Array.isArray(res) && res.length > 0) return res;
                } catch (e) {}
            }
        }
    }

    // 4. JS 引擎执行
    try { return (new Function("return (" + str + ");"))(); } catch (e) {}

    // 5. 【新增】文本兜底:如果不是 JSON,直接作为文本返回
    // 只要不以 { 或 [ 开头,就默认是普通文本(如战报)
    if (!str.startsWith('{') && !str.startsWith('[')) {
        return { "text_content": str }; // 封装为对象
    }

    return null;
}

try {
    if (!aiOutput) throw new Error("AI 没有返回 output 字段");

    const parsedData = robustParse(aiOutput);

    if (!parsedData) {
        const preview = aiOutput.length > 100 ? aiOutput.slice(0, 100) + "..." : aiOutput;
        throw new Error(`解析彻底失败,原始内容: ${preview}`);
    }

    // 统一格式化为数组
    const resultItems = Array.isArray(parsedData) ? parsedData : [parsedData];
    return resultItems.map(item => ({ json: item }));

} catch (error) {
    throw new Error(`JSON解析错误: ${error.message}`);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

# 配置飞书

首选需要下载社区插件飞书

17718983343691771898333607.png

17718983903691771898389604.png

17718984343681771898434257.png

将 n8n-nodes-feishu-lite 名称填入上一个步骤的安装node的输入框中

17718985853691771898584886.png

新增飞书 Node 选择多维表格新增记录,内容填如下所示

17719017293391771901728837.png

其中的飞书的 Appid 和 AppSecret 可以在飞书开放平台新增的应用页面中获取

17719018993381771901898723.png

多维表格的 Token 和 ID 可以在表格链接中获取,如下面链接所示

https://pjduxy64p5.feishu.cn/base/{Token}table={ID}
1

请求体 JSON 内容如何:

{
    "fields": {
        "活动日期": "{{ $json['活动日期'] }}",
        "活动标题": "{{ $json['活动标题'] }}",
        "活动内容": "{{ $json['活动内容'] }}",
        "原始图片链接": "{{ $json['原始图片链接'] }}"
    }
}
1
2
3
4
5
6
7
8

17719021093391771902108456.png

# 运行

点击 Execute Workflow 按钮可以开始运行,运行后,查看飞书表格中的数据如下所示:

17719021473391771902147117.png

#AI
上次更新: 2026/02/28, 21:57:39
初识 MCP Server
使用dify对接飞书多维表格

← 初识 MCP Server 使用dify对接飞书多维表格→

最近更新
01
使用dify对接飞书多维表格
02-24
02
服务启动时出现 OOM
09-22
03
一次服务升级时pg表DDL执行超时失败
09-14
更多文章>
Theme by Vdoing | Copyright © 2022-2026 zhengwenfeng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式