Bir entegrasyon istemcisi oluşturmak için OpenAPI sözleşmesini kullanın. Genel API, panel ve MCP yönetim uç noktası aynı çalışma alanı kaynakları ve izinleri üzerinde çalışır.
| Yetenek | Endpoint |
|---|---|
| Yeniden kullanılabilir araçlar | GET / POST /api/v1/voice/tools |
| Aracı oku / güncelle / sil | GET / PATCH / DELETE /api/v1/voice/tools/{id} |
| Aracı önizle veya test et | POST /api/v1/voice/tools/{id}/test |
| Araçları bir ajana bağla | PUT /api/v1/voice/agents/{id}/tools |
| Bilgi tabanları | GET / POST /api/v1/voice/knowledge-bases |
| Bilgi tabanını oku / güncelle / sil | GET / PATCH / DELETE /api/v1/voice/knowledge-bases/{id} |
| Belge ekle / listele | POST / GET /api/v1/voice/knowledge-bases/{id}/documents |
| Belgeyi oku / sil | GET / DELETE /api/v1/voice/knowledge-bases/{id}/documents/{doc_id} |
| Arama olayı abonelikleri | GET / POST /api/v1/voice/webhooks |
| Aboneliği oku / güncelle / sil | GET / PATCH / DELETE /api/v1/voice/webhooks/{id} |
| İmzalı bir test olayı gönder | POST /api/v1/voice/webhooks/{id}/test |
| Uzak MCP araçlarını keşfet | POST /api/v1/voice/mcp/discover |
| MCP yönetim uç noktası | /api/v1/voice/mcp |
CRM bağdaştırıcınızı sorgulayan bir HTTP aracı kaydedin:
{
"name": "lookup_customer",
"description": "Find a customer after confirming their customer ID.",
"kind": "http",
"url": "https://crm.example.com/customers/{{customer_id}}",
"method": "GET",
"read_only": true,
"credential_ref": "crm",
"input_schema": {
"type": "object",
"properties": { "customer_id": { "type": "string" } },
"required": ["customer_id"],
"additionalProperties": false
},
"response_path": "data"
}
POST /tools { "data": { "id": "TOOL_ID", ... } } döndürür. Tanımını PUT /agents/AGENT_ID/tools ve { "tool_ids": ["TOOL_ID"] } ile bir ajana bağlayın. Bu, araç listesinin tamamını anlık görüntülerle değiştirir; bir kütüphane aracı değiştiğinde yeniden bağlayın. Bir kütüphane tanımını silmek mevcut anlık görüntüleri korur. Satır içi tanımları ayrıca ajan API'sinin tools alanıyla okuyup değiştirebilirsiniz. Analizi ve widget'ı ajan API'si üzerinden yapılandırmak için analysis_config ve widget_config kullanın.
Bir araç GET, POST, PUT, PATCH veya DELETE kullanabilir. query ve request_body, { "customer": { "id": "{{customer_id}}" } } gibi iç içe JSON şablonlarını kabul eder. Tam bir yer tutucu özgün JSON türünü korur. URL yer tutucuları kodlanır ve yalnızca sabit bir genel HTTPS ana bilgisayarından sonra yer alabilir. request_body olmadan GET olmayan araçlar { "arguments": {...}, "call": { "callId": "...", "agentId": "...", "toolCallId": "...", "idempotencyKey": "..." } } alır. response_path noktalı gösterimle bir alan seçer. Basit parameters hâlâ kabul edilir; input_schema ek olarak iç içe nesneleri, dizileri, sabit listeleri ve sayısal sınırları destekler. Harici şema başvuruları ve düzenli ifadeler kabul edilmez.
static_args: model ne yazarsa yazsın her çağrıyla gönderilen değerler, örneğin bir mağaza kimliği; adres ve gövdedeki {{name}} yer tutucusunu da doldururlar.extract: [{name, path}], bir fonksiyonun yanıtındaki alanları (data.id) sonraki fonksiyonların {{name}} değeri için saklar; böylece bir aramanın customer_id değeri, model onu tekrarlamadan sonraki siparişe girebilir. Bir başlangıç sorgusunun alanları da aynı şekilde saklanır.reject_when: en fazla 5 kural {on: caller|agent, pattern, negate}; son sözcükler için hepsi geçerli olduğu sürece fonksiyon çalışmaz ve ajan reject_message alır.model_says: her çağrıda model, sabit speak_before yerine fonksiyon çalışırken söylenen bir cümle yazar.Entegrasyonlar → Webhook'lar ve bildirimler → Bağlı uygulamalar altında bir uygulama bağlayın, sonra ajanın Bilgi ve araçlar sekmesinde „Hazır fonksiyon ekle” seçeneğini kullanın; kendi uç noktanıza gerek yoktur:
check_availability (bir tarihteki boş saatler) ve book_appointment (arayanın seçtiği saati ayırır) ekler. Google Calendar saatleri sizin belirlediğiniz saat dilimini, açık günleri, saatleri ve randevu süresini izler; Cal.com etkinlik türünün kendi uygunluğunu ve arayan hiçbir adres vermediğinde kullanılmak üzere belirlediğiniz yedek e-postayı kullanır.save_to_sheet ekler; bu, sıraladığınız sütunlara ek olarak aramanın kimliği ve saatiyle bir satır ekler.notify_team ekler; ajanın yazdığı bir mesajı bir Slack kanalına (incoming webhook) gönderir.EvaSay kontrol düzlemi bu fonksiyonları sizin bağladığınız hesapla çalıştırır; ne worker ne de ajan tanımı uygulamanın kimlik bilgilerini tutar. Bir ajanı API ile okumak bunları kind: "app" olarak gösterir (app, action, connection_id, app_config ile); korumak için tools alanını değiştirirken bunları olduğu gibi geri gönderin. Uygulamalar yalnızca panelde bağlanır.
Bir ajanın araçlarından birinde run_at_start: true ayarlayın; her arama başlarken, ajan selam vermeden veya yanıtlamadan önce çağrılır. caller_number, called_number, direction, channel veya call_id adlı parametreler onun için doldurulur. Döndürdüğü alanlar first_message, system_prompt ve idle_messages içindeki {{variables}} yer tutucularını doldurur (bir düzey aşağıdaki alanlar {{customer.name}} olarak) ve yanıtın tamamı ajana arka plan olarak verilir. Değişkenli bir karşılama yanıt için en fazla 3 saniye bekler; bulunamayan her şey boş bırakılır. Ajan başına başlangıçta bir araç çalışabilir.
Kimlik bilgileri çalışma alanınız ve hedefiniz için sunucu ortamında yapılandırılır; bir credential_ref hazırlanması için support@evasay.com ile iletişime geçin. API anahtarlarını ajan tanımlarına, başlıklara, istemlere veya araç parametrelerine koymayın. Bağdaştırıcınız CRM kimlik bilgilerini kendi ortamında tutabilir.
İş sistemine istek göndermeden önce bir aracı önizleyin:
{
"arguments": { "customer_id": "customer-123" },
"dry_run": true,
"mock_result": { "name": "Alex", "order_status": "shipped" }
}
Önizleme parametreleri doğrular ve eşlenen isteği gösterir; bir konuşma yürütmez ve iş sistemiyle iletişim kurmaz. Gerçek yürütme için dry_run=false ayarlayın. Canlı bir yazma testi ayrıca confirmed=true ve idempotency_key gerektirir (8–128 harf, rakam, nokta, alt çizgi, iki nokta veya kısa çizgi). Test yanıtları ok, status, duration_ms ve sınırlı bir sonuç içerir. Kimlik bilgilerini döndürmezler. Okuma ve yazma testleri çalışma alanı yazma izni gerektirir.
Bir arama sırasında iş istekleri sabit bir Idempotency-Key taşır. İş uç noktanız buna uymalıdır. Bir arama içindeki özdeş yazmalar tekilleştirilir; zaman aşımından sonra sonucu bilinmeyen işlemler de dahil. Farklı, bilerek yapılan bir işlem operation_id gibi ayrı bir iş argümanı gerektirir. EvaSay yazmaları otomatik olarak yeniden oynatmaz. Araç yürütme olayları durum ve süre içerir; konuşma testi özelliği bir metin simülasyonu olarak kalır, araç yürütme testi değildir.
POST /mcp/discover, { "url": "https://crm.example.com/mcp", "credential_ref": "crm" } kabul eder ve sunucunun araçlarını ve şemalarını döndürür. Yalnızca seçilen aracı kaydedin:
{
"name": "lookup_customer",
"description": "Find a CRM customer by confirmed ID.",
"kind": "mcp",
"url": "https://crm.example.com/mcp",
"mcp_tool": "get_customer",
"credential_ref": "crm",
"read_only": true,
"input_schema": {
"type": "object",
"properties": { "customer_id": { "type": "string" } },
"required": ["customer_id"]
}
}
Ajanın kullanımına yalnızca kayıtlı araçlar açılır. Uzak bağlantılar, isteklere JSON veya SSE yanıtlarıyla Streamable HTTP'yi, genel HTTPS hedeflerini ve önceden yapılandırılmış kimlik bilgilerini destekler. Eski SSE uç noktaları, OAuth müzakeresi, sunucu tarafından başlatılan sampling/elicitation ve ikili ekler desteklenmez. Keşif, sunucunun tüm araçlarına otomatik erişim vermez. Uzak aracın şeması satır içi olmalı ve JSON Schema'nın desteklenen alt kümesini kullanmalıdır.