You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:20:45