2026-09-29 · 原文发布日
n8n调研联系人富化:Airtable出题、Tavily搜索、OpenAI提取、Dropcontact补全
每天上午和下午各跑一次,读取Airtable「Research Requests」中状态为Pending的调研需求,用Tavily搜索并只保留高置信结果;没有可用结果就把状态改为低置信失败。有结果时交给OpenAI提取成结构化联系人JSON(姓名、机构、角色、兴趣),再提交Dropcontact异步富化,等回调取回补全后的资料,逐条写入或更新到「Contact List」表,最后把原需求标记为Completed。设计初衷是让不懂技术的同事只需在表里填一行需求描述,就能在联系人表里收到富化结果;Airtable也可换成其他数据库。
原文要点
n8n模板页(作者Luka Margiani,免费模板)描述了一条每天09:00和14:00各跑一次的工作流:从Airtable「Research Requests」表读取Status为Pending的记录,用Tavily搜索并只保留高置信结果;无可用结果就把状态改为Failed - Low Confidence;有结果则交OpenAI(示例模型gpt-5-mini)提取含姓名、机构、角色、兴趣的结构化联系人JSON,再提交Dropcontact异步富化,经wait/callback取回结果后逐条upsert进「Contact List」表,最后把原需求标记Completed。配置要求:Airtable个人访问令牌、OpenAI凭据、名为TAVILY_API_KEY的环境变量、Dropcontact凭据,且Dropcontact须能访问n8n实例的公开resume URL。Airtable可换成Excel或其他数据库,设计初衷是让非技术同事只填一行需求就能收到富化联系人。
这次做成什么
在自有n8n实例上按原模板描述搭建这条「调研需求→搜索→提取→富化→回写」流水线:若原模板页提供工作流可直接导入,本站另给出逐节点搭建说明、字段映射、凭据清单和一条合成测试数据,未核实的界面细节以原模板页为准。
准备什么
- 一个可公网访问的n8n实例(Dropcontact回调需要公开resume URL,本机localhost不可用)
- Airtable账号及个人访问令牌,建好Research Requests与Contact List两张表
- OpenAI API凭据,并确认账号可用模板示例模型gpt-5-mini
- Tavily API key与Dropcontact API key(均可能产生费用,以各服务商定价为准)
具体怎么做
建表与状态字段
在Airtable建「Research Requests」表,至少含Prompt(单行文本)和Status(单选:Pending、Completed、Failed - Low Confidence)两字段;另建「Contact List」表,含Name、Organization、Role、Interests及富化回写字段(如Email、LinkedIn)。记下Base ID和两个Table ID备用。
配置四类凭据
在n8n凭据页新建Airtable Personal Access Token凭据;新建OpenAI凭据并确认gpt-5-mini可用;按原模板要求把Tavily密钥设为环境变量TAVILY_API_KEY(写入n8n启动环境后重启生效);新建Dropcontact凭据。全部用测试密钥,勿用他人真实凭据。
搭建主链路
依次放置:Schedule Trigger(cron每天09:00与14:00两档)→Airtable Search节点(筛选Status=Pending)→逐条循环→HTTP Request调Tavily搜索(请求体带query=当前Prompt)→Code/Filter节点按置信度筛掉低分结果→IF分支:结果为空走「失败分支」,非空走「成功分支」。
失败分支与成功分支
失败分支:Airtable Update节点把该请求Status改为Failed - Low Confidence后结束。成功分支:OpenAI节点用材料中的提取提示词把Tavily结果转成联系人JSON数组→HTTP Request提交Dropcontact富化任务→Wait节点(resume选webhook回调,URL须为公网地址)→回调后HTTP Request取回富化结果。
回写与收尾
对每条富化结果用Airtable Upsert节点写入Contact List(匹配键建议Name+Organization);全部写完后用Airtable Update把原请求Status改为Completed。先用材料中的合成测试数据手动执行一次,确认两条分支各跑通后再打开定时。
可直接复制的材料
Airtable表结构参考配置
本站独立设计的参考结构;原模板具体字段名以模板页为准,Upsert匹配键为本站建议。
{
"base": "把your_base_id替换为实际Base ID",
"tables": {
"Research Requests": {
"fields": {
"Prompt": "单行文本,非技术同事填写的调研需求",
"Status": "单选:Pending / Completed / Failed - Low Confidence"
}
},
"Contact List": {
"fields": {
"Name": "单行文本",
"Organization": "单行文本",
"Role": "单行文本",
"Interests": "多行文本",
"Email": "邮箱,由Dropcontact富化回写",
"LinkedIn": "URL,由Dropcontact富化回写"
},
"upsertMatchKey": ["Name", "Organization"]
}
}
}OpenAI联系人提取提示词(本站独立编写)
本站独立编写;占位符按n8n表达式替换,实际字段名以你上游节点输出为准,模型名按原模板示例用gpt-5-mini并确认账号可用。
你是信息提取助手。下面是一个调研需求和若干搜索结果。请只从搜索结果中提取与需求直接相关的人物,输出严格的JSON数组,不要输出多余文字。每个人包含四个字段:name(姓名)、organization(所属机构)、role(职务或角色)、interests(与需求相关的兴趣或领域,一句话)。如果搜索结果中没有可靠人物,输出空数组[]。
调研需求:{{ $json.Prompt }}
搜索结果:{{ $json.tavilyResults }}合成测试请求数据
本站虚构的测试记录,写入Research Requests表用于手动触发;不含真实个人信息。
{
"Prompt": "找出研究城市垃圾分类智能回收设备的欧洲初创公司创始人",
"Status": "Pending"
}输入与输出示例
本站虚构演示,未实际运行工作流;人名机构均为虚构,输出字段与本站参考表结构对应。
输入
Research Requests表新增一行:Prompt=「找出研究城市垃圾分类智能回收设备的欧洲初创公司创始人」,Status=Pending。手动执行工作流一次。对应输出
成功分支输出(示意):Contact List新增2条upsert记录——{Name:"Mara Lindqvist",Organization:"LoopBin AB",Role:"联合创始人",Interests:"智能回收箱传感分拣",Email回写非空}与{Name:"Jonas Weber",Organization:"SortCircle GmbH",Role:"CEO",Interests:"城市垃圾分类设备",Email回写非空};原请求Status更新为Completed。失败分支对照:把Prompt改为无意义字符串再跑一次,请求被标记为Failed - Low Confidence。做完检查这些
- Schedule Trigger显示09:00与14:00两档,手动执行时两个分支都能走通一次
- Tavily无高置信结果时,请求Status被改为Failed - Low Confidence而非卡住或误标Completed
- OpenAI节点输出是严格JSON数组,含name、organization、role、interests四字段,空结果时为[]
- Wait节点的resume URL是公网可访问地址,Dropcontact回调能恢复执行(可用测试回调验证)
- Contact List按Name+Organization去重,重复执行同一请求不会产生重复行
容易卡住的地方
- 本指南包含按原模板文字描述的重建步骤,若原模板页提供工作流文件可直接导入,节点命名与参数以原模板页核对为准,不要假设两者完全一致
- n8n实例必须公网可达,否则Dropcontact异步回调无法触发Wait恢复,整条流会挂在等待节点
- TAVILY_API_KEY按原模板要求走环境变量而非节点凭据,改完需重启n8n才生效
- Tavily、OpenAI、Dropcontact均可能按量计费,具体价格原模板未列出,以各服务商页面为准
- 模板示例模型gpt-5-mini需确认自己OpenAI账号可用,不要假设默认可调
- 作者称每天跑两次是模板设定,不是处理耗时的保证;富化耗时取决于Dropcontact回调
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Enrich GDPR research contacts in Airtable with Tavily, OpenAI, and Dropcontact
- 原作者
- Luka Margiani
- 原始发布日期
- 2026-09-28T19:05:30.153Z
- 来源
- https://n8n.io/workflows/20084