Mixpanel Connector
เชื่อมต่อ Mixpanel กับ Brevo ผ่าน Tajo เพื่อเชื่อมต่อ product analytics กับระบบอัตโนมัติทางการตลาด ซิงค์โปรไฟล์ผู้ใช้ เหตุการณ์พฤติกรรม และ cohorts เพื่อสร้างแคมเปญที่ขับเคลื่อนด้วยข้อมูลตามการใช้งานผลิตภัณฑ์จริง
ภาพรวม
| คุณสมบัติ | ค่า |
|---|---|
| แพลตฟอร์ม | Mixpanel |
| หมวดหมู่ | Analytics (แบบกำหนดเอง) |
| ความซับซ้อนในการตั้งค่า | ปานกลาง |
| การผสานรวมอย่างเป็นทางการ | ไม่ |
| ข้อมูลที่ซิงค์ | เหตุการณ์ โปรไฟล์ Cohorts กลุ่ม |
| ทักษะที่มีอยู่ | 7 |
ฟีเจอร์
- การนำเข้าเหตุการณ์ - นำเข้า track events ผ่าน Ingestion API ของ Mixpanel เข้าสู่เวิร์กโฟลว์ Brevo
- การซิงค์โปรไฟล์ผู้ใช้ - แมปคุณสมบัติโปรไฟล์ผู้ใช้ Mixpanel กับแอตทริบิวต์ผู้ติดต่อ Brevo
- การส่งออก cohort - ซิงค์ cohorts ของ Mixpanel กับรายการผู้ติดต่อ Brevo สำหรับแคมเปญที่กำหนดเป้าหมาย
- Group analytics - ซิงค์ข้อมูลระดับกลุ่มสำหรับ B2B account-based marketing
- การจัดการตัวตน - ใช้การรวมตัวตนของ Mixpanel สำหรับโปรไฟล์ลูกค้าแบบรวม
- JQL queries - รัน JQL queries แบบกำหนดเองเพื่อดึงชุดข้อมูลเฉพาะสำหรับ Brevo
- Lookup tables - ซิงค์ข้อมูลการเพิ่มความสมบูรณ์จาก lookup tables ของ Mixpanel
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- บัญชี Mixpanel ที่มีโปรเจกต์ที่สร้างแล้ว
- Mixpanel Project Token ของคุณสำหรับการติดตามฝั่ง client
- Service Account ที่มีสิทธิ์เหมาะสมสำหรับการเข้าถึง API ฝั่งเซิร์ฟเวอร์
- บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo ที่มีข้อมูลรับรอง API
การยืนยันตัวตน
Service Accounts (แนะนำ)
Mixpanel แนะนำให้ใช้ Service Accounts สำหรับการยืนยันตัวตน API Service accounts ใช้ HTTP Basic Auth พร้อม username (service account username) และ password (service account secret)
# Service Account authenticationcurl https://mixpanel.com/api/app/me \ -u "SERVICE_ACCOUNT_USERNAME:SERVICE_ACCOUNT_SECRET"Project Token
Project Token ใช้สำหรับการติดตามเหตุการณ์ฝั่ง client และปลอดภัยที่จะรวมในโค้ด client:
// Client-side initializationmixpanel.init("YOUR_PROJECT_TOKEN");OAuth (สำหรับการผสานรวม Partner)
สำหรับการผสานรวม app ที่เข้าถึงหลายโปรเจกต์:
curl https://mixpanel.com/api/2.0/engage \ -H "Authorization: Bearer YOUR_OAUTH_TOKEN"การกำหนดค่า
การตั้งค่าพื้นฐาน
connectors: mixpanel: enabled: true project_token: "your-project-token" service_account: username: "your-service-account-username" secret: "your-service-account-secret" project_id: "12345" data_residency: "US" # or "EU"
# Data sync options sync: events: true profiles: true cohorts: true groups: false
# Brevo list assignment lists: all_users: 15 engaged_users: 16 at_risk: 17การแมปเหตุการณ์
แมปเหตุการณ์ Mixpanel กับประเภทเหตุการณ์ Brevo:
event_mapping: # Mixpanel event -> Brevo event "Purchase": "order_completed" "Sign Up": "customer_created" "Add to Cart": "cart_updated" "Page View": "page_viewed" "$experiment_started": "experiment_started"
# Custom events "Feature Activated": "feature_used" "Subscription Renewed": "subscription_renewed"การแมปคุณสมบัติโปรไฟล์
แมปคุณสมบัติผู้ใช้ Mixpanel กับแอตทริบิวต์ผู้ติดต่อ Brevo:
property_mapping: $email: email $first_name: FIRSTNAME $last_name: LASTNAME $phone: SMS $city: CITY $region: REGION $country_code: COUNTRY plan: PLAN_TYPE company: COMPANY signup_date: SIGNUP_DATE total_revenue: LTVAPI Endpoints
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
POST | /import | นำเข้าเหตุการณ์ (Ingestion API) |
POST | /track | ติดตามเหตุการณ์ (ฝั่ง client) |
POST | /engage#$set | ตั้งค่าคุณสมบัติโปรไฟล์ผู้ใช้ |
POST | /engage#$set_once | ตั้งค่าคุณสมบัติเฉพาะถ้ายังไม่ได้ตั้งค่า |
POST | /engage#$delete | ลบโปรไฟล์ผู้ใช้ |
POST | /engage#$union | Union กับคุณสมบัติรายการ |
POST | /groups | ตั้งค่าคุณสมบัติโปรไฟล์กลุ่ม |
GET | /export | ส่งออกข้อมูลเหตุการณ์ดิบ |
POST | /cohorts/list | แสดงรายการ cohorts ที่บันทึกไว้ |
POST | /engage/query | Query โปรไฟล์ผู้ใช้ |
POST | /jql | รัน JQL queries แบบกำหนดเอง |
GET | /segmentation | Query รายงานการแบ่งกลุ่ม |
GET | /retention | Query รายงานการรักษาผู้ใช้ |
GET | /funnels | Query รายงาน funnel |
ตัวอย่างโค้ด
เริ่มต้น Mixpanel Connector
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Mixpanel projectawait tajo.connectors.connect('mixpanel', { projectToken: process.env.MIXPANEL_TOKEN, serviceAccountUser: process.env.MIXPANEL_SA_USER, serviceAccountSecret: process.env.MIXPANEL_SA_SECRET, projectId: process.env.MIXPANEL_PROJECT_ID});นำเข้าเหตุการณ์ผ่าน Ingestion API
// Import events to Mixpanel (automatically forwarded to Brevo)const response = await fetch('https://api.mixpanel.com/import', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Basic ' + btoa( `${process.env.MIXPANEL_SA_USER}:${process.env.MIXPANEL_SA_SECRET}` ) }, body: JSON.stringify([ { event: "Purchase", properties: { distinct_id: "user_123", $insert_id: "evt_abc123", time: Math.floor(Date.now() / 1000), revenue: 89.99, product_id: "SKU-001", product_name: "Widget Pro" } } ])});
// Expected response: { "code": 200, "status": "OK", "num_records_imported": 1 }ซิงค์ Cohort กับ Brevo
// Export a Mixpanel cohort and sync to a Brevo listconst cohort = await tajo.connectors.syncCohort('mixpanel', { cohortId: 12345, targetList: 16, syncMode: 'mirror'});
console.log(cohort);// {// cohortName: "Engaged Users (Last 7 Days)",// membersCount: 3200,// syncedToBrevo: 3200,// listId: 16// }ตั้งค่าคุณสมบัติโปรไฟล์ผู้ใช้
// Set user properties via the Engage APIconst response = await fetch('https://api.mixpanel.com/engage#$set', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify([{ $token: process.env.MIXPANEL_TOKEN, $distinct_id: "user_123", $set: { $first_name: "Jane", $last_name: "Kim", plan: "premium", total_orders: 12, lifetime_value: 1250.00 } }])});ขีดจำกัดอัตรา
| API | ขีดจำกัด | รายละเอียด |
|---|---|---|
| Ingestion API | 2 GB/นาที | ต่อโปรเจกต์ |
| Track API | ไม่มีขีดจำกัดที่แน่นอน | การส่งมอบแบบ Best-effort |
| Engage API | 2,000 อัปเดต/batch | สูงสุด 2 GB/นาทีต่อโปรเจกต์ |
| Query API | 60 คำขอ/ชั่วโมง | ต่อโปรเจกต์ (Service Account) |
| Export API | 60 คำขอ/ชั่วโมง | สูงสุด 100 วันต่อ query |
| JQL API | 60 คำขอ/ชั่วโมง | ต่อโปรเจกต์ |
| Cohort Export | 60 คำขอ/ชั่วโมง | ต่อโปรเจกต์ |
การลบรายการเหตุการณ์ซ้ำ
Mixpanel ลบรายการเหตุการณ์ซ้ำโดยใช้คุณสมบัติ $insert_id ต้องรวม $insert_id เฉพาะเสมอเพื่อป้องกันเหตุการณ์ซ้ำเมื่อลองนำเข้าที่ล้มเหลวใหม่
การแก้ไขปัญหา
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| เหตุการณ์ไม่ปรากฏ | Project token ไม่ถูกต้อง | ตรวจสอบว่า token ตรงกับโปรเจกต์เป้าหมาย |
| คุณสมบัติโปรไฟล์หายไป | ใช้ API ผิด | ใช้ /engage#$set สำหรับคุณสมบัติโปรไฟล์ ไม่ใช่ /track |
| การส่งออก cohort ล้มเหลว | สิทธิ์ไม่เพียงพอ | ตรวจสอบให้แน่ใจว่า Service Account มีบทบาท Admin หรือ Analyst |
| เหตุการณ์ซ้ำ | ขาด $insert_id | รวม $insert_id เฉพาะในทุกเหตุการณ์ |
| 402 Payment Required | เกินขีดจำกัดข้อมูล | ตรวจสอบขีดจำกัดแผน Mixpanel และอัปเกรดหากจำเป็น |
| ข้อมูล EU ไม่ถูกกำหนดเส้นทาง | Data residency ไม่ถูกต้อง | ใช้ api-eu.mixpanel.com สำหรับโปรเจกต์ EU |
| ปัญหาการรวมตัวตน | distinct_id ไม่ถูกต้อง | ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดในการจัดการตัวตนของ Mixpanel |
แนวทางปฏิบัติที่ดีที่สุด
- ใช้ Service Accounts - ใช้ Service Accounts แทน Project Secret สำหรับการยืนยันตัวตนฝั่งเซิร์ฟเวอร์
- รวม
$insert_id- ตั้งค่า insert ID เฉพาะเสมอสำหรับการลบรายการเหตุการณ์ซ้ำ - อัปเดตโปรไฟล์แบบ Batch - ส่งสูงสุด 2,000 การอัปเดตโปรไฟล์ต่อคำขอเพื่อประสิทธิภาพ
- ใช้ EU endpoints - สำหรับ EU data residency ใช้
api-eu.mixpanel.comสำหรับการเรียก API ทั้งหมด - ซิงค์ cohorts ตามกำหนดการ - ตั้งค่าการซิงค์ cohort รายวันหรือรายสัปดาห์แทนการ polling ต่อเนื่อง
- แมปคุณสมบัติที่สงวนไว้ - ใช้คุณสมบัติที่สงวนไว้ของ Mixpanel (
$email,$first_name) สำหรับข้อมูลโปรไฟล์ - ตรวจสอบ ingestion - ใช้หน้า Events ของ Mixpanel เพื่อตรวจสอบว่าเหตุการณ์กำลังได้รับอย่างถูกต้อง
ความปลอดภัย
- HTTPS เท่านั้น - การสื่อสาร API ทั้งหมดต้องการการเข้ารหัส TLS
- การแยก Service Account - การเข้าถึงแบบกำหนดขอบเขตต่อโปรเจกต์พร้อมสิทธิ์ตามบทบาท
- การลบรายการเหตุการณ์ซ้ำ - Built-in dedup ผ่าน
$insert_idป้องกันปัญหาความสมบูรณ์ของข้อมูล - SOC 2 Type II - Mixpanel ได้รับการรับรอง SOC 2 Type II
- GDPR/CCPA - รองรับการลบข้อมูลผู้ใช้ผ่าน GDPR API
- EU data residency - EU data center มีให้สำหรับการปฏิบัติตามมาตรฐานยุโรป