Freshdesk 连接器
通过 Tajo 将 Freshdesk 连接到 Brevo,统一支持和营销数据。同步客户支持工单、联系人档案和满意度评分,基于支持互动触发精准沟通。
概览
| 属性 | 值 |
|---|---|
| 平台 | Freshdesk |
| 类别 | 支持 |
| 设置复杂度 | 简单 |
| 官方集成 | 否 |
| 同步数据 | 工单、联系人、客服、公司 |
| 可用技能 | 6 |
功能
- 联系人同步 - Freshdesk 联系人与 Brevo 联系人列表的双向同步
- 工单事件跟踪 - 将工单创建、更新和解决事件转发到 Brevo
- CSAT 同步 - 将客户满意度评分同步为 Brevo 联系人属性
- 公司同步 - 将 Freshdesk 公司映射到 Brevo 联系人细分
- 客服数据 - 跟踪客服分配,用于内部工作流自动化
- 自定义字段 - 将 Freshdesk 自定义工单和联系人字段映射到 Brevo 属性
前提条件
开始之前,请确保您已具备:
- 具有管理员访问权限的 Freshdesk 账户
- 您的 Freshdesk API 密钥(在”个人资料设置”中找到)
- 您的 Freshdesk 域名(例如
yourcompany.freshdesk.com) - 具有 API 访问权限的 Brevo 账户
- 具有 API 凭据的 Tajo 账户
认证
API 密钥认证
Freshdesk 通过 HTTP 基本认证使用 API 密钥。API 密钥作为用户名,任意字符串(通常为 X)作为密码。
curl -u "YOUR_API_KEY:X" \ https://yourcompany.freshdesk.com/api/v2/tickets或在 Authorization 请求头中使用 Base64 编码:
curl https://yourcompany.freshdesk.com/api/v2/tickets \ -H "Authorization: Basic BASE64_ENCODED_API_KEY:X" \ -H "Content-Type: application/json"查找您的 API 密钥
- 登录您的 Freshdesk 账户
- 点击右上角的个人头像
- 前往个人资料设置
- 您的 API 密钥显示在右侧
配置
基础设置
connectors: freshdesk: enabled: true domain: "yourcompany.freshdesk.com" api_key: "your-freshdesk-api-key"
# Data sync options sync: contacts: true tickets: true companies: true satisfaction_ratings: true
# Brevo list assignment lists: all_support_contacts: 30 open_tickets: 31 resolved_tickets: 32联系人字段映射
将 Freshdesk 联系人字段映射到 Brevo 属性:
contact_mapping: email: email name: FULLNAME phone: SMS company_id: COMPANY job_title: JOB_TITLE twitter_id: TWITTER language: LANGUAGE time_zone: TIMEZONE
# Support metrics total_tickets: TICKET_COUNT open_tickets: OPEN_TICKETS avg_csat: CSAT_SCORE last_ticket_date: LAST_SUPPORT_DATE
# Custom fields custom_fields.account_type: ACCOUNT_TYPE custom_fields.subscription_tier: PLAN工单事件映射
将 Freshdesk 工单事件映射到 Brevo 自动化触发器:
ticket_events: ticket_created: "support_ticket_created" ticket_updated: "support_ticket_updated" ticket_resolved: "support_ticket_resolved" ticket_closed: "support_ticket_closed" ticket_reopened: "support_ticket_reopened" satisfaction_rated: "csat_submitted" note_added: "support_note_added"API 端点
| 方法 | 端点 | 描述 |
|---|---|---|
GET | /api/v2/tickets | 列出所有工单 |
POST | /api/v2/tickets | 创建工单 |
GET | /api/v2/tickets/{id} | 获取特定工单 |
PUT | /api/v2/tickets/{id} | 更新工单 |
DELETE | /api/v2/tickets/{id} | 删除工单 |
GET | /api/v2/contacts | 列出所有联系人 |
POST | /api/v2/contacts | 创建联系人 |
PUT | /api/v2/contacts/{id} | 更新联系人 |
GET | /api/v2/companies | 列出所有公司 |
GET | /api/v2/agents | 列出所有客服 |
GET | /api/v2/surveys/satisfaction_ratings | 列出 CSAT 评分 |
GET | /api/v2/search/tickets?query= | 搜索工单 |
代码示例
初始化 Freshdesk 连接器
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Freshdesk accountawait tajo.connectors.connect('freshdesk', { domain: 'yourcompany.freshdesk.com', apiKey: process.env.FRESHDESK_API_KEY});将联系人同步到 Brevo
// Fetch Freshdesk contacts and sync to Brevoconst response = await fetch( 'https://yourcompany.freshdesk.com/api/v2/contacts?page=1&per_page=100', { headers: { 'Authorization': 'Basic ' + btoa(`${API_KEY}:X`), 'Content-Type': 'application/json' } });
const contacts = await response.json();// Each contact:// {// "id": 12345,// "name": "Jane Kim",// "email": "[email protected]",// "phone": "+15551234567",// "company_id": 678,// "job_title": "Product Manager",// "created_at": "2024-01-15T10:30:00Z"// }跟踪工单事件
// Set up Freshdesk webhook to forward ticket events// Configure in Freshdesk Admin > Automations > Webhook
// Webhook handlerapp.post('/webhooks/freshdesk', async (req, res) => { const { ticket, event_type } = req.body;
await tajo.connectors.handleWebhook('freshdesk', { topic: event_type, payload: { ticketId: ticket.id, subject: ticket.subject, status: ticket.status, priority: ticket.priority, requesterEmail: ticket.requester.email, createdAt: ticket.created_at } });
res.status(200).send('OK');});按客户搜索工单
// Search for all tickets from a specific customerconst response = await fetch( `https://yourcompany.freshdesk.com/api/v2/search/tickets?query=${query}`, { headers: { 'Authorization': 'Basic ' + btoa(`${API_KEY}:X`) } });
const { results, total } = await response.json();速率限制
| 计划 | 限制 | 详情 |
|---|---|---|
| Sprout | 50 请求/分钟 | 免费计划 |
| Blossom | 200 请求/分钟 | 入门计划 |
| Garden | 400 请求/分钟 | 增长计划 |
| Estate | 700 请求/分钟 | 专业计划 |
| Forest | 1,000 请求/分钟 | 企业计划 |
附加限制:
| 资源 | 限制 |
|---|---|
| 列表端点 | 每次查询 30 页 |
| 每页 | 最多 100 条记录 |
| 搜索 API | 2 请求/秒 |
| 批量操作 | 每次请求 10 条记录 |
速率限制响应头
Freshdesk 在响应头中返回速率限制信息。监控 X-RateLimit-Remaining,在接近限制时实施退避策略。
故障排除
| 问题 | 原因 | 解决方案 |
|---|---|---|
401 Unauthorized | API 密钥无效 | 在 Freshdesk 个人资料设置中验证 API 密钥 |
403 Forbidden | 权限不足 | 确保 API 密钥属于管理员账户 |
| 联系人未同步 | 缺少邮箱字段 | Freshdesk 联系人需要邮箱地址 |
| 工单未显示 | 域名错误 | 验证 Freshdesk 域名 URL 是否正确 |
| 搜索返回空 | 查询语法错误 | 使用带双引号的 Freshdesk 搜索查询语法 |
429 Too Many Requests | 超出速率限制 | 根据计划层级实施速率限制 |
| 自定义字段缺失 | 字段未启用 | 确保在 Freshdesk 管理中启用自定义字段 |
最佳实践
- 使用 Webhook 进行实时同步 - 配置 Freshdesk 自动化,在工单事件时触发 Webhook
- 同步 CSAT 评分 - 将客户满意度评分作为 Brevo 属性跟踪,用于细分
- 将工单状态映射到列表 - 根据工单状态自动在 Brevo 列表间移动联系人
- 跟踪支持指标 - 同步每个联系人的工单数量、平均响应时间和解决率
- 谨慎使用搜索 API - 搜索 API 有更严格的速率限制;尽可能缓存结果
- 分页处理大型导出 - 初始同步时使用
page和per_page参数进行分页
安全
- API 密钥认证 - 使用 API 密钥的简单 HTTP 基本认证
- 仅 HTTPS - 所有 API 通信均需要 TLS 加密
- IP 白名单 - Estate 和 Forest 计划可用
- 基于角色的访问 - API 密钥权限与客服角色绑定
- SOC 2 Type II - Freshdesk 通过 SOC 2 Type II 认证
- GDPR 合规 - 支持数据导出和删除请求