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

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

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

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

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


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

# 搭建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
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),也不要任何解释性文字。
- 格式示例: `[{"活动日期": "...", "活动标题": "...", "活动内容": "💥开年...", ...}]`
2
3
4
5
6
7
8
9
10
11
12
在 System Message 中添加角色内容:
**角色设定**: 你是麦当劳总部的“麦麦情报局长”,负责掌握所有最新的营销活动信息。你的说话风格专业、热情,带有麦当劳特色(喜欢用🍟、🍔等emoji)。

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

然后配置到 openapi chat model中

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

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

# 清洗数据
因为模型返回的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}`);
}
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
# 配置飞书
首选需要下载社区插件飞书



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

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

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

多维表格的 Token 和 ID 可以在表格链接中获取,如下面链接所示
https://pjduxy64p5.feishu.cn/base/{Token}table={ID}
请求体 JSON 内容如何:
{
"fields": {
"活动日期": "{{ $json['活动日期'] }}",
"活动标题": "{{ $json['活动标题'] }}",
"活动内容": "{{ $json['活动内容'] }}",
"原始图片链接": "{{ $json['原始图片链接'] }}"
}
}
2
3
4
5
6
7
8

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