在n8n中用JavaScript合并Zammad API的工单与工单文章JSON结构
n8n 中合并Zammad工单与文章的JS代码
功能说明
将Zammad API获取的工单JSON数组和对应工单文章JSON数组,合并为包含Ticket(工单完整数据)和articles(对应工单的文章数组)的统一JSON结构,用于后续调用外部Node.js接口。
适配n8n的JS代码
场景1:输入为两个分支(工单数组 + 文章数组)
假设第一个输入分支输出工单JSON数组,第二个输入分支输出文章JSON数组,使用以下代码:
// 获取输入的工单与文章数组 const tickets = $input.all()[0].json; const articles = $input.all()[1].json; // 按工单ID对文章进行分组,提升匹配效率 const articlesGrouped = articles.reduce((group, article) => { const ticketId = article.ticket_id; // Zammad文章中关联工单的字段为ticket_id group[ticketId] = group[ticketId] || []; group[ticketId].push(article); return group; }, {}); // 合并工单与对应文章 const mergedResult = tickets.map(ticket => ({ Ticket: ticket, articles: articlesGrouped[ticket.id] || [] // 无对应文章则返回空数组 })); // 输出合并后的数据 return mergedResult;
场景2:输入为混合的单个工单/文章项
如果输入是多个单独的工单、文章项(而非数组),使用以下代码自动筛选并合并:
// 从输入中筛选工单和文章数据 const tickets = $input.all() .filter(item => item.json.id && !item.json.ticket_id) .map(item => item.json); const articles = $input.all() .filter(item => item.json.ticket_id) .map(item => item.json); // 按工单ID分组文章 const articlesGrouped = articles.reduce((group, article) => { const ticketId = article.ticket_id; group[ticketId] = group[ticketId] || []; group[ticketId].push(article); return group; }, {}); // 合并数据 const mergedResult = tickets.map(ticket => ({ Ticket: ticket, articles: articlesGrouped[ticket.id] || [] })); return mergedResult;
注意事项
- 确认Zammad返回的字段名:工单ID字段为
id,文章关联工单的字段为ticket_id,如果字段名有差异,需对应修改代码中的字段引用 - 若需要对文章进行排序(比如按创建时间),可在分组后对
articlesGrouped[ticketId]添加排序逻辑,例如:articlesGrouped[ticketId].sort((a, b) => new Date(a.created_at) - new Date(b.created_at))
内容的提问来源于stack exchange,提问作者sgw
相关产品推荐
相关产品推荐

