Make Entegrasyonu

Make (eski Integromat), bir formu dolduran kişiyi saniyeler içinde Purvisor asistanının önüne düşürebilir: Make senaryonda POST /contacts ile kontağı açarsın, POST /calls ile yapay zeka asistanı hemen arar, ve çağrı biter bitmez Purvisor sonucu (özet + duygu + sonuç) anlık webhook ile Make’e geri gönderir. Kod yazmadan, tek bir senaryoda uçtan uca otomasyon.

Make’in kendine ait bir Purvisor uygulaması yok — bunun yerine Make’in genel HTTP modülü üzerinden Purvisor Public API’sini çağırırsın. Yani her şey Zapier ile aynı API’ye dayanır; sadece arayüz farklı. Zapier tarafı için: Zapier.

Nasıl çalışır?

Make’te iki yönlü çalışır — sen Purvisor’ı çağırırsın, Purvisor da seni çağırır:

GİDEN (Make → Purvisor):
  Make senaryosu (ör. yeni form yanıtı)
        ↓ HTTP modülü, X-API-Key ile
  POST https://app.purvisor.ai/api/v1/contacts   → kontak oluştur
  POST https://app.purvisor.ai/api/v1/calls      → AI araması başlat

GELEN (Purvisor → Make, ANLIK TETİKLEYİCİ):
  Make "Custom webhook" → sana bir hook URL'i verir
        ↓ o URL'i Purvisor'a abone et:
  POST https://app.purvisor.ai/api/v1/hooks  { event, targetUrl }
        ↓ olay gerçekleşince (ör. call.completed)
  Purvisor senin Make webhook URL'ine imzalı JSON POST eder
        ↓ (X-Purvisor-Signature ile doğrula)
  Make senaryon tetiklenir → Sheets/Slack/CRM'e yaz

Purvisor Public API’sinin taban adresi https://app.purvisor.ai/api/v1’dir. www.purvisor.ai pazarlama sitesidir, API değildir. Tüm gövdeler ve yanıtlar JSON’dur.

Ön koşullar

  • Purvisor’da oluşturulmuş bir API anahtarı (pk_live_ + 48 hex = 56 karakter). Panelde Ayarlar → API Anahtarı → Anahtar Oluştur ile üretilir ve yalnızca bir kez gösterilir (API Anahtarı Yönetimi).
  • Hazır ve aktif bir outbound asistan (İlk Asistanını Oluştur).
  • Bağlı ve aktif bir telefon numarası (SIP trunk) — arama bu numaradan çıkar (Telefon Numarası (SIP)).
  • Arama başlatmak için hesabında ≥ 1 dakika bakiyesi olmalı (yoksa POST /calls 402 “Yetersiz dakika bakiyesi” döner).

Kurulum

API anahtarınla bir bağlantı (connection) oluştur

Make’te Purvisor’a özel bir uygulama olmadığı için kimlik doğrulamayı HTTP modülünün içinde tanımlarsın. İki yol var:

  • API Key Auth bağlantısı (önerilen): HTTP modülünde yeni bir API key bağlantısı oluştur — anahtar adı X-API-Key, değeri senin pk_live_... anahtarın olsun. Böylece anahtarı senaryolara gömmeden tekrar tekrar kullanırsın.
  • Doğrudan header: Her HTTP modülüne elle bir başlık ekle → X-API-Key: pk_live_...

Purvisor üç kimlik yöntemi kabul eder: X-API-Key (birincil), Authorization: Bearer pk_live_... ve ?api_key=... sorgu parametresi. Make için en temizi X-API-Key başlığıdır.

Bağlantıyı test etmek için bir HTTP modülüyle GET https://app.purvisor.ai/api/v1/me çağır. 200 ve { "id": "...", "email": "...", "name": "..." } dönerse anahtar geçerlidir. 401 {"error":"invalid_api_key"} → anahtar yanlış/eksik.

📸 [Ekran görüntüsü: Make HTTP modülü — API Key Auth bağlantısı, anahtar adı X-API-Key]

Kontak oluştur — POST /contacts

Senaryoya bir HTTP → Make a request modülü ekle:

AlanDeğer
URLhttps://app.purvisor.ai/api/v1/contacts
MethodPOST
HeadersX-API-Key: pk_live_... (veya API key bağlantısı)
Body typeRaw / JSON (Content-Type: application/json)

Gövde (alan adları snake_case veya camelCase olabilir):

{
  "first_name": "Ayşe",
  "last_name": "Yılmaz",
  "phone": "+905551234567",
  "email": "ayse@ornek.com",
  "company": "Örnek A.Ş."
}
  • Zorunlu: first_name (veya name) ve phone (en az 10 hane).
  • Dedupe: Aynı telefon (tam eşleşme veya son 10 hane) zaten varsa yeni kayıt açılmaz — mevcut kontak existing: true ile ve HTTP 200 döner. Yeni kayıt → HTTP 201, existing: false, source: "zapier".
  • Yanıt gövdesi: { id, first_name, last_name, name, phone, email, company, title, status, stage, lead_score, heat, source, created_at, existing }. Sonraki modüller için id alanını eşle (map et).

Ayrıntılı alan listesi ve arama (GET /contacts?phone= / ?search=): Kontaklar.

AI araması başlat — POST /calls

Kontak hazır olunca ikinci bir HTTP modülüyle aramayı tetikle:

POST https://app.purvisor.ai/api/v1/calls
X-API-Key: pk_live_...
Content-Type: application/json
 
{
  "phone": "+905551234567",
  "assistant_id": "asst_...",
  "first_name": "Ayşe"
}
AlanZorunluNot
phoneEvetEn az 10 hane. Kontak yoksa otomatik oluşturulur.
assistant_idEvetBu hesaba ait ve aktif olmalı. Kimlik GET /api/v1/assistants ile çekilir.
phone_number_idHayırVerilmezse hesabındaki ilk aktif numara kullanılır. GET /api/v1/phone-numbers ile listelenir.
first_name, last_nameHayırKontak yeni oluşturulacaksa kullanılır.

Başarılı → HTTP 201 { call_id, status: "initiated", contact_id, assistant_id, from_number, to }.

⚠️

Kapılar: asistan/numara bu hesaba ait değilse 404; dakika bakiyesi 1’in altındaysa 402 “Yetersiz dakika bakiyesi”; aynı kişiye devam eden bir API araması varsa 409; santral araması başlatamazsa 502. Bu kodları Make’te bir Router + Filter ile ayırıp hata dallarını yönetmek iyi olur.

Asistan ve numara kimliklerini GET /api/v1/assistants ve GET /api/v1/phone-numbers çağrılarıyla (Hesap & Lookup’lar) senaryonun başında bir kez çekip saklayabilirsin.

Anlık tetikleyici kur — Make webhook’unu POST /hooks ile abone et

Purvisor’ın olay olunca seni çağırması için önce Make’te bir hedef URL üret, sonra o URL’i Purvisor’a abone et.

  1. Make’te yeni bir senaryo aç, ilk modül olarak Webhooks → Custom webhook ekle. Make sana benzersiz bir URL verir (ör. https://hook.eu2.make.com/xxxxxxxx). Bu, olayların geleceği adrestir.
  2. Bir HTTP modülü (veya curl) ile bu URL’i Purvisor’a abone et:
curl -X POST https://app.purvisor.ai/api/v1/hooks \
  -H "X-API-Key: pk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "event": "call.completed",
    "targetUrl": "https://hook.eu2.make.com/xxxxxxxx",
    "source": "make"
  }'

Yanıt → HTTP 201 { id, event, targetUrl, secret }.

⚠️

Dönen secret (32 hex karakter) yalnızca burada verilir ve gelen her isteğin imzasını doğrulamak için gereklidir. Kaybedersen aboneliği silip yeniden oluşturman gerekir. Ayrıca targetUrl https:// ile başlamalıdır — Make hook URL’leri zaten https’tir.

Artık her call.completed olayında Purvisor senin Make webhook’una şu zarfı POST eder:

{
  "event": "call.completed",
  "timestamp": "2026-07-12T14:03:00.000Z",
  "data": {
    "callId": "...",
    "phoneNumber": "+905551234567",
    "direction": "outbound",
    "durationSeconds": 92,
    "outcome": "...",
    "sentiment": "positive",
    "summary": "...",
    "contactId": "..."
  }
}

İstek başlıkları: X-Purvisor-Event: call.completed ve X-Purvisor-Signature (gövdenin HMAC-SHA256 imzası). İmzayı senaryonda mutlaka doğrula — bkz. İmza Doğrulama.

📸 [Ekran görüntüsü: Make Custom webhook modülü — hedef URL + gelen call.completed veri yapısı]

İmzayı doğrula ve devam et

Gelen isteğin gerçekten Purvisor’dan geldiğini kanıtlamak için: X-Purvisor-Signature başlığını, aboneliğin secret’ı ile ham gövdenin HMAC-SHA256 (hex) özetiyle karşılaştır. Eşleşmiyorsa isteği yok say (Make’te bir Filter ile durdur). Tam algoritma ve örnek kod: İmza Doğrulama.

İmza geçerliyse data içindeki summary, sentiment, outcome gibi alanları bir sonraki modüle (Google Sheets satırı, Slack mesajı, CRM güncellemesi) eşleyerek senaryonu tamamla.

Senaryo örneği: form → anında AI araması → sonucu Slack’e

Somut bir kurgu — bir web formundan gelen sıcak lead’i beklemeye almadan aramak:

[Senaryo A — Giden]
 1) Typeform: yeni form yanıtı (tetikleyici)
 2) HTTP → POST /contacts        (kontağı aç, id'yi al)
 3) HTTP → POST /calls           (asistan hemen arasın)

[Senaryo B — Gelen, anlık]
 1) Webhooks: Custom webhook      (Purvisor call.completed buraya POST eder)
 2) Filter: X-Purvisor-Signature geçerli mi?  (değilse dur)
 3) Slack: #satis kanalına özet + duygu + sonucu yaz

Senaryo A lead’i 0–2 dakika içinde aratır (dönüşümün altın penceresi); Senaryo B ise görüşme biter bitmez ekibe özeti düşürür. İkisi tek bir API anahtarı ve tek bir webhook aboneliğiyle çalışır.

Hangi olaylara abone olabilirim?

Purvisor’da 9 olay adı tanımlıdır, ama şu an yalnızca 3’ü gerçekten tetiklenir:

OlayDurumNe zaman tetiklenir
call.completed✅ AktifÇağrı analizi kaydedildikten sonra (özet, duygu, sonuç, süre).
contact.created✅ AktifYeni kontak oluşunca (POST /contacts, web formu, n8n lead).
dnc.requested✅ AktifAranan kişi “beni aramayın” dediğinde.
lead.hot✅ AktifKişi o aramada “sıcak” eşiğine geçtiğinde (her sıcak aramada tekrar değil).
appointment.booked✅ AktifRandevu oluşturulduğunda (tarih, saat, randevu kodu ve linkiyle).
campaign.finished✅ AktifKampanya tamamlandığında — tam bir kez.
call.failed✅ AktifUlaşılamayan arama (cevapsız/meşgul/reddedildi). Müşteri gerçekten konuştuysa yayılmaz.
appointment.cancelled✅ AktifRandevu iptal edildiğinde.
appointment.rescheduled✅ AktifRandevu ertelendiğinde — önceki tarih/saat de payload’da.

Dokuz olayın tamamı canlıdır. Her olayın alan yapısını görmek için GET /api/v1/samples?event=<olay> çağırabilirsin — dönen kayıt, canlıda geleceğin zarfının aynısıdır. Tam katalog: Webhook’lar.

Teslimat güvenilirliği

  • Purvisor teslimatı bir kuyruk üzerinden yapar: 5 deneme, üstel geri çekilme (15 sn taban), her istek için 10 sn zaman aşımı.
  • Make webhook’un 2xx dışında bir kod dönerse istek yeniden denenir. Bu yüzden Make senaryonun başında imza kontrolünden sonra hızlıca 200 dönmesi iyidir (uzun işleri sonraya bırak).
  • 10 ardışık başarısızlıktan sonra abonelik otomatik devre dışı bırakılır (isActive=false). Make senaryonu kapatırsan/silersen, aboneliği de temizle: DELETE /api/v1/hooks/{id}.

KVKK notu: Bu entegrasyon telefon numarası, ad ve çağrı içeriği gibi kişisel verileri Make senaryonuza taşır. Otomatik arama için açık rızanın alınmış olması, verinin yalnızca gerekli modüllere aktarılması ve asistanın açılışta kim olduğunu/neden aradığını net söylemesi gerekir. Ayrıntı: KVKK ve Veri Yönetimi.

Sorun giderme

BelirtiOlası neden / çözüm
Tüm çağrılar 401 invalid_api_keyX-API-Key başlığı eksik/yanlış; anahtar pk_live_ ile başlamıyor; anahtar yeniden oluşturulunca eski anahtar anında geçersiz olur — yeni anahtarı gir.
POST /calls402Dakika bakiyesi 1’in altında. Paket yükle (Dakika Paketleri).
POST /calls404assistant_id veya phone_number_id bu hesaba ait değil / pasif. GET /assistants, GET /phone-numbers ile doğrula.
POST /calls409Aynı kişiye devam eden bir API araması var — çift tetikleme; Make’te bir gecikme/kilit ekle.
Aynı kişi ikinci kez eklenince yeni kontak açılmadıBeklenen davranış — telefon dedupe. existing: true + HTTP 200 gelir, yeni kayıt oluşmaz.
Make webhook’u hiç tetiklenmiyorDokuz olay da canlıdır — olay henüz gerçekleşmemiş olabilir. targetUrl https mi? Abonelik devre dışı mı (10 başarısızlık)? Plan Pro ve üzeri mi (403 premium_required)?
İmza doğrulaması tutmuyorHam (raw) gövde üzerinden HMAC-SHA256 hesapla, JSON’u yeniden serialize etme; doğru aboneliğin secret’ını kullan. Bkz. İmza Doğrulama.

/api/v1 uçlarında API anahtarı başına dakikada 60 istek sınırı vardır; aşılırsa 429 ve Retry-After başlığı döner. Make senaryolarını makul aralıklarla tetikleyip gereksiz eşzamanlı arama açmaktan kaçının. Hata kodlarının tam listesi: Limitler ve Hatalar.

İlgili