如何通过Freshdesk Webhook提取工单主题内容填充自定义字段
Freshdesk 提取工单主题字符串填充自定义字段实现方案
你贴的浏览器端JS代码无法直接在Webhook/服务端自动化流程里运行,要实现提取主题中R开头预订号写入Resv#自定义字段的需求,有两种可落地的实现方式:
- 无代码方案:用Freshdesk原生工作流自动化实现
不需要额外搭建服务,直接在后台配置工作流即可:- 新建工作流,触发条件设置为「工单创建」「工单主题被更新」
- 新增「提取文本」动作,选择提取源为工单主题,匹配规则用正则
\bR[A-Za-z0-9]+\b,把匹配到的结果存为工作流临时变量 - 新增「更新工单」动作,找到
Resv#自定义字段,把字段值设置为上一步存的临时变量,保存启用工作流即可
注:如果你的预订编号有固定格式(比如R+8位纯数字),可以把正则调整成更精准的\bR\d{8}\b,避免误匹配其他R开头的单词。
- Webhook方案:搭中转服务处理逻辑
如果必须走Webhook链路,需要自己搭一个简单的中转服务承接Webhook请求,核心处理逻辑参考:
// Node.js 中转服务核心代码示例 const express = require('express'); const axios = require('axios'); const app = express(); app.post('/freshdesk-webhook-handler', express.json(), (req, res) => { // 拿Webhook推送的工单数据 const ticketData = req.body.ticket; const ticketSubject = ticketData.subject; // 正则匹配R开头的预订号 const matchRes = ticketSubject.match(/\bR[A-Za-z0-9]+\b/); const resvNo = matchRes ? matchRes[0] : ''; // 调用Freshdesk官方API更新工单自定义字段 axios.put( `https://你的Freshdesk域名.freshdesk.com/api/v2/tickets/${ticketData.id}`, { custom_fields: { "Resv#": resvNo } }, { auth: { username: '你的Freshdesk API密钥', password: 'X' } } ) res.sendStatus(200); }) app.listen(3000);
注意:你之前写的示例代码有两个明显问题:
一是用了浏览器端专属的
document.writeAPI,服务端环境没有DOM对象,这段代码跑不起来;二是String.includes()方法只会返回true/false的布尔值,仅能用来判断指定子串是否存在,根本拿不到具体的预订编号内容,要提取指定格式的子串必须用正则匹配。
内容的提问来源于stack exchange,提问作者Marius Lazăr
相关产品推荐
相关产品推荐

