API Dokümantasyonu
Planlanan genel REST API'nin taslak sözleşmesi
Aşağıdaki uç noktalar planlanan genel REST API'nin taslağıdır; bugün çağrı yapılabilecek bir api.synaptixai.services servisi bulunmuyor. Bot kurulumu ve kanal bağlantıları için kurulum rehberini kullanın.
Bir bölüm istisna: Giden webhook’lar yazıldı ve bugün çalışıyor. Aşağıdaki webhook bölümü taslak değil, bugünkü sözleşmedir. Giden webhook’lar bölümüne gidin
🚀 Başlangıç
Synaptix API, RESTful mimari kullanır ve JSON formatında veri döner. Tüm istekler HTTPS üzerinden yapılmalıdır.
Base URL
https://api.synaptixai.services/v2
Hızlı Başlangıç
curl -X GET "https://api.synaptixai.services/v2/chatbots" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
🔐 Kimlik Doğrulama
API istekleri için Bearer token kullanılır. API anahtarınızı dashboard'dan alabilirsiniz.
Authorization: Bearer sk_live_abc123xyz456
🤖 Chatbots
Tüm chatbot'larınızı listeler.
Response
{
"data": [
{
"id": "bot_abc123",
"name": "Customer Support Bot",
"status": "active",
"language": "tr",
"created_at": "2026-01-15T10:30:00Z"
}
],
"total": 1,
"page": 1
}
Yeni bir chatbot oluşturur.
Request Body
{
"name": "Sales Bot",
"language": "en",
"model_tier": "pro",
"training_data": [
{
"type": "url",
"content": "https://example.com/faq"
}
]
}
💬 Messages
Chatbot'a mesaj gönderir ve yanıt alır.
Request Body
{
"chatbot_id": "bot_abc123",
"message": "Merhaba, yardımcı olabilir misiniz?",
"user_id": "user_xyz789",
"language": "tr"
}
Response
{
"id": "msg_def456",
"chatbot_id": "bot_abc123",
"message": "Merhaba! Elbette yardımcı olabilirim. Size nasıl yardımcı olabilirim?",
"language": "tr",
"confidence": 0.95,
"timestamp": "2026-01-28T14:30:00Z"
}
🔔 Giden webhook’lar
Sayfanın geri kalanı taslaktır; buradaki sözleşme bugün çalışan koddur. Business ve Enterprise planlarında kullanılabilir ve panelden, botun webhook ayarından kurulur — kurulum için çağırabileceğiniz bir REST ucu yoktur.
Botunuz bir talep ya da randevu yakaladığında, sizin belirlediğiniz https adresine imzalı bir JSON POST gönderiyoruz. Bağlantı tek yönlüdür: çağrıyı biz yaparız, siz bize çağrı yapmazsınız.
Gönderilen olaylar
request.created— bot bir talep yakaladıktan ve kayıt yazıldıktan sonra gönderilir.appointment.created— bot bir randevu yakaladıktan ve kayıt yazıldıktan sonra gönderilir.webhook.test— panelden test gönderimini siz başlattığınızda gönderilir. Abone olunacak bir olay değildir; gövdesi gerçek bir request.created ile aynı biçimdedir ve is_test alanı taşır.
Başlıklar
POST https://example.com/synaptix
Content-Type: application/json
User-Agent: Synaptix-Webhooks/1.0
X-Synaptix-Event: request.created
X-Synaptix-Delivery: 6d0f1c2e-6a1f-4f4a-9a8d-2f7c5b1ea91b
X-Synaptix-Signature: sha256=<lowercase hex>
X-Synaptix-Delivery her deneme için yeniden üretilir ve gövdedeki delivery_id ile aynı değerdir. Tekilleştirme yapacaksanız bu değeri değil data.id alanını kullanın: aynı kayıt yeniden gönderilirse teslimat kimliği değişir, kayıt kimliği değişmez.
Webhook Payload
Zarf her olayda aynıdır; olaya göre değişen tek alan data’dır. Aşağıda bir request.created gövdesi var.
{
"event": "request.created",
"delivery_id": "6d0f1c2e-6a1f-4f4a-9a8d-2f7c5b1ea91b",
"created_at": "2026-09-09T12:04:11.482Z",
"bot_id": "1f0b6d5e-2a44-4c9f-8b21-9e6a2f3c7d10",
"data": {
"id": "9c1a7f22-4d63-4b0e-9d61-3a8f5c2b7e04",
"request_type": "lead_collection",
"status": "new",
"message": "Fiyat listesi alabilir miyim?",
"visitor_name": "Ada Yılmaz",
"visitor_email": "ada@example.com",
"visitor_phone": null,
"source_page_host": "example.com",
"created_at": "2026-09-09T12:04:11.101Z"
}
}
appointment.created olayında zarf aynı kalır, data alanı ise şu alanları taşır:
{
"id": "2b7d4f10-9c33-4a6e-8f52-71c0d9ab3e64",
"request_id": "9c1a7f22-4d63-4b0e-9d61-3a8f5c2b7e04",
"status": "pending",
"message": "Cuma 14:30 için randevu",
"visitor_name": "Ada Yılmaz",
"visitor_email": "ada@example.com",
"visitor_phone": "+90 555 000 00 00",
"appointment_date": "2026-09-11",
"appointment_time": "14:30",
"appointment_at": "2026-09-11T11:30:00Z",
"source_page_host": "example.com",
"created_at": "2026-09-09T12:04:11.101Z"
}
İmzayı doğrulama
İmza şudur: HMAC-SHA256(imza anahtarınız, gövdenin ham baytları), küçük harfli hex. Başlıkta “sha256=” önekiyle taşınır. Aşağıdaki iki örnek doğrudan kendi ucunuza yapıştırılabilir.
Ham gövde şarttır. Gövdeyi ayrıştırıp yeniden JSON’a çevirirseniz anahtar sırası ve boşluklar değişir; imza o an tutmaz. Doğrulamayı ayrıştırmadan önce, aldığınız baytların üzerinde yapın.
const crypto = require('crypto');
const express = require('express');
const app = express();
// express.raw: the signature covers the bytes we sent, so the handler
// must see the raw body and not a re-serialised object.
app.post('/synaptix', express.raw({ type: 'application/json' }), (req, res) => {
const expected = 'sha256=' + crypto
.createHmac('sha256', process.env.SYNAPTIX_WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
const received = req.get('X-Synaptix-Signature') || '';
const a = Buffer.from(expected, 'utf8');
const b = Buffer.from(received, 'utf8');
// timingSafeEqual throws when the lengths differ, so length is checked
// first - and it is checked in constant time for equal-length input.
if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
return res.status(401).send('invalid signature');
}
const payload = JSON.parse(req.body.toString('utf8'));
// payload.event, payload.delivery_id, payload.bot_id, payload.data
res.sendStatus(200);
});
import hashlib
import hmac
import os
from flask import Flask, request
app = Flask(__name__)
SECRET = os.environ["SYNAPTIX_WEBHOOK_SECRET"].encode("utf-8")
@app.post("/synaptix")
def synaptix():
raw = request.get_data() # bytes, exactly as received
expected = "sha256=" + hmac.new(SECRET, raw, hashlib.sha256).hexdigest()
received = request.headers.get("X-Synaptix-Signature", "")
# compare_digest is constant time and safe on unequal lengths.
if not hmac.compare_digest(expected, received):
return "invalid signature", 401
payload = request.get_json()
# payload["event"], payload["delivery_id"], payload["bot_id"], payload["data"]
return "", 200
Adres kuralları
Adres https olmalı ve genel internetten erişilebilen bir konağı göstermelidir. İsteği biz gönderdiğimiz için adres bizim ağ bağlamımızdan çözülür; bu yüzden localhost ve IPv6 karşılığı, 10.x, 172.16–31.x, 192.168.x, 169.254.x, IPv4’e eşlenmiş geri döngü adresleri, Synaptix’in kendi sunucuları ve içinde kullanıcı adı ya da parola taşıyan adresler kabul edilmez. Kendi ağınızın içindeki bir uca ulaşamayız.
Teslimat başarısız olursa
Uç noktanız 2xx dönmelidir. 3xx de başarısızlık sayılır: yönlendirmeyi takip etmiyoruz, çünkü https bir adresten özel bir adrese yapılan yönlendirme yukarıdaki konak kurallarını anlamsız kılardı. Her deneme sınırlı bir zaman aşımına tabidir; önce 2xx dönün, ağır işi sonra yapın. Başarılı da başarısız da her deneme kaydedilir ve panelde görünür; başarısız bir teslimat otomatik olarak tekrarlanmaz. Hiçbir durumda ziyaretçinin sohbeti bundan etkilenmez.
İmza anahtarı bir kez gösterilir
⚠️ Error Handling
API, standart HTTP status code'ları kullanır.
| Status Code | Açıklama |
|---|---|
200 |
Başarılı istek |
400 |
Hatalı istek (Bad Request) |
401 |
Yetkisiz erişim (Unauthorized) |
404 |
Kaynak bulunamadı (Not Found) |
429 |
Rate limit aşıldı |
500 |
Sunucu hatası |
Error Response
{
"error": {
"code": "invalid_request",
"message": "Chatbot ID is required",
"details": {
"field": "chatbot_id",
"issue": "missing"
}
}
}
⏱️ Rate Limits
API istekleri için rate limit uygulanır.
Rate Limit Headers
X-RateLimit-Limit: 60X-RateLimit-Remaining: 45X-RateLimit-Reset: 1706450400
Bugün kullanabileceğiniz yol
Yayımlanmış bir SDK paketimiz yok. Botunuzu sitenize bağlamak için kurulum sihirbazının verdiği gömme kodunu kullanın. WhatsApp, Instagram ve Messenger bağlantısı ise yakında açılacak; o zamana kadar panelden kurulamıyor.
Web widget
Kurulum sihirbazı size tek satırlık bir script etiketi verir; sayfanıza yapıştırmanız yeterlidir.
Kurulum rehberiMeta kanalları
WhatsApp, Instagram ve Messenger tek bir bağlantıyla kurulacak ve kod yazmanız gerekmeyecek. Bu bağlantı yakında kullanıma açılacak.
Entegrasyon rehberi