Zendesk 커넥터
Zendesk Support 인스턴스를 Tajo를 통해 Brevo에 연결하여 통합된 고객 지원 데이터, 티켓 기반 세그먼테이션, 만족도 점수 산출, 지원 트리거 마케팅 자동화를 구현하십시오.
개요
| 속성 | 값 |
|---|---|
| 플랫폼 | Zendesk |
| 카테고리 | Support |
| 설정 복잡도 | 중간 |
| 공식 통합 | 예 |
| 동기화 데이터 | 티켓, 사용자, 조직, 이벤트 |
| API Base URL | https://{subdomain}.zendesk.com/api/v2 |
기능
- 사용자 동기화 - Zendesk 최종 사용자 및 상담원을 Brevo 연락처와 동기화
- 티켓 추적 - 지원 인식 마케팅 세그먼테이션을 위한 티켓 데이터 동기화
- 조직 매핑 - B2B 워크플로를 위해 연락처를 조직과 연결
- 만족도 점수 - CSAT 및 NPS 데이터를 Brevo 속성에 동기화
- 티켓 이벤트 - 자동화 트리거를 위해 티켓 생성, 해결, 에스컬레이션 추적
- 헬프 센터 통합 - 아티클 조회수 및 검색 행동 추적
- 다중 채널 지원 - 이메일, 채팅, 음성, 메시징 채널의 데이터 동기화
- 맞춤 필드 - Zendesk 맞춤 티켓 및 사용자 필드를 Brevo에 매핑
사전 요구 사항
시작하기 전에 다음이 준비되어 있는지 확인하십시오.
- Zendesk Support 계정 (Team, Professional 또는 Enterprise)
- Zendesk 인스턴스에 대한 관리자 접근 권한
- API 토큰 또는 OAuth 앱이 구성됨
- API 접근이 가능한 Brevo 계정
- Tajo 계정
인증
API 토큰 인증
빠른 설정에 이메일/토큰 인증을 사용하십시오.
curl https://{subdomain}.zendesk.com/api/v2/users.json \ -u {email}/token:{api_token} \ -H "Content-Type: application/json"Zendesk Admin > Apps and Integrations > APIs > Zendesk API에서 API 토큰을 생성하십시오.
OAuth 2.0
위임된 사용자 접근이 있는 다중 인스턴스 통합에 OAuth를 사용하십시오.
# 인증 URLhttps://{subdomain}.zendesk.com/oauth/authorizations/new? response_type=code& client_id={client_id}& redirect_uri={redirect_uri}& scope=read%20write필수 범위
read # 모든 리소스에 대한 읽기 접근write # 모든 리소스에 대한 쓰기 접근tickets:read # 티켓 읽기 (세분화)users:read # 사용자 읽기 (세분화)organizations:read # 조직 읽기 (세분화)구성
기본 설정
connectors: zendesk: enabled: true subdomain: "yourcompany" auth: api_token: "${ZENDESK_API_TOKEN}"
# 데이터 동기화 옵션 sync: users: true tickets: true organizations: true satisfaction_ratings: true
# Brevo 목록 할당 lists: all_customers: 30 active_tickets: 31 satisfied_customers: 32필드 매핑
Zendesk 사용자 필드를 Brevo 연락처 속성에 매핑합니다.
기본 매핑
| Parameter | Type | Description |
|---|---|---|
email required | string | 사용자 이메일 주소 (고유 식별자) |
name optional | string | 전체 이름, FIRSTNAME/LASTNAME으로 분할됨 |
phone optional | string | WhatsApp/SMS용 SMS 속성에 매핑 |
organization_id optional | integer | B2B 매핑을 위한 연결된 조직 |
role optional | string | 사용자 역할 (end-user, agent, admin) |
tags optional | array | Zendesk의 사용자 태그 |
ticket_restriction optional | string | 티켓 접근 수준 |
custom_fields optional | object | 맞춤 사용자 필드 값 |
맞춤 필드 매핑
field_mapping: # 표준 필드 email: email name: FULLNAME phone: SMS
# 지원 지표 open_tickets: OPEN_TICKETS total_tickets: TOTAL_TICKETS avg_satisfaction: CSAT_SCORE last_ticket_date: LAST_SUPPORT_DATE
# 조직 필드 organization.name: COMPANY_NAME organization.tags: COMPANY_TAGS
# 맞춤 필드 user_fields.customer_type: CUSTOMER_TYPE user_fields.account_tier: ACCOUNT_TIERAPI 엔드포인트
Ticketing API
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
GET | /api/v2/tickets | 티켓 목록 |
POST | /api/v2/tickets | 티켓 생성 |
PUT | /api/v2/tickets/{id} | 티켓 업데이트 |
GET | /api/v2/tickets/{id} | 티켓 표시 |
GET | /api/v2/search.json?query={query} | 티켓 검색 |
Users API
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
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
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
GET | /api/v2/organizations | 조직 목록 |
POST | /api/v2/organizations | 조직 생성 |
GET | /api/v2/organizations/{id}/users | 조직 멤버 목록 |
Satisfaction Ratings API
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
GET | /api/v2/satisfaction_ratings | 만족도 평가 목록 |
GET | /api/v2/satisfaction_ratings/{id} | 평가 표시 |
이벤트
티켓 이벤트
| 이벤트 | 트리거 | 사용 사례 |
|---|---|---|
ticket.created | 새 티켓 제출됨 | 지원 확인 |
ticket.updated | 티켓 상태 변경됨 | 상태 알림 |
ticket.solved | 티켓 해결됨으로 표시 | CSAT 설문 트리거 |
ticket.reopened | 해결된 티켓 재오픈됨 | 에스컬레이션 알림 |
사용자 이벤트
| 이벤트 | 트리거 | 사용 사례 |
|---|---|---|
user.created | 새 사용자 등록됨 | 지원 환영 |
user.updated | 사용자 프로필 변경됨 | 속성 동기화 |
user.merged | 사용자 병합됨 | 중복 제거 |
만족도 이벤트
| 이벤트 | 트리거 | 사용 사례 |
|---|---|---|
satisfaction_rating.created | CSAT 제출됨 | 피드백 처리 |
satisfaction_rating.bad | 부정적 평가 | 복구 아웃리치 |
satisfaction_rating.good | 긍정적 평가 | 옹호 캠페인 |
코드 예제
커넥터 초기화
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Zendesk 연결await tajo.connectors.connect('zendesk', { subdomain: 'yourcompany', apiToken: process.env.ZENDESK_API_TOKEN});사용자 및 티켓 동기화
// 사용자 및 티켓 데이터 전체 동기화await tajo.connectors.sync('zendesk', { type: 'full', resources: ['users', 'tickets', 'organizations'], since: '2023-01-01'});
// 동기화 상태 확인const status = await tajo.connectors.status('zendesk');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// usersSynced: 8400,// ticketsSynced: 34200,// organizationsSynced: 1200// }Zendesk 웹훅 처리
app.post('/webhooks/zendesk', async (req, res) => { const signature = req.get('X-Zendesk-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');});속도 제한
Zendesk 속도 제한은 요금제에 따라 다릅니다.
| 요금제 | 속도 제한 | 세부 사항 |
|---|---|---|
| Team | 200 요청/분 | API 토큰당 |
| Professional | 400 요청/분 | API 토큰당 |
| Enterprise | 700 요청/분 | API 토큰당 |
| High Volume Add-on | 2,500 요청/분 | API 토큰당 |
추가 제한:
- Search API: 익명은 6 요청/분, 인증된 사용자는 100 요청/분
- Incremental 내보내기: 10 요청/분
- Batch API: 배치 요청당 100 레코드
- 웹훅 배달: 지수 백오프를 사용한 자동 재시도
속도 제한 헤더
API 사용량을 관리하려면 X-Rate-Limit-Remaining 및 Retry-After 헤더를 모니터링하십시오.
문제 해결
일반적인 문제
| 문제 | 원인 | 해결 방법 |
|---|---|---|
| 401 Unauthorized | 잘못된 API 토큰 | Zendesk Admin에서 토큰 재생성 |
| 403 Forbidden | 권한 부족 | 상담원 또는 관리자 역할 요구 사항 확인 |
| 사용자가 동기화되지 않음 | 사용자가 최종 사용자가 아닌 상담원임 | 동기화 구성에서 역할별 필터링 |
| 웹훅이 수신되지 않음 | 트리거/대상이 구성되지 않음 | Zendesk Admin에서 웹훅 대상 설정 |
| 검색이 비어 있음 | 인덱싱 지연 | 검색 인덱스 업데이트까지 1-2분 대기 |
디버그 모드
자세한 로깅 활성화:
connectors: zendesk: debug: true log_level: verbose log_webhooks: true연결 테스트
tajo connectors test zendesk# ✓ API 연결 성공# ✓ 사용자 읽기 가능# ✓ 티켓 읽기 가능# ✓ 조직 읽기 가능# ✓ 웹훅 구성됨모범 사례
- Incremental 내보내기 사용 - 대규모 데이터 동기화에 Incremental API 사용
- 최종 사용자만 필터링 - Brevo 연락처 동기화에서 상담원 및 관리자 제외
- CSAT 데이터 동기화 - 고객 상태 세그먼테이션을 위한 만족도 점수 사용
- 조직 매핑 - B2B 마케팅 캠페인을 위해 조직 데이터 활용
- 웹훅 재시도 구현 - 일시적인 실패를 원활하게 처리
- Side-loading 사용 - 요청 수를 줄이기 위해 API 응답에 관련 레코드 포함
보안
- API 토큰 인증 - 관리자 이메일에 연결된 토큰 기반 접근
- OAuth 2.0 - 범위 제어가 있는 토큰 기반 위임 접근
- 웹훅 서명 - 웹훅 페이로드에 대한 HMAC 서명 확인
- TLS 암호화 - HTTPS를 통해 암호화된 모든 API 통신
- IP 허용 목록 - IP 범위별 API 접근 제한