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 yazPurvisor 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 /calls402 “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 seninpk_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 temiziX-API-Keybaş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:
| Alan | Değer |
|---|---|
| URL | https://app.purvisor.ai/api/v1/contacts |
| Method | POST |
| Headers | X-API-Key: pk_live_... (veya API key bağlantısı) |
| Body type | Raw / 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(veyaname) vephone(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: trueile 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çinidalanı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"
}| Alan | Zorunlu | Not |
|---|---|---|
phone | Evet | En az 10 hane. Kontak yoksa otomatik oluşturulur. |
assistant_id | Evet | Bu hesaba ait ve aktif olmalı. Kimlik GET /api/v1/assistants ile çekilir. |
phone_number_id | Hayır | Verilmezse hesabındaki ilk aktif numara kullanılır. GET /api/v1/phone-numbers ile listelenir. |
first_name, last_name | Hayır | Kontak 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/assistantsveGET /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.
- 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. - 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 yazSenaryo 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:
| Olay | Durum | Ne zaman tetiklenir |
|---|---|---|
call.completed | ✅ Aktif | Çağrı analizi kaydedildikten sonra (özet, duygu, sonuç, süre). |
contact.created | ✅ Aktif | Yeni kontak oluşunca (POST /contacts, web formu, n8n lead). |
dnc.requested | ✅ Aktif | Aranan kişi “beni aramayın” dediğinde. |
lead.hot | ✅ Aktif | Kişi o aramada “sıcak” eşiğine geçtiğinde (her sıcak aramada tekrar değil). |
appointment.booked | ✅ Aktif | Randevu oluşturulduğunda (tarih, saat, randevu kodu ve linkiyle). |
campaign.finished | ✅ Aktif | Kampanya tamamlandığında — tam bir kez. |
call.failed | ✅ Aktif | Ulaşılamayan arama (cevapsız/meşgul/reddedildi). Müşteri gerçekten konuştuysa yayılmaz. |
appointment.cancelled | ✅ Aktif | Randevu iptal edildiğinde. |
appointment.rescheduled | ✅ Aktif | Randevu 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
| Belirti | Olası neden / çözüm |
|---|---|
Tüm çağrılar 401 invalid_api_key | X-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 → 402 | Dakika bakiyesi 1’in altında. Paket yükle (Dakika Paketleri). |
POST /calls → 404 | assistant_id veya phone_number_id bu hesaba ait değil / pasif. GET /assistants, GET /phone-numbers ile doğrula. |
POST /calls → 409 | Aynı 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ç tetiklenmiyor | Dokuz 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ı tutmuyor | Ham (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.