Zendesk Connector
เชื่อมต่อ Zendesk Support instance ของคุณกับ Brevo ผ่าน Tajo เพื่อข้อมูล customer support ที่รวมกัน การแบ่ง segment ตาม ticket การให้คะแนนความพึงพอใจ และ marketing automation ที่ triggered จาก support
ภาพรวม
| คุณสมบัติ | ค่า |
|---|---|
| แพลตฟอร์ม | Zendesk |
| หมวดหมู่ | Support |
| ความซับซ้อนในการตั้งค่า | ปานกลาง |
| การผสานรวมอย่างเป็นทางการ | ใช่ |
| ข้อมูลที่ซิงค์ | Tickets ผู้ใช้ Organizations เหตุการณ์ |
| API Base URL | https://{subdomain}.zendesk.com/api/v2 |
ฟีเจอร์
- การซิงค์ผู้ใช้ - ซิงค์ Zendesk end-users และ agents กับ Brevo contacts
- การติดตาม Ticket - ซิงค์ข้อมูล ticket สำหรับการแบ่ง segment การตลาดที่ตระหนักถึง support
- การแมป Organization - เชื่อมผู้ติดต่อกับ organizations สำหรับ B2B workflows
- คะแนนความพึงพอใจ - ซิงค์ข้อมูล CSAT และ NPS ไปยัง Brevo attributes
- เหตุการณ์ Ticket - ติดตามการสร้าง การแก้ไข และการยกระดับ ticket สำหรับ automation triggers
- การผสานรวม Help center - ติดตามการดูบทความและพฤติกรรมการค้นหา
- รองรับหลายช่องทาง - ซิงค์ข้อมูลจากอีเมล แชท เสียง และ messaging channels
- Custom fields - แมป Zendesk custom ticket และ user fields ไปยัง Brevo
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- บัญชี Zendesk Support (Team, Professional หรือ Enterprise)
- สิทธิ์ admin สำหรับ Zendesk instance ของคุณ
- API token หรือกำหนดค่า OAuth app
- บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo
การยืนยันตัวตน
การยืนยันตัวตนด้วย API Token
ใช้การยืนยันตัวตนด้วย email/token สำหรับการตั้งค่าที่รวดเร็ว
curl https://{subdomain}.zendesk.com/api/v2/users.json \ -u {email}/token:{api_token} \ -H "Content-Type: application/json"สร้าง API token จาก Zendesk Admin > Apps and Integrations > APIs > Zendesk API
OAuth 2.0
ใช้ OAuth สำหรับการผสานรวมหลาย instance พร้อม delegated user access
# Authorization URLhttps://{subdomain}.zendesk.com/oauth/authorizations/new? response_type=code& client_id={client_id}& redirect_uri={redirect_uri}& scope=read%20writeScopes ที่จำเป็น
read # Read access to all resourceswrite # Write access to all resourcestickets:read # Read tickets (granular)users:read # Read users (granular)organizations:read # Read organizations (granular)การกำหนดค่า
การตั้งค่าพื้นฐาน
connectors: zendesk: enabled: true subdomain: "yourcompany" auth: api_token: "${ZENDESK_API_TOKEN}"
# Data sync options sync: users: true tickets: true organizations: true satisfaction_ratings: true
# Brevo list assignment lists: all_customers: 30 active_tickets: 31 satisfied_customers: 32การแมปฟิลด์
แมปฟิลด์ผู้ใช้ Zendesk กับแอตทริบิวต์ผู้ติดต่อ Brevo:
การแมปเริ่มต้น
| Parameter | Type | Description |
|---|---|---|
email required | string | ที่อยู่อีเมลผู้ใช้ (unique identifier) |
name optional | string | ชื่อเต็ม แยกเป็น FIRSTNAME/LASTNAME |
phone optional | string | แมปกับแอตทริบิวต์ SMS สำหรับ WhatsApp/SMS |
organization_id optional | integer | organization ที่เกี่ยวข้องสำหรับการแมป B2B |
role optional | string | บทบาทผู้ใช้ (end-user, agent, admin) |
tags optional | array | Tags ผู้ใช้จาก Zendesk |
ticket_restriction optional | string | ระดับการเข้าถึง ticket |
custom_fields optional | object | ค่า custom user field |
การแมป Custom Field
field_mapping: # Standard fields email: email name: FULLNAME phone: SMS
# Support metrics open_tickets: OPEN_TICKETS total_tickets: TOTAL_TICKETS avg_satisfaction: CSAT_SCORE last_ticket_date: LAST_SUPPORT_DATE
# Organization fields organization.name: COMPANY_NAME organization.tags: COMPANY_TAGS
# Custom fields user_fields.customer_type: CUSTOMER_TYPE user_fields.account_tier: ACCOUNT_TIERAPI Endpoints
Ticketing API
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
GET | /api/v2/tickets | แสดงรายการ tickets |
POST | /api/v2/tickets | สร้าง ticket |
PUT | /api/v2/tickets/{id} | อัปเดต ticket |
GET | /api/v2/tickets/{id} | แสดง ticket |
GET | /api/v2/search.json?query={query} | ค้นหา tickets |
Users API
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
GET | /api/v2/users | แสดงรายการผู้ใช้ |
POST | /api/v2/users | สร้างผู้ใช้ |
PUT | /api/v2/users/{id} | อัปเดตผู้ใช้ |
GET | /api/v2/users/{id} | แสดงผู้ใช้ |
GET | /api/v2/users/search.json?query={query} | ค้นหาผู้ใช้ |
Organizations API
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
GET | /api/v2/organizations | แสดงรายการ organizations |
POST | /api/v2/organizations | สร้าง organization |
GET | /api/v2/organizations/{id}/users | แสดงรายการสมาชิก organization |
Satisfaction Ratings API
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
GET | /api/v2/satisfaction_ratings | แสดงรายการคะแนนความพึงพอใจ |
GET | /api/v2/satisfaction_ratings/{id} | แสดงคะแนน |
เหตุการณ์
เหตุการณ์ Ticket
| เหตุการณ์ | Trigger | กรณีการใช้งาน |
|---|---|---|
ticket.created | ส่ง ticket ใหม่แล้ว | การยืนยัน support |
ticket.updated | สถานะ ticket เปลี่ยนแล้ว | การแจ้งเตือนสถานะ |
ticket.solved | ทำเครื่องหมาย ticket ว่าแก้ไขแล้ว | Trigger การสำรวจ CSAT |
ticket.reopened | เปิด ticket ที่แก้ไขแล้วใหม่ | การแจ้งเตือนการยกระดับ |
เหตุการณ์ผู้ใช้
| เหตุการณ์ | Trigger | กรณีการใช้งาน |
|---|---|---|
user.created | ผู้ใช้ใหม่ลงทะเบียน | ยินดีต้อนรับสู่ support |
user.updated | โปรไฟล์ผู้ใช้เปลี่ยนแล้ว | การซิงค์ attribute |
user.merged | ผู้ใช้รวมกันแล้ว | Deduplication |
เหตุการณ์ความพึงพอใจ
| เหตุการณ์ | Trigger | กรณีการใช้งาน |
|---|---|---|
satisfaction_rating.created | ส่ง CSAT แล้ว | การประมวลผล feedback |
satisfaction_rating.bad | Rating เชิงลบ | การติดต่อเพื่อแก้ไข |
satisfaction_rating.good | Rating เชิงบวก | แคมเปญ advocacy |
ตัวอย่างโค้ด
เริ่มต้น Connector
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Zendeskawait tajo.connectors.connect('zendesk', { subdomain: 'yourcompany', apiToken: process.env.ZENDESK_API_TOKEN});ซิงค์ผู้ใช้และ Tickets
// Full sync of users and ticket dataawait tajo.connectors.sync('zendesk', { type: 'full', resources: ['users', 'tickets', 'organizations'], since: '2023-01-01'});
// Check sync statusconst status = await tajo.connectors.status('zendesk');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// usersSynced: 8400,// ticketsSynced: 34200,// organizationsSynced: 1200// }จัดการ Zendesk Webhooks
app.post('/webhooks/zendesk', async (req, res) => { const signature = req.get('X-Zendesk-Webhook-Signature');
// Verify webhook signature if (!verifyZendeskSignature(req.body, signature)) { return res.status(401).send('Unauthorized'); }
await tajo.connectors.handleWebhook('zendesk', { type: req.body.type, ticketId: req.body.ticket_id, userId: req.body.user_id, payload: req.body });
res.status(200).send('OK');});ขีดจำกัดอัตรา
Rate limits ของ Zendesk แตกต่างกันตามแผน:
| แผน | ขีดจำกัดอัตรา | รายละเอียด |
|---|---|---|
| Team | 200 คำขอ/นาที | ต่อ API token |
| Professional | 400 คำขอ/นาที | ต่อ API token |
| Enterprise | 700 คำขอ/นาที | ต่อ API token |
| High Volume Add-on | 2,500 คำขอ/นาที | ต่อ API token |
ขีดจำกัดเพิ่มเติม:
- Search API: 6 คำขอ/นาทีสำหรับ anonymous, 100/นาทีสำหรับการยืนยันตัวตน
- Incremental exports: 10 คำขอ/นาที
- Batch API: 100 records ต่อ batch request
- Webhook delivery: ลองใหม่อัตโนมัติพร้อม exponential backoff
ส่วนหัว Rate Limit
ตรวจสอบส่วนหัว X-Rate-Limit-Remaining และ Retry-After เพื่อจัดการการใช้งาน API ของคุณ
การแก้ไขปัญหา
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| 401 Unauthorized | API token ไม่ถูกต้อง | สร้าง token ใหม่ใน Zendesk Admin |
| 403 Forbidden | สิทธิ์ไม่เพียงพอ | ตรวจสอบข้อกำหนดบทบาท agent หรือ admin |
| ผู้ใช้ไม่ซิงค์ | ผู้ใช้เป็น agent ไม่ใช่ end-user | กรองตาม role ในการกำหนดค่าการซิงค์ |
| ไม่ได้รับ Webhook | ไม่ได้กำหนดค่า trigger/target | ตั้งค่า webhook target ใน Zendesk Admin |
| การค้นหาว่างเปล่า | ความล่าช้าในการ indexing | รอ 1-2 นาทีเพื่ออัปเดต search index |
โหมด Debug
เปิดใช้งาน verbose logging:
connectors: zendesk: debug: true log_level: verbose log_webhooks: trueทดสอบการเชื่อมต่อ
tajo connectors test zendesk# ✓ API connection successful# ✓ Users readable# ✓ Tickets readable# ✓ Organizations readable# ✓ Webhooks configuredแนวทางปฏิบัติที่ดีที่สุด
- ใช้ incremental exports - ใช้ Incremental API สำหรับการซิงค์ข้อมูลขนาดใหญ่
- กรองเฉพาะ end-users - ยกเว้น agents และ admins จากการซิงค์ Brevo contact
- ซิงค์ข้อมูล CSAT - ใช้คะแนนความพึงพอใจสำหรับการแบ่ง segment สุขภาพลูกค้า
- แมป organizations - ใช้ข้อมูล organization สำหรับแคมเปญ B2B marketing
- ใช้ webhook retries - จัดการความล้มเหลวชั่วคราวอย่างมีเกียรติ
- ใช้ side-loading - รวม records ที่เกี่ยวข้องใน API responses เพื่อลดจำนวนคำขอ
ความปลอดภัย
- การยืนยันตัวตนด้วย API Token - การเข้าถึงด้วย token ที่เชื่อมกับอีเมล admin
- OAuth 2.0 - Delegated access ด้วย token พร้อมการควบคุม scope
- Webhook signing - การตรวจสอบ HMAC signature สำหรับ webhook payloads
- การเข้ารหัส TLS - การสื่อสาร API ทั้งหมดเข้ารหัสผ่าน HTTPS
- IP whitelisting - จำกัดการเข้าถึง API ตามช่วง IP