Freshdesk Connector
เชื่อมต่อ Freshdesk กับ Brevo ผ่าน Tajo เพื่อรวมข้อมูล support และ marketing ซิงค์ support tickets ของลูกค้า โปรไฟล์ผู้ติดต่อ และคะแนนความพึงพอใจเพื่อขับเคลื่อนการสื่อสารที่มีเป้าหมายตามการโต้ตอบ support
ภาพรวม
| คุณสมบัติ | ค่า |
|---|---|
| แพลตฟอร์ม | Freshdesk |
| หมวดหมู่ | Support |
| ความซับซ้อนในการตั้งค่า | ง่าย |
| การผสานรวมอย่างเป็นทางการ | ไม่ |
| ข้อมูลที่ซิงค์ | Tickets ผู้ติดต่อ Agents บริษัท |
| Skills ที่มี | 6 |
ฟีเจอร์
- การซิงค์ผู้ติดต่อ - การซิงค์แบบ bidirectional ของ Freshdesk contacts ไปยัง Brevo contact lists
- การติดตามเหตุการณ์ Ticket - ส่งต่อเหตุการณ์การสร้าง อัปเดต และแก้ไข ticket ไปยัง Brevo
- การซิงค์ CSAT - ซิงค์คะแนนความพึงพอใจลูกค้าเป็น Brevo contact attributes
- การซิงค์บริษัท - แมป Freshdesk companies ไปยัง Brevo contact segmentation
- ข้อมูล Agent - ติดตามการมอบหมาย agent สำหรับ internal workflow automation
- Custom fields - แมป Freshdesk custom ticket และ contact fields ไปยัง Brevo attributes
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- บัญชี Freshdesk ที่มีสิทธิ์ admin
- Freshdesk API Key ของคุณ (พบใน Profile Settings)
- Freshdesk domain ของคุณ (เช่น
yourcompany.freshdesk.com) - บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo ที่มี API credentials
การยืนยันตัวตน
การยืนยันตัวตนด้วย API Key
Freshdesk ใช้การยืนยันตัวตนด้วย API key ผ่าน HTTP Basic Auth โดยใช้ API key เป็น username และ string ใดก็ได้ (โดยทั่วไปคือ X) เป็น password
curl -u "YOUR_API_KEY:X" \ https://yourcompany.freshdesk.com/api/v2/ticketsหรือใช้การเข้ารหัส Base64 ในส่วนหัว Authorization:
curl https://yourcompany.freshdesk.com/api/v2/tickets \ -H "Authorization: Basic BASE64_ENCODED_API_KEY:X" \ -H "Content-Type: application/json"การค้นหา API Key ของคุณ
- เข้าสู่ระบบบัญชี Freshdesk ของคุณ
- คลิกรูปโปรไฟล์ที่มุมบนขวา
- ไปที่ Profile Settings
- API Key ของคุณจะแสดงอยู่ทางด้านขวา
การกำหนดค่า
การตั้งค่าพื้นฐาน
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การแมปเหตุการณ์ Ticket
แมปเหตุการณ์ ticket ของ Freshdesk ไปยัง automation triggers ของ 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 Endpoints
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
GET | /api/v2/tickets | แสดงรายการ tickets ทั้งหมด |
POST | /api/v2/tickets | สร้าง ticket |
GET | /api/v2/tickets/{id} | ดึง ticket เฉพาะ |
PUT | /api/v2/tickets/{id} | อัปเดต ticket |
DELETE | /api/v2/tickets/{id} | ลบ ticket |
GET | /api/v2/contacts | แสดงรายการผู้ติดต่อทั้งหมด |
POST | /api/v2/contacts | สร้างผู้ติดต่อ |
PUT | /api/v2/contacts/{id} | อัปเดตผู้ติดต่อ |
GET | /api/v2/companies | แสดงรายการบริษัททั้งหมด |
GET | /api/v2/agents | แสดงรายการ agents ทั้งหมด |
GET | /api/v2/surveys/satisfaction_ratings | แสดงรายการคะแนน CSAT |
GET | /api/v2/search/tickets?query= | ค้นหา tickets |
ตัวอย่างโค้ด
เริ่มต้น Freshdesk Connector
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"// }ติดตามเหตุการณ์ Ticket
// 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');});ค้นหา Tickets ตามลูกค้า
// 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 คำขอ/นาที | แผน Starter |
| Garden | 400 คำขอ/นาที | แผน Growth |
| Estate | 700 คำขอ/นาที | แผน Pro |
| Forest | 1,000 คำขอ/นาที | แผน Enterprise |
ขีดจำกัดเพิ่มเติม:
| ทรัพยากร | ขีดจำกัด |
|---|---|
| List endpoints | 30 หน้าต่อ query |
| ต่อหน้า | สูงสุด 100 records |
| Search API | 2 คำขอ/วินาที |
| Bulk operations | 10 records/คำขอ |
ส่วนหัว Rate Limit
Freshdesk ส่งข้อมูล rate limit ในส่วนหัวของการตอบกลับ ตรวจสอบ X-RateLimit-Remaining และใช้ backoff เมื่อใกล้ถึงขีดจำกัด
การแก้ไขปัญหา
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
401 Unauthorized | API key ไม่ถูกต้อง | ตรวจสอบ API key ใน Freshdesk Profile Settings |
403 Forbidden | สิทธิ์ไม่เพียงพอ | ตรวจสอบว่า API key เป็นของบัญชี admin |
| ผู้ติดต่อไม่ซิงค์ | ฟิลด์อีเมลหายไป | Freshdesk contacts ต้องมีที่อยู่อีเมล |
| Tickets ไม่ปรากฏ | Domain ผิด | ตรวจสอบว่า Freshdesk domain URL ถูกต้อง |
| การค้นหาว่างเปล่า | ข้อผิดพลาดไวยากรณ์ query | ใช้ไวยากรณ์ Freshdesk search query พร้อม double quotes |
429 Too Many Requests | เกิน rate limit | ใช้ rate limiting ตามระดับแผน |
| Custom fields หายไป | ไม่ได้เปิดใช้งานฟิลด์ | ตรวจสอบว่าเปิดใช้งาน custom fields ใน Freshdesk admin |
แนวทางปฏิบัติที่ดีที่สุด
- ใช้ webhooks สำหรับการซิงค์แบบ real-time - กำหนดค่า Freshdesk Automations เพื่อ trigger webhooks บนเหตุการณ์ ticket
- ซิงค์คะแนน CSAT - ติดตามคะแนนความพึงพอใจลูกค้าเป็น Brevo attributes สำหรับการแบ่ง segment
- แมปสถานะ ticket ไปยังรายการ - ย้ายผู้ติดต่อโดยอัตโนมัติระหว่าง Brevo lists ตามสถานะ ticket
- ติดตาม support metrics - ซิงค์จำนวน ticket เวลาตอบกลับเฉลี่ย และอัตราการแก้ไขต่อผู้ติดต่อ
- ใช้ search API อย่างประหยัด - Search API มี rate limits ที่เข้มงวดกว่า; cache ผลลัพธ์เมื่อเป็นไปได้
- ใช้ pagination สำหรับ exports ขนาดใหญ่ - ใช้ pagination พร้อมพารามิเตอร์
pageและper_pageสำหรับการซิงค์เริ่มต้น
ความปลอดภัย
- การยืนยันตัวตนด้วย API key - HTTP Basic Auth แบบง่ายด้วย API key
- HTTPS เท่านั้น - การสื่อสาร API ทั้งหมดต้องการการเข้ารหัส TLS
- IP whitelisting - มีให้สำหรับแผน Estate และ Forest
- Role-based access - สิทธิ์ API key เชื่อมกับบทบาท agent
- SOC 2 Type II - Freshdesk ได้รับการรับรอง SOC 2 Type II
- การปฏิบัติตาม GDPR - รองรับคำขอส่งออกและลบข้อมูล