CRM Integration App
Schema-driven paket bağlama: CRM kullanıcısı JSON/workflow key ezberlemeden paketi seçer, alan hazırlığını görür ve tetikler.
Golden path: partner-logistics-v1 → event LOGISTICS_STARTED.
4 adım
1. Bağlantı API key + webhook secret
2. Paket bağla GET /packages/<key>/bind-kit/
3. Alan hazırlığı project (domain → payload) + readiness
4. Tetikle / dinle validate → POST /events/ → outbound webhook
1) Bağlantı
base_url— örn.https://app.b2bworker.com- API key (
b2b_…) — Auth & API Keys - Webhook secret — CRM inbound URL’inizi Webhooks veya
POST /api/v1/packages/sync-webhook/ile kaydedin
2) Paket bağla (tek istek)
GET /api/v1/packages/partner-logistics-v1/bind-kit/
Authorization: Bearer b2b_…
Yanıt özeti:
| Alan | Ne işe yarar |
|---|---|
event_map | CRM event → { workflow, event } (Medicalepus convention) |
default_workflow | İlk inbound workflow key |
inbound[].fields | path / level / label / example |
inbound[].sample_payload | Örnek gövde |
inbound[].aliases | Contract path → CRM domain adayları |
setup_steps | Wizard metinleri |
event_map örneği:
{
"LOGISTICS_STARTED": {
"workflow": "partner-logistics-v1",
"event": "LOGISTICS_STARTED"
}
}
Contract-only (bind-kit’siz): testcrm ↔ app — GET …/contract/.
3) Alan hazırlığı
CRM domain JSON’unu contract path’lerine projekte edin:
POST /api/v1/packages/partner-logistics-v1/bind-kit/project/
Authorization: Bearer b2b_…
Content-Type: application/json
{
"crm_event": "LOGISTICS_STARTED",
"domain": {
"journey_id": "11111111-1111-1111-1111-111111111111",
"patient": { "name": "Jane Doe", "phone": "+905551112233" },
"flight": { "flight_number": "TK123" }
}
}
Yanıt:
payload— b2bworker’a gidecek gövde (patient.name→patient.display_name,phone→whatsapp)readiness—ok|warn|blockedmissing_required/missing_warningsevent/workflow— fire için hazır
UI kuralı: blocked → CTA kapalı; warn → sarı uyarıyla devam edilebilir.
İsteğe bağlı field_map ile alias override:
{ "patient.display_name": "guest.full_name" }
4) Tetikle + dinle
Dry-run (Event/Execution oluşturulmaz):
POST /api/v1/events/validate/
Authorization: Bearer b2b_…
Content-Type: application/json
{
"event": "LOGISTICS_STARTED",
"workflow": "partner-logistics-v1",
"payload": {
"journey_id": "11111111-1111-1111-1111-111111111111",
"patient": { "display_name": "Jane Doe" }
}
}
ok: false ise errors / missing_required / workflow_match ile düzeltin.
Fire:
POST /api/v1/events/
Authorization: Bearer b2b_…
Idempotency-Key: crm-journey-1111-leg-1
Content-Type: application/json
{
"event": "LOGISTICS_STARTED",
"workflow": "partner-logistics-v1",
"payload": { ... }
}
Outbound: PARTNER_APPROVED, PARTNER_REJECTED, EXECUTION_SUCCESS, EXECUTION_FAILED — journey/trip status’una yazın. İmza: Webhooks.
Panel referansı
Uygulama içinde deneme: /integrations/crm — paket seç → domain yapıştır → project → validate → fire.
CRM veri modeli (öneri)
Paketi CRM’de kopyalamayın. Tutulacaklar:
AutomationConnection— provider, credentials, webhookPackageBinding—package_key,event_map,field_map,contract_snapshotAutomationRun— journey/leg,execution_id, status
Domain (Patient, Journey, Leg) sabit kalır; projection binding üzerinden gider.
Yaygın hatalar
| Belirti | Neden |
|---|---|
validate ok ama fire’da execution yok | Workflow active değil veya trigger ≠ event |
patient.display_name eksik | Domain’de yalnızca patient.name yoksa alias da boş — isim alanını doldurun |
| 201 ama WhatsApp yok | Execution / Meta ayrı adım — testcrm ↔ app |