Konektor Zendesk
Hubungkan instance Zendesk Support Anda ke Brevo melalui Tajo untuk data support pelanggan yang terpadu, segmentasi berbasis tiket, penilaian kepuasan, dan otomatisasi marketing yang dipicu aktivitas support.
Ikhtisar
| Properti | Nilai |
|---|---|
| Platform | Zendesk |
| Kategori | Support |
| Kompleksitas setup | Menengah |
| Integrasi resmi | Ya |
| Data yang disinkronkan | Tiket, User, Organisasi, Event |
| Base URL API | https://{subdomain}.zendesk.com/api/v2 |
Fitur
- Sinkronisasi user - Sinkronkan end-user dan agen Zendesk dengan kontak Brevo
- Pelacakan tiket - Sinkronkan data tiket untuk segmentasi marketing yang sadar konteks support
- Pemetaan organisasi - Kaitkan kontak dengan organisasi untuk alur kerja B2B
- Skor kepuasan - Sinkronkan data CSAT dan NPS ke atribut Brevo
- Event tiket - Lacak pembuatan, penyelesaian, dan eskalasi tiket sebagai pemicu otomatisasi
- Integrasi help center - Lacak tampilan artikel dan perilaku pencarian
- Dukungan multi-channel - Sinkronkan data dari channel email, chat, voice, dan messaging
- Custom field - Petakan custom field tiket dan user Zendesk ke Brevo
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Akun Zendesk Support (Team, Professional, atau Enterprise)
- Akses admin ke instance Zendesk Anda
- API token atau app OAuth yang sudah dikonfigurasi
- Akun Brevo dengan akses API
- Akun Tajo
Autentikasi
Autentikasi API token
Gunakan autentikasi email/token untuk setup cepat.
curl https://{subdomain}.zendesk.com/api/v2/users.json \ -u {email}/token:{api_token} \ -H "Content-Type: application/json"Buat API token dari Zendesk Admin > Apps and Integrations > APIs > Zendesk API.
OAuth 2.0
Gunakan OAuth untuk integrasi multi-instance dengan akses user yang terdelegasi.
# Authorization URLhttps://{subdomain}.zendesk.com/oauth/authorizations/new? response_type=code& client_id={client_id}& redirect_uri={redirect_uri}& scope=read%20writeScope yang dibutuhkan
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)Konfigurasi
Setup dasar
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: 32Pemetaan field
Petakan field user Zendesk ke atribut kontak Brevo:
Pemetaan default
| Parameter | Type | Description |
|---|---|---|
email required | string | Alamat email user (pengenal unik) |
name optional | string | Nama lengkap, dipecah menjadi FIRSTNAME/LASTNAME |
phone optional | string | Dipetakan ke atribut SMS untuk WhatsApp/SMS |
organization_id optional | integer | Organisasi terkait untuk pemetaan B2B |
role optional | string | Peran user (end-user, agent, admin) |
tags optional | array | Tag user dari Zendesk |
ticket_restriction optional | string | Tingkat akses tiket |
custom_fields optional | object | Nilai custom field user |
Pemetaan 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_TIEREndpoint API
Ticketing API
| Metode | Endpoint | Deskripsi |
|---|---|---|
GET | /api/v2/tickets | Menampilkan tiket |
POST | /api/v2/tickets | Membuat tiket |
PUT | /api/v2/tickets/{id} | Memperbarui tiket |
GET | /api/v2/tickets/{id} | Menampilkan satu tiket |
GET | /api/v2/search.json?query={query} | Mencari tiket |
Users API
| Metode | Endpoint | Deskripsi |
|---|---|---|
GET | /api/v2/users | Menampilkan user |
POST | /api/v2/users | Membuat user |
PUT | /api/v2/users/{id} | Memperbarui user |
GET | /api/v2/users/{id} | Menampilkan satu user |
GET | /api/v2/users/search.json?query={query} | Mencari user |
Organizations API
| Metode | Endpoint | Deskripsi |
|---|---|---|
GET | /api/v2/organizations | Menampilkan organisasi |
POST | /api/v2/organizations | Membuat organisasi |
GET | /api/v2/organizations/{id}/users | Menampilkan anggota organisasi |
Satisfaction Ratings API
| Metode | Endpoint | Deskripsi |
|---|---|---|
GET | /api/v2/satisfaction_ratings | Menampilkan rating kepuasan |
GET | /api/v2/satisfaction_ratings/{id} | Menampilkan satu rating |
Event
Event tiket
| Event | Pemicu | Kasus penggunaan |
|---|---|---|
ticket.created | Tiket baru dikirimkan | Konfirmasi penerimaan support |
ticket.updated | Status tiket berubah | Notifikasi status |
ticket.solved | Tiket ditandai selesai | Pemicu survei CSAT |
ticket.reopened | Tiket selesai dibuka kembali | Notifikasi eskalasi |
Event user
| Event | Pemicu | Kasus penggunaan |
|---|---|---|
user.created | User baru terdaftar | Sambutan untuk support |
user.updated | Profil user berubah | Sinkronisasi atribut |
user.merged | User digabungkan | Deduplikasi |
Event kepuasan
| Event | Pemicu | Kasus penggunaan |
|---|---|---|
satisfaction_rating.created | CSAT dikirimkan | Pemrosesan umpan balik |
satisfaction_rating.bad | Rating negatif | Outreach pemulihan |
satisfaction_rating.good | Rating positif | Kampanye advokasi |
Contoh kode
Inisialisasi konektor
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});Menyinkronkan user dan tiket
// 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// }Menangani webhook Zendesk
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');});Batas rate
Batas rate Zendesk berbeda menurut paket:
| Paket | Batas rate | Detail |
|---|---|---|
| Team | 200 permintaan/menit | Per API token |
| Professional | 400 permintaan/menit | Per API token |
| Enterprise | 700 permintaan/menit | Per API token |
| Add-on High Volume | 2.500 permintaan/menit | Per API token |
Batas tambahan:
- Search API: 6 permintaan/menit untuk anonim, 100/menit untuk terautentikasi
- Ekspor inkremental: 10 permintaan/menit
- Batch API: 100 record per permintaan batch
- Pengiriman webhook: Percobaan ulang otomatis dengan exponential backoff
Header batas rate
Pantau header X-Rate-Limit-Remaining dan Retry-After untuk mengelola penggunaan API Anda.
Pemecahan masalah
Masalah umum
| Masalah | Penyebab | Solusi |
|---|---|---|
| 401 Unauthorized | API token tidak valid | Buat ulang token di Zendesk Admin |
| 403 Forbidden | Izin tidak mencukupi | Periksa persyaratan peran agent atau admin |
| User tidak tersinkronisasi | User adalah agent, bukan end-user | Filter berdasarkan role di konfigurasi sinkronisasi |
| Webhook tidak diterima | Trigger/target belum dikonfigurasi | Siapkan target webhook di Zendesk Admin |
| Pencarian mengembalikan hasil kosong | Penundaan pengindeksan | Tunggu 1-2 menit hingga indeks pencarian diperbarui |
Mode debug
Aktifkan logging verbose:
connectors: zendesk: debug: true log_level: verbose log_webhooks: trueMenguji koneksi
tajo connectors test zendesk# ✓ API connection successful# ✓ Users readable# ✓ Tickets readable# ✓ Organizations readable# ✓ Webhooks configuredPraktik terbaik
- Gunakan ekspor inkremental - Gunakan Incremental API untuk sinkronisasi data berskala besar
- Filter hanya end-user - Kecualikan agent dan admin dari sinkronisasi kontak Brevo
- Sinkronkan data CSAT - Gunakan skor kepuasan untuk segmentasi customer health
- Petakan organisasi - Manfaatkan data organisasi untuk kampanye marketing B2B
- Terapkan percobaan ulang webhook - Tangani kegagalan sementara dengan baik
- Gunakan side-loading - Sertakan record terkait dalam respons API untuk menekan jumlah permintaan
Keamanan
- Autentikasi API token - Akses berbasis token yang terikat pada email admin
- OAuth 2.0 - Akses terdelegasi berbasis token dengan kontrol scope
- Penandatanganan webhook - Verifikasi tanda tangan HMAC untuk payload webhook
- Enkripsi TLS - Semua komunikasi API dienkripsi lewat HTTPS
- IP whitelisting - Batasi akses API berdasarkan rentang IP