凉风有信,秋月无边
亏我思娇的情绪、好比度日如年

10分钟零代码!用n8n+飞书打造24小时智能客服机器人

文章摘要

这篇文章介绍了如何利用两个免费工具——n8n和飞书,在零成本下快速搭建一个智能客服系统,告别重复劳动。文章详细拆解了从准备工作到上线测试的完整流程,包括如何配置飞书应用、n8n智能大脑、HTTP请求节点等关键步骤,并提供了常见问题解答。通过这篇文章,读者可以轻松上手,打造一个高效的人工智能客服。

还在为重复回答客户问题而头疼?想要一个不知疲倦的数字员工?今天教你用两个免费工具——n8n和飞书,零代码搭建专属智能客服!

无论你是创业老板还是运营小白,这篇教程都能让你轻松上手,彻底告别重复劳动!

准备工作:3样东西搞定

开始前,我们需要准备:

  1. 1. n8n账号:免费的自动化神器,可以让不同软件”对话”
  2. 2. 飞书管理员账号:用来创建机器人
  3. 3. 知识库文档:机器人的”大脑”,比如常见问题解答

准备好了?开始”造”机器人!

第一步:创建飞书”数字员工”

1. 创建飞书应用

  • • 登录飞书开放平台
  • • 选择”创建应用” → “企业自建应用”
  • • 填写应用名称(如”智能客服助手”)

2. 获取关键信息

在”凭证与基础信息”页面,记下:

  • • App ID
  • • App Secret

这两个是连接n8n的”钥匙”,务必保存好!

3. 开通机器人权限

在”应用功能” → “机器人”中启用,然后在”权限管理”开通:

4. 配置事件订阅

在”事件订阅”页面,先留着”请求地址配置”空白,等下一步生成URL后再填。

第二步:搭建n8n智能大脑

登录n8n,开始搭建核心流程:接收消息 → 智能处理 → 回复消息

1. 添加Webhook节点(接收飞书消息)

步骤1:创建Webhook节点

  • • 在n8n工作流编辑器中,点击左侧的”+”按钮
  • • 在节点搜索框中输入”webhook”
  • • 选择”Webhook”节点并添加到画布

步骤2:配置Webhook节点

  • • 双击Webhook节点进入配置界面
  • • HTTP Method: 选择”POST”(飞书事件推送使用POST方法)
  • • Path: 保持默认或自定义路径(如:/feishu-bot
  • • Authentication: 选择”None”(飞书验证通过Challenge机制)
  • • Response Mode: 选择”When Last Node Finishes”
  • • Response Data: 选择”First Entry JSON”
  • • Property Name: 输入”body”

步骤3:获取Webhook URL

  • • 配置完成后,点击”Test step”或”Listen for test event”
  • • 复制生成的Test URL(格式如:https://yourdomain.com/webhook-test/uuid
  • • 确保URL显示为外网可访问地址(非localhost)

步骤4:在飞书后台配置

  • • 登录飞书开放平台,进入你的应用
  • • 找到”事件订阅” → “请求地址配置”
  • • 将复制的URL粘贴到”请求URL”字段
  • • 点击”保存”按钮

步骤5:验证连接

  • • 确保工作流已保存并激活
  • • 在n8n中确保Webhook节点处于”Listen for test event”状态
  • • 飞书会自动发送Challenge验证请求
  • • 验证成功后,飞书后台会显示”验证成功”状态

网络访问配置

  • • 本地开发:使用ngrok等内网穿透工具:ngrok http 5678
  • • 云端部署:配置N8N_HOST环境变量为实际域名或IP地址

2. 添加Token获取节点

添加HTTP Request节点

  • • 点击”+”添加HTTP Request节点,连接到Webhook节点
  • • Method: POST
  • • URLhttps://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal
  • • Body: JSON格式
{
  "app_id": "你的APP_ID",
  "app_secret": "你的APP_SECRET"
}

注意:替换为真实的APP_ID和APP_SECRET,Token有效期2小时。

3. 添加智能问答节点

添加Code节点

  • • 点击”+”添加Code节点,连接到Token获取节点
  • • 重要配置:将Mode设置为Run Once for All Items(对所有项目运行一次)
  • • 输入以下JavaScript代码:
// FAQ知识库 - 使用关键词匹配提高准确率
const faq = [
  {
    keywords: ["工作时间""上班时间""营业时间""几点上班""几点开门""工作日""上班""营业"],
    answer"周一至周五,9:00-18:00"
  },
  {
    keywords: ["联系方式""电话""客服""联系""咨询""怎么联系""联系电话"],
    answer"客服电话:400-123-4567"
  },
  {
    keywords: ["产品价格""价格""多少钱""费用""收费""报价""成本"],
    answer"请访问官网查看最新价格"
  },
  {
    keywords: ["技术支持""技术""支持""帮助""问题""故障""bug""技术问题"],
    answer"请发送邮件至 tech@company.com"
  },
  {
    keywords: ["退换货""退货""换货""退款""返回""不满意""退""换"],
    answer"支持7天无理由退换货,详情请查看用户协议"
  }
];

// 获取输入数据 - 明确数据来源
// 从Token节点获取access_token
const tokenData = $input.first().json;
// 从Webhook节点获取原始消息数据
const webhookData = $('Webhook').first().json.body;

// 调试信息:打印数据来源和结构
console.log('Token节点数据:'JSON.stringify(tokenData, null2));
console.log('Webhook原始数据:'JSON.stringify(webhookData, null2));
console.log('事件数据:'JSON.stringify(webhookData.eventnull2));

// 提取用户问题并匹配回答
// 注意:content可能是JSON字符串,需要先解析
let userQuestion = "";
try {
const content = webhookData.event?.message?.content;
if (typeof content === 'string') {
    // 如果content是字符串,尝试解析JSON
    const parsedContent = JSON.parse(content);
    userQuestion = parsedContent?.text?.trim() || "";
  } elseif (content?.text) {
    // 如果content已经是对象,直接访问text
    userQuestion = content.text.trim() || "";
  }
} catch (error) {
console.log('解析content时出错:', error);
  userQuestion = "";
}
let reply = "抱歉,暂时无法回答您的问题,正在为您转接人工客服";

// 提取chat_id,尝试多种可能的路径
const chatId = webhookData.event?.message?.chat_id || 
               webhookData.event?.message?.message?.chat_id ||
               webhookData.event?.chat_id;

console.log('提取的chat_id:', chatId);
console.log('用户问题:', userQuestion);

// 遍历FAQ数组,使用关键词匹配
for (const faqItem of faq) {
// 检查用户问题是否包含任何关键词
const matched = faqItem.keywords.some(keyword =>
    userQuestion.toLowerCase().includes(keyword.toLowerCase())
  );

if (matched) {
    reply = faqItem.answer;
    console.log(`匹配到FAQ: ${faqItem.keywords[0]}, 回复: ${reply}`);
    break;
  }
}

// 验证必要参数
if (!chatId) {
console.error('错误: 无法获取chat_id');
thrownewError('无法获取chat_id,请检查飞书webhook数据结构');
}

if (!tokenData.tenant_access_token) {
console.error('错误: 无法获取access_token');
thrownewError('无法获取access_token,请检查Token获取节点');
}

// 返回处理结果
const result = { 
reply: reply, 
chatId: chatId,
token: tokenData.tenant_access_token
};

console.log('返回结果:'JSON.stringify(result, null2));
return result;

4. 添加回复节点

添加HTTP Request节点

  • • 点击”+”添加第二个HTTP Request节点,连接到Code节点
  • • Method: POST
  • • URLhttps://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id
  • • Authentication: Header Auth
    • • NameAuthorization
    • • ValueBearer {{ $json.token }}
  • • Body: JSON格式
{
  "receive_id": "{{ $json.chatId }}",
  "msg_type": "text",
  "content": "{"text":"{{ $json.reply }}"}"
}

重要提示

  • • 如果遇到”invalid receive_id”错误,说明chatId为空,请检查Code节点的调试输出
  • • 确保飞书webhook包含完整的消息事件数据
  • • content字段需要双重JSON编码

第三步:上线测试

  1. 1. 保存激活:点击”Save”并激活工作流
  2. 2. 发布应用:在飞书后台”应用发布”创建新版本
  3. 3. 开始对话:在飞书中@机器人提问测试

成功!你的智能客服已经上线了!

FAQ 常见问题

Q: 机器人不回复怎么办?
A: 检查n8n工作流是否激活,飞书权限是否开通完整。

Q: 如何让机器人更智能?
A: 将Code节点替换为调用ChatGPT或其他AI模型的API。

Q: 能处理图片消息吗?
A: 可以,需要在飞书权限中开通相应的多媒体消息权限。

Q: 免费版有限制吗?
A: n8n免费版每月有5000次执行限制,一般小团队够用。

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《10分钟零代码!用n8n+飞书打造24小时智能客服机器人》
文章链接:https://www.1004619.com/biji/202508271608.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫