SendGrid 커넥터
SendGrid 계정을 Tajo를 통해 Brevo에 연결하여 이메일 인프라 마이그레이션, 연락처 동기화, 캠페인 데이터 전송, 두 플랫폼 간의 통합된 참여 분석을 구현하십시오.
개요
| 속성 | 값 |
|---|---|
| 플랫폼 | SendGrid (Twilio) |
| 카테고리 | Marketing |
| 설정 복잡도 | 쉬움 |
| 공식 통합 | 예 |
| 동기화 데이터 | 연락처, 캠페인, 트랜잭션 이메일, 이벤트 |
| API Base URL | https://api.sendgrid.com/v3 |
기능
- 연락처 마이그레이션 - 맞춤 필드와 함께 SendGrid Marketing 연락처를 Brevo로 마이그레이션
- 트랜잭션 이메일 동기화 - 통합 보고를 위한 트랜잭션 이메일 이벤트 추적
- 캠페인 데이터 - Single Send 및 Automation 캠페인 성능 데이터 동기화
- 이벤트 웹훅 - 이메일 이벤트(배달, 오픈, 클릭, 반송)를 Brevo로 전달
- 억제 동기화 - 규정 준수를 위해 반송, 차단, 구독 취소 목록 마이그레이션
- 템플릿 마이그레이션 - Brevo에서 사용할 Dynamic Transactional Templates 내보내기
- 발신자 검증 - 검증된 발신자 아이덴티티 및 도메인 인증 동기화
- 통계 동기화 - Brevo 속성에 과거 참여 통계 가져오기
사전 요구 사항
시작하기 전에 다음이 준비되어 있는지 확인하십시오.
- SendGrid 계정 (Free, Essentials, Pro 또는 Premier)
- 필수 권한이 있는 SendGrid API 키
- API 접근이 가능한 Brevo 계정
- Tajo 계정
인증
API 키 인증
SendGrid는 Bearer 토큰 인증을 사용합니다.
curl https://api.sendgrid.com/v3/marketing/contacts \ -H "Authorization: Bearer SG.YOUR_API_KEY" \ -H "Content-Type: application/json"특정 권한 수준으로 SendGrid Settings > API Keys에서 API 키를 생성하십시오:
- Full Access - 완전한 API 접근
- Restricted Access - 세분화된 권한 제어
- Billing Access - 청구 전용 작업
필수 권한
Marketing: Full Access - Contacts (read) - Single Sends (read) - Automations (read)Mail Send: Full Access - Mail Send (read)Stats: Read AccessSuppressions: Read AccessTracking: Read AccessAPI 키 보안
SendGrid API 키는 생성 시 한 번만 표시됩니다. 안전하게 저장하십시오. 분실한 경우 새 키를 생성해야 합니다.
구성
기본 설정
connectors: sendgrid: enabled: true api_key: "${SENDGRID_API_KEY}"
# 데이터 동기화 옵션 sync: contacts: true campaigns: true transactional: true suppressions: true statistics: true
# Brevo로의 목록 매핑 list_mapping: "All Contacts": 60 "Newsletter": 61 "Transactional": 62필드 매핑
SendGrid 연락처 필드를 Brevo 연락처 속성에 매핑합니다.
기본 매핑
| Parameter | Type | Description |
|---|---|---|
email required | string | 연락처 이메일 주소 (고유 식별자) |
first_name optional | string | FIRSTNAME 속성에 매핑 |
last_name optional | string | LASTNAME 속성에 매핑 |
phone_number optional | string | SMS 속성에 매핑 |
city optional | string | 연락처 도시 |
country optional | string | 연락처 국가 |
custom_fields optional | object | 맞춤 필드 키-값 쌍 |
list_ids optional | array | SendGrid 목록 멤버십 |
맞춤 필드 매핑
field_mapping: # 표준 필드 email: email first_name: FIRSTNAME last_name: LASTNAME phone_number: SMS
# 위치 필드 city: CITY state_province_region: STATE country: COUNTRY postal_code: POSTAL_CODE
# 참여 지표 avg_open_rate: AVG_OPEN_RATE avg_click_rate: AVG_CLICK_RATE
# 맞춤 필드 custom_fields.company: COMPANY_NAME custom_fields.plan: PLAN_TYPEAPI 엔드포인트
마케팅 연락처
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
PUT | /v3/marketing/contacts | 연락처 추가 또는 업데이트 |
POST | /v3/marketing/contacts/search | 연락처 검색 |
GET | /v3/marketing/contacts/count | 연락처 수 가져오기 |
POST | /v3/marketing/contacts/exports | 연락처 내보내기 |
DELETE | /v3/marketing/contacts | 연락처 삭제 |
GET | /v3/marketing/lists | 모든 연락처 목록 |
트랜잭션 이메일 (Mail Send)
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
POST | /v3/mail/send | 이메일 전송 |
GET | /v3/templates | Dynamic Templates 목록 |
GET | /v3/templates/{id} | 템플릿 세부 정보 가져오기 |
캠페인 (Single Sends)
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
GET | /v3/marketing/singlesends | Single Sends 목록 |
GET | /v3/marketing/singlesends/{id} | Single Send 세부 정보 가져오기 |
GET | /v3/marketing/automations | Automation 목록 |
통계
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
GET | /v3/stats | 전역 이메일 통계 가져오기 |
GET | /v3/categories/stats | 카테고리 통계 가져오기 |
GET | /v3/marketing/stats/singlesends | Single Send 통계 가져오기 |
억제
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
GET | /v3/suppression/bounces | 반송된 이메일 목록 |
GET | /v3/suppression/blocks | 차단된 이메일 목록 |
GET | /v3/suppression/spam_reports | 스팸 보고 목록 |
GET | /v3/suppression/unsubscribes | 전역 구독 취소 목록 |
이벤트
이메일 이벤트 (Event Webhook을 통해)
| 이벤트 | 트리거 | 사용 사례 |
|---|---|---|
processed | SendGrid가 이메일 수락 | 전송 확인 |
delivered | 이메일이 수신자에게 배달됨 | 배달 추적 |
open | 이메일 오픈됨 | 참여 점수 산출 |
click | 링크 클릭됨 | 관심사 추적 |
bounce | 이메일 반송됨 | 목록 정리 |
dropped | 이메일 억제됨 | 규정 준수 검토 |
deferred | 배달 지연됨 | 재시도 모니터링 |
spam_report | 스팸으로 표시됨 | 평판 관리 |
unsubscribe | 링크를 통해 구독 취소됨 | 선호도 동기화 |
코드 예제
커넥터 초기화
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// SendGrid 연결await tajo.connectors.connect('sendgrid', { apiKey: process.env.SENDGRID_API_KEY});연락처를 Brevo로 마이그레이션
// SendGrid에서 Brevo로의 전체 연락처 마이그레이션await tajo.connectors.sync('sendgrid', { type: 'full', resources: ['contacts', 'suppressions'], options: { includeCustomFields: true, migrateListMemberships: true, migrateSuppressions: true }});
// 마이그레이션 상태 확인const status = await tajo.connectors.status('sendgrid');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsMigrated: 45000,// suppressionsSynced: 3200,// listsMapped: 8// }이메일 이벤트 전달
// SendGrid Event Webhook 처리app.post('/webhooks/sendgrid', async (req, res) => { const signature = req.get('X-Twilio-Email-Event-Webhook-Signature');
// 웹훅 서명 확인 (ECDSA) if (!verifySendGridSignature(req.body, signature)) { return res.status(401).send('Unauthorized'); }
// 이벤트 배치 처리 for (const event of req.body) { await tajo.connectors.handleWebhook('sendgrid', { type: event.event, email: event.email, timestamp: event.timestamp, payload: event }); }
res.status(200).send('OK');});속도 제한
SendGrid API 속도 제한:
| 엔드포인트 | 제한 | 세부 사항 |
|---|---|---|
Mail Send (/v3/mail/send) | 요금제에 따라 다름 | Free: 100/일, Essentials: 요금제 기반 |
| Marketing Contacts PUT | 3 요청/초 | 최대 30,000 연락처 배치 |
| Marketing Contacts Search | 50 요청/초 | API 키당 |
| 일반 API | 1,000 요청/초 | API 키당 |
| Event Webhook | 배치 배달 | POST당 최대 1,000 이벤트 |
Mail Send 제한
Mail Send 제한은 SendGrid 요금제에 따라 다릅니다. 무료 계정은 100 이메일/일로 제한됩니다. 정확한 발송 제한은 요금제 세부 정보를 확인하십시오.
문제 해결
일반적인 문제
| 문제 | 원인 | 해결 방법 |
|---|---|---|
| 401 Unauthorized | 잘못된 API 키 | SendGrid Settings에서 API 키 확인 |
| 403 Forbidden | API 키 권한 부족 | 필수 범위로 새 키 생성 |
| 연락처 내보내기 대기 중 | 대용량 데이터 세트 처리 | 완료될 때까지 내보내기 상태 엔드포인트 폴링 |
| 억제 동기화 불완전 | 페이지네이션 필요 | offset 매개변수로 페이지네이션 구현 |
| 이벤트 웹훅이 수신되지 않음 | URL이 검증되지 않음 | SendGrid에서 웹훅 URL 검증 완료 |
디버그 모드
자세한 로깅 활성화:
connectors: sendgrid: debug: true log_level: verbose log_webhooks: true연결 테스트
tajo connectors test sendgrid# ✓ API 연결 성공# ✓ 연락처 읽기 가능# ✓ 목록 접근 가능# ✓ 통계 읽기 가능# ✓ 억제 접근 가능모범 사례
- 억제를 먼저 마이그레이션 - 발송 전에 Brevo에 반송, 차단, 구독 취소가 있는지 확인
- 배치 연락처 업로드 사용 - 효율성을 위해 요청당 최대 30,000 연락처 PUT
- Event Webhook 확인 - ECDSA 검증으로 서명된 웹훅 활성화
- 맞춤 필드 매핑 - 연락처 마이그레이션 전에 해당하는 Brevo 속성 생성
- 참여 데이터 동기화 - Brevo에서 세그먼테이션을 위한 과거 통계 가져오기
- 비동기 내보내기 처리 - 연락처 내보내기는 비동기; 완료를 위해 폴링
보안
- API 키 인증 - 세분화된 권한 수준의 Bearer 토큰
- Event Webhook 서명 - 웹훅 페이로드에 대한 ECDSA 서명 확인
- TLS 암호화 - HTTPS를 통해 암호화된 모든 API 통신
- IP 접근 관리 - IP별 대시보드 및 API 접근 제한
- 이중 인증 - 계정 접근을 위한 2FA 사용 가능