Skip to Content

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 /calls → 402Dakika bakiyesi 1’in altında. Paket yükle (Dakika Paketleri).
POST /calls → 404assistant_id veya phone_number_id bu hesaba ait değil / pasif. GET /assistants, GET /phone-numbers ile doğrula.
POST /calls → 409Aynı 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