Kampanyalar API’si
Bir kampanya, yapay zeka botunun kişilerinizle konuşması için ihtiyaç duyduğu her şeyi bir araya getirir: talimatları, üzerinde çalıştığı kanallar, aktif saatleri ve takip davranışı. Kampanyalar API’si, kontrol paneli yerine kendi kodunuzdan kampanyaları listelemenize, oluşturmanıza, güncellemenize, çoğaltmanıza, etkinleştirmenize, arşivlemenize ve ince ayar yapmanıza olanak tanır.
Aşağıdaki tüm uç noktalar https://api.youraiconnector.com/v1 temel URL’sine göredir. Her isteğin kimliği doğrulanmalıdır; API anahtarınızı nasıl alacağınız ve ileteceğiniz hakkında bilgi için API Erişimi ve Kimlik Doğrulama bölümlerine bakın. API erişimi ücretli bir özelliktir; bu özellik olmadan istekler 403 ile reddedilir.
Dikkat: Bazı örnekler basit
?apiKey=YOUR_API_KEYsorgu biçimini, diğerleri iseX-API-Keybaşlığını kullanır. Her ikisi de her yerde çalışır; kurulumunuza hangisi uyuyorsa onu kullanın.
Kampanya türleri
Bir kampanya oluşturduğunuzda şu türlerden birini seçmelisiniz:
| Tür | Ne işe yarar |
|---|---|
Incoming from Unknown Contacts |
Bot, size ilk kez mesaj gönderen kişilere yanıt verir. |
Outgoing |
Bot, kampanyaya eklediğiniz kişilerle konuşma başlatır. |
Keywords |
Etkisiz - kullanmayın. Bir Keywords kampanyası etkisizdir: geriye dönük uyumluluk için kabul edilmeye devam eder ancak her kanaldaki gelen yönlendirmeler için görünmezdir ve tetikleyici anahtar kelimelerini hiçbir şey okumaz. Bunun yerine bir Yapay Zeka Temsilcisi üzerinde Anahtar Kelime türünde bir Giriş Noktası kullanın. |
Combined |
Gelen ve giden davranışların bir karışımı. |
Büyük/küçük harf duyarlılığı yoktur. type, status, booking_provider, first_response_mode, bot.anthropic_model ve bot.ai_speed her türlü büyük/küçük harf kullanımını kabul eder — "live", "Live" ve "LIVE" aynı şeydir — ve değer, kampanyayı okuduğunuzda geri dönen kanonik biçiminde saklanır. Tek istisna duraklatma çiftidir: "Paused" ve "paused" gerçekten farklı iki durumdur, bu nedenle "PAUSED" gibi belirsiz bir yazım, birini seçmenizi söyleyen bir 400 ile reddedilir.
İki duraklatma durumu
| Durum | Kim yazar | Ne anlama gelir |
|---|---|---|
Paused |
Platformun kendi güvenlik kontrolleri (düşük etkileşim, tekrarlanan gönderim hataları, limit aşımı) ve daha yeni Temsilciler ve Yayınlar yüzeyleri | Kampanya bekletilir. Planlanmış bir tarama, neden ortadan kalktığında güvenlik duraklatmasını otomatik olarak kaldırabilir. |
paused |
Panodaki Duraklat düğmesi, resumed ile birlikte Devam Et |
Bir kişi manuel olarak duraklattı. Planlanmış gönderimler iptal edilir ve devam ettirildiğinde yeniden oluşturulur. |
Her ikisi de kampanyayı durdurur: gelen yönlendirme yalnızca durum tam olarak Live olduğunda çalışır. API’den duraklatmak için Paused, devam ettirmek için Live kullanın — küçük harfli çift, pano düğmesi için mevcuttur ve onun için çalışır durumda tutulur.
Bunların hiçbiri, yapay zeka bir konuşma içinde yanıt vermeyi bıraktığında olan şey değildir. Bu, kişi bazlı bir anahtardır, kişi üzerinde is_bot_active — bir insan devraldığında, kişi vazgeçtiğinde veya yapay zeka sohbeti sonlandırdığında ayarlanır. Kampanyanın kendi durumu etkilenmez ve içindeki diğer tüm konuşmalar çalışmaya devam eder. Bkz. bir kişi için yapay zekayı duraklatma veya devam ettirme.
Kampanya oluşturmak, bir kanalı kimin yanıtlayacağına karar vermez. Yönlendirme, kampanyalar tarafından değil, bir Yapay Zeka Temsilcisi üzerindeki Giriş Noktaları tarafından yönetilir. Her kanalın, yeni ve bilinmeyen kişileri yanıtlayan Temsilciyi adlandıran bir kanal varsayılan Giriş Noktası vardır: bunu
PUT /entry-points/channel-defaultsile ayarlayın, hesap için kademenin canlı olup olmadığınıGET /entry-points/routing-statusile kontrol edin,DELETE /entry-points/channel-defaultsile temizleyin.POST /channels/campaignhala eski kanal bazlı kampanya yönlendirme haritasını yazar, ancak bu haritaya artık hiçbir hesapta gelen yönlendirme için başvurulmaz; yalnızca geri alma işlemleri için tutulur. Buna göre geliştirme yapmayın. Her iki yüzeyin yan yana görünümü için Bir kanalı kampanyaya yönlendirme bölümüne bakın.
Kampanyaları listele
GET /campaigns
Kampanyalarınızı en yeniden başlayarak döndürür. archived=true değerini iletmediğiniz sürece arşivlenmiş kampanyalar hariç tutulur.
Sorgu parametreleri
| Parametre | Gerekli | Açıklama |
|---|---|---|
limit |
Hayır | Döndürülecek maksimum kampanya sayısı. Varsayılan 50, maksimum 100. |
cursor |
Hayır | Sayfalandırma imleci. Bir sonraki sayfayı almak için önceki yanıttan next_cursor değerini iletin. |
archived |
Hayır | Arşivlenmiş kampanyaları dahil etmek için true olarak ayarlayın. |
cURL
curl "https://api.youraiconnector.com/v1/campaigns?limit=20&apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/campaigns?limit=20", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.campaigns, data.next_cursor);
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/campaigns",
params={"limit": 20},
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["campaigns"], data["next_cursor"])
Yanıt
{
"success": true,
"campaigns": [
{
"id": "NBCXrhqGPSFsd6MV7pRo",
"name": "Inbound WhatsApp Leads",
"type": "Incoming from Unknown Contacts",
"status": "Live",
"enabled": true,
"archived": false,
"created_at": 1700000000000,
"ai_mode": true,
"language": "en",
"enabled_channels": ["whatsapp", "instagram"]
}
],
"next_cursor": "NBCXrhqGPSFsd6MV7pRo"
}
next_cursor, null olduğunda son sayfaya ulaşmışsınız demektir.
Bir kampanya al
GET /campaigns/{campaignId}
Canlı bot yapılandırması (bot), takip ayarları, etkin kanallar ve tüm anahtar kelimeler dahil olmak üzere tam kampanya belgesini döndürür. Zaman damgaları epoch milisaniyesi olarak döner.
cURL
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { campaign } = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
)
campaign = res.json()["campaign"]
Yanıt
{
"success": true,
"campaign": {
"id": "NBCXrhqGPSFsd6MV7pRo",
"name": "Inbound WhatsApp Leads",
"type": "Incoming from Unknown Contacts",
"status": "Live",
"language": "en",
"ai_mode": true,
"enabled": true,
"archived": false,
"created_at": 1700000000000,
"enabled_channels": ["whatsapp", "instagram"],
"bot": {
"instructions": "Greet warmly and ask about their goals.",
"goal": "Book a discovery call.",
"ai_speed": "balanced",
"anthropic_model": "standard",
"max_messages": 20
}
}
}
Not: Farklı bir hesaba ait olan kampanya 404 Campaign not found ( 403 değil) döndürür, bu nedenle bir kimliğin başka bir hesapta mevcut olup olmadığını anlayamazsınız.
Bir kampanya oluştur
POST /campaigns
Yeni bir kampanya oluşturur. name ve type zorunludur; diğer her şey isteğe bağlıdır. Aynı istekte başka herhangi bir kampanya alanını dahil edebilirsiniz — örneğin language, ai_mode veya tam bir bot yapılandırma nesnesi — ve bu, yeni kampanya ile birlikte kaydedilecektir. Sahibi ve oluşturulma zamanı otomatik olarak ayarlanır.
İstek alanları
| Alan | Gerekli | Açıklama |
|---|---|---|
name |
Evet | Kampanya adı. |
type |
Evet | Yukarıdaki dört kampanya türünden biri. |
language |
Hayır | Botun yanıt verdiği dil (örneğin "en"). |
ai_mode |
Hayır | Yapay zeka modunun açık olup olmadığı (true/false). Bir yapay zeka temsilcisi tarafından yanıtlanan bir kampanyada, okumalar saklanan bir değer yerine temsilcinin Etkin geçiş düğmesini döndürür — aşağıda güncelleme ile ilgili nota bakın. |
bot |
Hayır | Bot yapılandırma nesnesi (bkz. Bot yapılandırma alanları). |
list_id |
Hayır | Eklenecek kişi listesinin kimliği (ID). |
event_id |
Hayır | Yapay zekanın rezerve edebileceği etkinlik türünün kimliği (ID). |
event_ids |
Hayır | Etkinlik türü kimliklerinden oluşan bir dizi olarak aynı anda birden fazla etkinlik türü — ilki varsayılandır. event_id veya event_ids değerlerinden birini gönderin, ikisini birden göndermeyin. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/campaigns?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Spring Promo",
"type": "Outgoing",
"language": "en",
"ai_mode": true,
"bot": {
"instructions": "Greet warmly and ask about their goals.",
"goal": "Book a discovery call."
}
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/campaigns", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Spring Promo",
type: "Outgoing",
language: "en",
ai_mode: true,
bot: {
instructions: "Greet warmly and ask about their goals.",
goal: "Book a discovery call.",
},
}),
});
const { campaign_id } = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/campaigns",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"name": "Spring Promo",
"type": "Outgoing",
"language": "en",
"ai_mode": True,
"bot": {
"instructions": "Greet warmly and ask about their goals.",
"goal": "Book a discovery call.",
},
},
)
campaign_id = res.json()["campaign_id"]
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
Bir kampanyayı güncelle
PUT /campaigns/{campaignId}
Bir kampanyayı kısmen günceller — yalnızca değiştirmek istediğiniz alanları gönderin. Bu tek genel güncelleme fiilidir; PATCH /campaigns/{campaignId} yoktur (iki PATCH rotası, dar etkinleştir ve arşivle geçişleridir).
Hangi alanları değiştirebilirsiniz. Kampanya düzenleyicinin yazdığı her şey; name, status, type, language, ai_mode, enabled_channels, tetikleyici ve damla ayarları, rezervasyon ve takip bayrakları, Instagram/Facebook izleme alanları ve tüm bot yapılandırması dahil. Kimlik ve sahiplik, kampanyanın ömrü boyunca kilitlidir: user, id ve created_at reddedilir, uç noktanın tanımadığı herhangi bir alan adı da aynı şekilde reddedilir. Reddetme alan bazında değil, istek bazında yapılır — bir bilinmeyen anahtar 400 döndürür ve o istekteki hiçbir şey yazılmaz.
Temsilci destekli bir kampanyadaki ai_mode, Temsilciyi yansıtır. Bir kampanya bir AI Temsilcisi tarafından yanıtlandığında, kampanyayı okumak, o Temsilcinin Etkin anahtarından türetilen ai_mode değerini döndürür; bu, AI’nın yanıt verip vermeyeceğine karar veren tek anahtardır. Böyle bir kampanyada ai_mode yazılması kabul edilir ancak okuduğunuz değeri değiştirmez; bunun yerine Temsilcinin Etkin anahtarını açın veya kapatın (panodan veya Temsilciler API’si aracılığıyla). Temsilcisi olmayan klasik kampanyalarda, ai_mode daha önce olduğu gibi saklanan değeri okur ve yazar.
Bot alanları birleştirilir, üzerine yazılmaz. Bot ayarlarını noktalı anahtarlar ("bot.instructions": "...") veya iç içe geçmiş bir nesne ("bot": { "instructions": "..." }) olarak gönderin — her ikisi de yaprak yaprak yazar, bu nedenle dışarıda bıraktığınız alanlar mevcut değerlerini korur. bot.instructions, bot.goal, bot.rules ve bot.personality bu şekilde düzenlenebilir, Bot yapılandırma alanları altında listelenen diğer tüm bot ayarları da öyledir. Aynı durum test_bot, frequency ve follow_up_config için de geçerlidir.
Bir bot yapılandırmasını tamamen değiştirmek için — göndermediğiniz herhangi bir alanı silerek — tam nesne ile bot_replace (veya test_bot_replace) kullanın. Aynı nesne için bir değiştirme ve birleştirmeyi tek bir istekte birleştiremezsiniz; bu bir 400 döndürür.
Not: API aracılığıyla bot.* yazmak, canlı kampanya üzerinde anında etkili olur. Pano düzenleyici farklı çalışır: oradaki düzenlemeler taslak olarak kaydedilir ve yalnızca müşteri Yayınla’ya tıkladığında canlıya geçer. Dolayısıyla, bir müşterinin yayınlanmamış pano değişiklikleri varsa, bunlar test_bot içinde durur ve bot’nin bir API okuması, yapay zekanın şu anda ne kullandığını doğru bir şekilde gösterir.
Birkaç alan doğrudan yazılmak yerine özel bir anahtar aracılığıyla ayarlanır: kişi listesi için list_id, etkinlik türü için event_id (veya yapay zekanın birkaç tane rezerve etmesine izin vermek için sıralı bir etkinlik türü kimlikleri dizisi olan event_ids — ilki varsayılandır; boş bir dizi hepsinin bağlantısını keser) ve kampanyanın kişileri için contact_ids (kişi kimliklerinden oluşan bir dizi) kullanın. Bilgi tabanı girişleri bu uç nokta ile değil, SSS API aracılığıyla yönetilir.
Etiketler birleştirilmez, değiştirilir. tags öğesini tam dizi olarak gönderdiğinizde, bu kampanya etiket kümesi haline gelir — alanlar ve tek bir etiketi ekleyen veya düzenleyen uç noktalar için Kampanya etiketleri bölümüne bakın.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Spring Promo v2", "enabled_channels": ["whatsapp"] }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Spring Promo v2",
enabled_channels: ["whatsapp"],
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"name": "Spring Promo v2", "enabled_channels": ["whatsapp"]},
)
data = res.json()
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
Bir kampanyayı sil
DELETE /campaigns/{campaignId}
Bir kampanyayı kalıcı olarak siler. Bu işlem geri alınamaz; kampanyaya tekrar ihtiyaç duyabileceğinizi düşünüyorsanız, bunun yerine arşivleyin.
cURL
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{ method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.delete(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
Yanıt
{
"success": true
}
Bir kampanyayı çoğaltma
POST /campaigns/{campaignId}/duplicate
Kampanyanın tüm ayarlarını koruyarak bir kopyasını oluşturur. Kopya devre dışı olarak başlar ve adına bir (copy) soneki eklenir; böylece siz açıkça etkinleştirene kadar asla ileti göndermez.
cURL
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/duplicate?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/duplicate",
{ method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { campaign_id } = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/duplicate",
headers={"X-API-Key": "YOUR_API_KEY"},
)
new_campaign_id = res.json()["campaign_id"]
Yanıt
{
"success": true,
"campaign_id": "aZ9plnewCopyId01234"
}
Aynı hesap içindeki yinelenen kopyalar.
Bir kampanyayı etkinleştirme veya devre dışı bırakma
PATCH /campaigns/{campaignId}/enabled
Bir kampanyayı açar veya kapatır. Devre dışı bırakılan bir kampanya kişilerle etkileşimi durdurur ancak tüm yapılandırmasını korur.
İstek alanları
| Alan | Zorunlu | Açıklama |
|---|---|---|
enabled |
Evet | Etkinleştirmek için true, devre dışı bırakmak için false. Boole değeri olmalıdır. |
cURL
curl -X PATCH "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/enabled?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "enabled": true }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/enabled",
{
method: "PATCH",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ enabled: true }),
}
);
const data = await res.json();
Python
import requests
res = requests.patch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/enabled",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"enabled": True},
)
data = res.json()
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"enabled": true
}
Bir kampanyayı arşivleyin veya geri yükleyin
PATCH /campaigns/{campaignId}/archived
Bir kampanyayı arşivler veya geri yükler. Arşivlenen kampanyalar varsayılan kampanya listesinde gizlenir ancak tüm verilerini korurlar ve istendiği zaman geri yüklenebilirler.
İstek alanları
| Alan | Zorunlu | Açıklama |
|---|---|---|
archived |
Evet | Arşivlemek için true, geri yüklemek için false. Boole değeri olmalıdır. |
cURL
curl -X PATCH "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/archived?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "archived": true }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/archived",
{
method: "PATCH",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ archived: true }),
}
);
const data = await res.json();
Python
import requests
res = requests.patch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/archived",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"archived": True},
)
data = res.json()
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"archived": true
}
Bot yapılandırmasını güncelle
PUT /campaigns/{campaignId}/bot-config
Bu, bireysel bot ayarlarını değiştirmenin güvenli yoludur. Gönderdiğiniz her alan mevcut bot yapılandırmasıyla birleştirilir, bu nedenle dışarıda bıraktığınız tüm alanlar korunur. Botun yalnızca bir kısmında değişiklik yapmak istediğinizde bunu campaign-update uç noktası yerine kullanın.
Alan anahtarları yalnızca harf, rakam, alt çizgi ve kısa çizgi içermelidir.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/bot-config?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instructions": "Always answer in a friendly, concise tone.",
"ai_speed": "balanced"
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/bot-config",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
instructions: "Always answer in a friendly, concise tone.",
ai_speed: "balanced",
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/bot-config",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"instructions": "Always answer in a friendly, concise tone.",
"ai_speed": "balanced",
},
)
data = res.json()
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
Bot yapılandırma alanları
Tüm bot alanları isteğe bağlıdır. Yalnızca ayarlamak istediklerinizi gönderin. Burada listelenenlerin dışındaki tüm ek bot alanları kabul edilir ve olduğu gibi saklanır.
| Alan | Tür | Açıklama |
|---|---|---|
instructions |
string | Botun kişilerle nasıl konuşacağını yönlendiren temel talimatlar. |
rules |
string | Botun her zaman uyması gereken katı kurallar. |
goal |
string | Botun her konuşmada ulaşması gereken sonuç. |
personality |
string | Bot için ses tonu ve kişilik açıklaması. |
ai_speed |
string | Yapay zekanın yanıt vermeden önce ne kadar muhakeme yapacağı. fast, fast_thinker, balanced, thorough değerlerinden biri. |
anthropic_model |
string | Bu kampanyanın yanıtları için kullanılan yapay zeka kalite düzeyi. standard, economy (kullanımdan kaldırıldı), max, mini değerlerinden biri. max ve mini yalnızca bu düzeyler için uygun olan hesaplarda etkili olur. |
max_messages |
integer | Konuşma başına maksimum bot mesajı sayısı. |
alert_human_when |
string | Botun bir insan ekip üyesini uyarması gereken koşullar. |
availability |
object | Botun aktif saat programı. Bunu buradan ayarlayabilir veya özel aktif saatler uç noktası kullanabilirsiniz. |
follow_up_config |
object | Sağlandığı gibi saklanan takip davranışı yapılandırması. |
Bot aktif saatlerini ayarla
PUT /campaigns/{campaignId}/active-hours
Botun uygunluk programını ayarlar. Yapılandırılmış zaman aralıklarının dışında bot otomatik olarak yanıt vermez. Bu, bot yapılandırmasının availability alanına yazılır.
İstek alanları
| Alan | Gerekli | Açıklama |
|---|---|---|
availability |
Evet | Haftanın günlerine göre anahtarlanmış bir nesne. İzin verilen anahtarlar monday ile sunday arasındadır; başka herhangi bir anahtar 400 döndürür. Dışarıda bıraktığınız günler değişmeden kalır. |
Her hafta içi günü ya tek bir zaman aralığı ya da bir aralık dizisi tutar. Bir aralık, 24 saatlik HH:MM biçiminde bir start_time ve end_time içerir.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/active-hours?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"availability": {
"monday": { "start_time": "09:00", "end_time": "17:00" },
"tuesday": [
{ "start_time": "09:00", "end_time": "12:00" },
{ "start_time": "13:00", "end_time": "17:00" }
]
}
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/active-hours",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
availability: {
monday: { start_time: "09:00", end_time: "17:00" },
tuesday: [
{ start_time: "09:00", end_time: "12:00" },
{ start_time: "13:00", end_time: "17:00" },
],
},
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/active-hours",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"availability": {
"monday": {"start_time": "09:00", "end_time": "17:00"},
"tuesday": [
{"start_time": "09:00", "end_time": "12:00"},
{"start_time": "13:00", "end_time": "17:00"},
],
}
},
)
data = res.json()
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
Bir kampanyanın özel işlevlerini listele
GET /campaigns/{campaignId}/custom-functions
Bu kampanyaya bağlı olan ve tam tanımlara çözümlenmiş özel işlevleri döndürür. Özel işlevler, botun bir konuşma sırasında çağırabileceği harici HTTP eylemleridir; örneğin, mağazanızdaki stok durumunu kontrol etmek veya CRM’inizde bir kayıt oluşturmak gibi.
cURL
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { custom_functions } = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions",
headers={"X-API-Key": "YOUR_API_KEY"},
)
custom_functions = res.json()["custom_functions"]
Yanıt
{
"success": true,
"custom_functions": [
{
"id": "fn_abc123",
"name": "check_stock",
"description": "Looks up whether a product is in stock.",
"url": "https://example.com/api/stock",
"method": "POST",
"input": [
{ "name": "sku", "type": "string" }
],
"ai_action": "Tell the customer whether the item is available.",
"created_at": 1700000000000,
"updated_at": 1700000500000
}
]
}
Bir özel işlevi bir kampanyaya bağlayın
POST /campaigns/{campaignId}/custom-functions
Botun bir görüşme sırasında çağırabilmesi için mevcut bir özel işlevi bu kampanyaya bağlar. Zaten bağlı olan bir işlevi bağlamak hiçbir işlem yapmaz.
| Alan | Gerekli | Açıklama |
|---|---|---|
custom_function_id |
Evet | Bağlanacak özel işlevin kimliği (ID). |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "custom_function_id": "fn_abc123" }'
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"custom_function_id": "fn_abc123"
}
Bir özel işlevin bir kampanyayla bağlantısını kesin
DELETE /campaigns/{campaignId}/custom-functions/{customFunctionId}
Bağlı olmayan bir işlevin bağlantısını kesmek hiçbir işlem yapmaz.
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions/fn_abc123?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"custom_function_id": "fn_abc123"
}
Bir bilgi tabanı kaynağını bir kampanyaya bağlayın
POST /campaigns/{campaignId}/kb-sources
Botun yanıt verirken yararlanabilmesi için bir bilgi tabanı kaynağını (SSS API aracılığıyla oluşturulmuş) bu kampanyaya bağlar. Zaten bağlı olan bir kaynağı bağlamak hiçbir işlem yapmaz.
| Alan | Gerekli | Açıklama |
|---|---|---|
kb_source_id |
Evet | Bağlanacak bilgi tabanı kaynağının kimliği (ID). |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/kb-sources?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "kb_source_id": "kb_abc123" }'
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"kb_source_id": "kb_abc123"
}
Bir bilgi tabanı kaynağının bir kampanyayla bağlantısını kesin
DELETE /campaigns/{campaignId}/kb-sources/{kbSourceId}
Bağlı olmayan bir kaynağın bağlantısını kesmek hiçbir işlem yapmaz.
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/kb-sources/kb_abc123?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"kb_source_id": "kb_abc123"
}
Bir MCP sunucusunu bir kampanyaya bağlayın
POST /campaigns/{campaignId}/mcp-servers
Bir MCP sunucusunu bu kampanyaya bağlayarak, botun bir görüşme sırasında o sunucunun araçlarına erişmesini sağlar. Hâlihazırda bağlı olan bir sunucuyu bağlamak hiçbir işlem yapmaz.
| Alan | Gerekli | Açıklama |
|---|---|---|
mcp_server_id |
Evet | Bağlanacak MCP sunucusunun kimliği (ID). |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/mcp-servers?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "mcp_server_id": "mcp_abc123" }'
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"mcp_server_id": "mcp_abc123"
}
Bir MCP sunucusunun kampanyayla bağlantısını kesme
DELETE /campaigns/{campaignId}/mcp-servers/{mcpServerId}
Bağlı olmayan bir sunucunun bağlantısını kesmek hiçbir işlem yapmaz.
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/mcp-servers/mcp_abc123?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"mcp_server_id": "mcp_abc123"
}
Kampanya medya kütüphanesi
Medya kütüphanesi, botun bir görüşme sırasında gönderebileceği görselleri, videoları, belgeleri ve sesli notları barındırır.
Bir kampanyanın medya kütüphanesini listeleme
GET /campaigns/{campaignId}/media-library
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/media-library?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"media_items": [
{
"id": "media_abc123",
"item_id": "media_abc123",
"title": "Pricing sheet",
"description": "Send when the contact asks about pricing.",
"media_url": "https://example.com/pricing.pdf",
"media_content_type": "application/pdf",
"type": "document",
"agent_id": "",
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"media_home": "campaign"
}
]
}
media_url, yükleme sırasında oluşturulan imzalı bir URL’dir; siz onu tekrar okuduğunuzda süresi dolmuş olabilir; kontrol paneli istendiğinde onu yeniden imzalar.
Bir medya öğesi yükleme
POST /campaigns/{campaignId}/media-library
| Alan | Gerekli | Açıklama |
|---|---|---|
base64Data |
Evet | Dosya, base64 kodlu (data-URL öneki olmadan). |
mimeType |
Evet | Dosyanın MIME türü (örneğin image/png). |
title |
Evet | Kütüphanede ve yapay zeka isteminde gösterilen kısa etiket. |
description |
Evet | Bota bu öğeyi ne zaman göndereceğini söyleyen talimat. |
fileName |
Hayır | Depolama nesnesi adını oluşturmak için kullanılan orijinal dosya adı. |
sendMessage |
Hayır | Botun bu öğeyi gönderirken kullanması gereken tercih edilen ifade. |
maxSendsPerConversation |
Hayır | Botun bir görüşmede bu öğeyi bir kişiye gönderebileceği maksimum sayı. Varsayılan değer 1’dir. |
sendAsVoiceNote |
Hayır | Ses yüklemesi için, onu bir WhatsApp sesli notuna dönüştürün. Varsayılan değer false’dur (düz bir ses dosyası olarak saklanır). |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/media-library?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"base64Data": "iVBORw0KGgoAAAANSUhEUgAA...",
"mimeType": "image/png",
"title": "Product photo",
"description": "Send when the contact asks what the product looks like."
}'
Yanıt
{
"success": true,
"itemId": "media_abc123",
"mediaUrl": "https://example.com/product.png",
"storagePath": "ai_media/campaigns/NBCXrhqGPSFsd6MV7pRo/media_abc123.png",
"mediaContentType": "image/png",
"type": "image",
"isVoiceNote": false
}
Bir medya öğesini güncelle
PATCH /campaigns/{campaignId}/media-library/{itemId}
Yalnızca öğenin meta verilerini düzenler — dosyanın kendisini değiştirmek için öğeyi silip yenisini yükleyin.
| Alan | Açıklama |
|---|---|
title |
Kısa etiket. |
description |
Ne zaman gönderileceğine dair talimat. |
send_message |
Botun kullanması için tercih edilen ifade. |
max_sends_per_conversation |
Negatif olmayan tam sayı veya sınırı kaldırmak için null. |
curl -X PATCH "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/media-library/media_abc123?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Updated pricing sheet" }'
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"item_id": "media_abc123"
}
Bir medya öğesini sil
DELETE /campaigns/{campaignId}/media-library/{itemId}
Zaten silinmiş bir öğeyi silmek hiçbir işlem yapmaz.
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/media-library/media_abc123?apiKey=YOUR_API_KEY"
Yanıt
{ "success": true, "deleted": true }
Kampanya etiketleri
Kampanya etiketi, botun bir görüşme sırasında kişiye uygulamasını öğrettiğiniz bir etikettir — hot-lead, not-interested, booked-a-call. Her etiketin üç parçası vardır:
| Alan | Tür | Açıklama |
|---|---|---|
name |
string, gerekli | Etiketin kendisi. Botun kişiye uyguladığı ve daha sonra eşleştirme yapacağınız değer budur, bu yüzden kısa ve sabit tutun. |
description |
string | Bota bu etiketi ne zaman uygulayacağını söyleyen talimat. İşi yapan kısım budur — “kişi topluluğa katıldığını onaylar” ifadesi kullanılır, “sıcak müşteri adayı” ifadesi kullanılmaz. |
webhook |
string | Etiket bir kişiye uygulandığı anda POST alan bir URL. İhtiyacınız yoksa boş bırakın. |
tag_id |
string | İsteğe bağlı. Bu girişi, yeni bir etiket yerine hesabınızdaki mevcut bir etikete bağlar. Bu belirli etikete daha sonra aşağıdaki tek etiket uç noktalarıyla erişmek istiyorsanız bunu sağlayın. |
Etiket adları bir kampanya içinde benzersiz olmalıdır. Bot etiketleri ada göre uygular, bu nedenle aynı adı paylaşan iki girişin kazananı tanımlı değildir.
Bir kampanyanın tüm etiketlerini ayarlama
PUT /campaigns/{campaignId}, tags dizisi ile.
Bu işlem, kampanyanın etiketlerini tam olarak gönderdiğiniz verilerle değiştirir; bu, kontrol panelindeki Etiketler sekmesini kaydettiğinizde yapılan işlemin aynısıdır. Her seferinde tam diziyi gönderin — dışarıda bıraktığınız bir etiket, sildiğiniz bir etiket demektir. [] göndermek hepsini temizler.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tags": [
{
"name": "hot-lead",
"description": "The person confirms they want to buy, or asks how to get started right away.",
"webhook": "https://example.com/hooks/campaign-events"
},
{
"name": "not-interested",
"description": "The person declines the offer or says they are not a fit."
}
]
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
tags: [
{
name: "hot-lead",
description:
"The person confirms they want to buy, or asks how to get started right away.",
webhook: "https://example.com/hooks/campaign-events",
},
{
name: "not-interested",
description: "The person declines the offer or says they are not a fit.",
},
],
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"tags": [
{
"name": "hot-lead",
"description": "The person confirms they want to buy, or asks how to get started right away.",
"webhook": "https://example.com/hooks/campaign-events",
},
{
"name": "not-interested",
"description": "The person declines the offer or says they are not a fit.",
},
]
},
)
data = res.json()
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
Etiketleri GET /campaigns/{campaignId} ile geri okuyun.
Bir etiket ekleme
POST /campaigns/{campaignId}/tags
Geri kalanını yeniden göndermeden tek bir etiket ekler. Bunu, bu istekte oluşturmadığınız bir kümeye ekleme yaparken kullanın.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/tags?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "tag": { "name": "booked-a-call", "description": "The person confirms a booked time." } }'
Tam olarak aynı etiketi iki kez göndermek, ikinci seferde hiçbir şey yapmaz. Aynı tag_id değerini farklı bir ad veya açıklama ile göndermek, ilkini düzenlemek yerine ikinci bir giriş ekler — yerinde düzenleme yapmak için aşağıdaki uç noktayı kullanın.
Bir etiketi güncelleme veya kaldırma
PUT /campaigns/{campaignId}/tags/{tagId}
DELETE /campaigns/{campaignId}/tags/{tagId}
Bunlar, bir girdiyi tag_id değeriyle adresler, bu nedenle yalnızca bununla oluşturulmuş etiketlerde çalışırlar. Bir etiketin tag_id değeri yoksa, yukarıdaki tüm dizi PUT /campaigns/{campaignId} ile değiştirin.
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/tags/tag_abc123?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "tag": { "name": "hot-lead", "description": "Updated instruction." } }'
Kampanyada olmayan bir tagId, "Tag not found in campaign tags" ile 404 döndürür.
Bir kampanyanın kanallarını değiştirme
POST /campaigns/{campaignId}/channels
Kampanyanın enabled_channels dizisindeki kanalları, dizinin tamamını yeniden göndermeden ekler veya kaldırır — başka bir işlem aynı anda kampanyayı düzenliyor olabileceğinde PUT /campaigns/{campaignId} kullanmaktan daha güvenlidir.
Tek bir geçiş veya toplu işlem gönderin — aynı istekte her ikisini birden göndermeyin:
{ "channel": "whatsapp", "action": "add" }
{ "add": ["whatsapp", "instagram"], "remove": ["sms"] }
| Alan | Açıklama |
|---|---|
channel |
Değiştirilecek bir kanal. action ile eşleştirin. |
action |
"add" veya "remove". channel ile eşleştirin. |
add |
Eklenecek kanallar dizisi. Toplu form — channel/action yerine kullanın. |
remove |
Kaldırılacak kanallar dizisi. Toplu form. |
Geçerli kanallar: whatsapp, whatsapp_web, sms, instagram, messenger, facebook, chat_widget, custom_channel, imessage, telegram, instagram_private, line, viber, tiktok, email, linkedin, skool.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/channels?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "channel": "whatsapp", "action": "add" }'
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"added": ["whatsapp"],
"removed": []
}
Bu yalnızca kampanyanın hangi kanallarda reklam yapacağını değiştirir — bir kanalı kimin yanıtlayacağına karar vermez. Bunun için yukarıdaki Kampanya türleri bölümüne ve aşağıdaki Bir kampanyayı gelen kanallara yönlendirme bölümüne bakın.
Yorumdan DM’e (Instagram ve Facebook)
Yorumdan DM’e özelliği, gönderilerinizden birine yapılan bir yorumu özel bir sohbete dönüştürür: birisi yorum yapar, bot onlara bir DM gönderir ve kampanya sohbeti oradan devralır. Tamamen kampanya nesnesi üzerinden yapılandırıldığından, bunun kullanıcı arayüzüne özgü bir yanı yoktur.
Önce Facebook Sayfasını bağlayın — bkz. Kanal Bağlantısı. Ardından aşağıdaki alanları PUT /campaigns/{campaignId} ile ayarlayın.
Kampanya
Liveolmalıdır. Yorum izleme yalnızcastatusdeğeriLiveolan kampanyaları alır (büyük/küçük harf duyarlı değildir — bkz. Kampanya türleri). Başka herhangi bir durum onu sessizce devre dışı bırakır ve"Active"gibi uydurma bir durum artık saklanmak yerine bir400ile reddedilir. Geçerli durumlar arasındaDraft,Pending Approval,Scheduled,Live,Paused,Completed,SentveFailedbulunur.
Alanlar
| Alan | Tür | Açıklama |
|---|---|---|
monitor_instagram_posts |
boolean | Bağlı sayfadaki her Instagram gönderisini izle. |
instagram_post_ids |
string[] | Yalnızca bu Instagram gönderilerini izle. monitor_instagram_posts açıkken boş bırakın. |
instagram_comment_delay_minutes |
number | DM göndermeden önce yorumdan sonra beklenecek dakika sayısı. |
monitor_facebook_posts |
boolean | Bağlı sayfadaki her Facebook gönderisini izle. |
facebook_post_ids |
string[] | Yalnızca bu Facebook gönderilerini izle. |
facebook_comment_delay_minutes |
number | DM öncesi gecikme (dakika cinsinden). |
public_comment_reply_instructions |
string | Yorumun kendisine bırakılan görünür yanıt için rehberlik. Varsayılan “DM’lerinizi kontrol edin” ifadesini geçersiz kılar. |
first_response_mode |
string | "ai" (varsayılan) ilk DM’yi ve herkese açık yanıtı oluşturur. "exact_text", AI üretimi ve kredi ücreti olmadan, ifadenizi olduğu gibi gönderir. |
first_response_exact_text |
string | first_response_mode, "exact_text" olduğunda kullanılan, olduğu gibi gönderilecek ilk DM. Bu modun etkili olması için gereklidir. |
first_response_exact_text_variants |
string[] | İlk DM için ek ifadeler. Gönderim başına rastgele bir tane seçilir, böylece tekrarlanan DM’ler bayt olarak aynı olmaz. |
public_comment_reply_exact_text |
string | "exact_text" modundaki herkese açık yanıtın aynısı. Herkese açık yanıtı atlamak ve yalnızca DM göndermek için boş bırakın. |
public_comment_reply_exact_text_variants |
string[] | Herkese açık yanıt için ek ifadeler. |
monitor_instagram_followers |
boolean | Yeni bir takipçiyi tetikleyici olarak kabul et ve bir açılış DM’si gönder (Instagram kişisel hesapları). |
follower_outreach_instructions |
string | Yeni takipçi açılış DM’si için rehberlik. |
respond_to_instagram_story_replies |
boolean | AI’nın Instagram Hikayelerinize gelen yanıtlara cevap verip vermeyeceği. Varsayılan true. Hikaye yanıtlarının AI yanıtı olmadan (Hikaye ekli şekilde) sohbete düşmesi için false ayarını yapın. Canlı ayar — taslağın bir parçası değildir, bu nedenle yayınlanması gerekmez. |
Bir alanı temizleme
Bu alanlar, null gönderdiğinizde null olarak ayarlanmak yerine kaldırılır, böylece bot varsayılanlarına geri döner: instagram_post_ids, facebook_post_ids, instagram_comment_delay_minutes, facebook_comment_delay_minutes, public_comment_reply_instructions, follower_outreach_instructions, first_response_exact_text, first_response_exact_text_variants, public_comment_reply_exact_text, public_comment_reply_exact_text_variants.
Bilinmeyen bir anahtar tüm isteği reddeder.
PUT /campaigns/{campaignId}, tüm gövdeyi bir izin listesine göre doğrular. Tanınmayan bir anahtar, isteğin tamamı için400döndürür; sessizce göz ardı edilmez ve o gövdedeki diğer alanların hiçbiri yazılmaz.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "Live",
"monitor_instagram_posts": true,
"instagram_comment_delay_minutes": 2,
"first_response_mode": "exact_text",
"first_response_exact_text": "Hey! Sending the details over now.",
"first_response_exact_text_variants": [
"Hi there, here are the details you asked for.",
"Thanks for commenting, here is what you need."
],
"public_comment_reply_exact_text": "Just sent you a DM."
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
status: "Live",
monitor_instagram_posts: true,
instagram_comment_delay_minutes: 2,
first_response_mode: "ai",
public_comment_reply_instructions:
"Tell them to check their message requests folder too.",
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"status": "Live",
"monitor_facebook_posts": True,
"facebook_post_ids": None,
"facebook_comment_delay_minutes": 5,
},
)
data = res.json()
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
Yorumda bırakılan görünür yanıt, planınızda yorum yanıtlama özelliğinin olmasını gerektirir. Bu özellik olmadan DM yine de gönderilir ancak herkese açık yanıt atlanır.
Bir kampanyayı yapay zeka ile optimize etme
POST /campaigns/{campaignId}/optimize
Kontrol panelindeki Optimize et ve beğenmeme geri bildirim akışlarıyla aynı yapay zeka yeniden yazma işlemini çalıştırır: geri bildiriminizi alır, botun talimatlarını yeniden yazar ve sonucu incelemeniz için yeni bir taslak revizyon olarak hazırlar.
| Alan | Gerekli | Açıklama |
|---|---|---|
user_feedback |
Bu ikisinden biri gerekli | Nelerin iyileştirileceğini açıklayan serbest biçimli geri bildirim. |
thumbs_down_feedback |
Bu ikisinden biri gerekli | Belirli bir bot yanıtına verilen beğenmeme geri bildiriminden alınan geri bildirim. |
thumbs_down_message |
Hayır | Beğenmeme geri bildiriminin atıfta bulunduğu bot mesajı. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/optimize?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "user_feedback": "Make the tone more casual and mention the free trial earlier." }'
Yanıt (202 — yeniden yazma işlemi arka planda çalışır)
{ "success": true, "campaign_id": "NBCXrhqGPSFsd6MV7pRo" }
GET /campaigns/{campaignId} anketini yapın ve test_bot.status’i izleyin: hemen "Optimizing" durumuna geçer, ardından yeniden yazma işlemi test_bot’e ulaştığında tekrar "Draft" durumuna döner. Buradan itibaren herhangi bir kontrol paneli taslağı gibi davranır; inceleyin ve ardından canlıya almak için kontrol panelinde yayınlayın. 409, bu kampanya için halihazırda bir optimizasyonun çalıştığı anlamına gelir.
Optimizasyon, hesabınızdaki diğer tüm yapay zeka işlemlerinde olduğu gibi kredi harcar.
Bir kişiyi kampanyaya atama
POST /campaigns/{campaignId}/contacts/{contactId}/assign
Mevcut bir kişiyi bir kampanyaya dahil eder ve talep etmeniz durumunda kampanyanın açılış mesajını hemen gönderir. Bir kampanyanın onaylı WhatsApp şablonunu bir kişiye göndermenin yolu budur: Bir kampanyanın onaylandığı şablon o kampanyaya aittir, bu nedenle Templates API kütüphanesinde görünmez ve /whatsapp-templates/send aracılığıyla gönderilemez.
| Alan | Zorunlu | Açıklama |
|---|---|---|
sendOpeningMessage |
Hayır | true, kişi atandığı anda kampanyanın açılış mesajını (WhatsApp kampanyasındaki onaylı WhatsApp şablonu) gönderir. Varsayılan değer false’dir. |
triggerAIResponse |
Hayır | true, yapay zekanın kendi ilk mesajını yazmasına olanak tanır. Varsayılan değer false’tir. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/contacts/contact_abc123/assign?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "sendOpeningMessage": true }'
Yanıt
{
"success": true,
"data": { "contactId": "contact_abc123", "campaignId": "NBCXrhqGPSFsd6MV7pRo" }
}
Krediler: Bir WhatsApp kampanyasında açılış mesajı göndermek, alıcının ülkesine ve şablonun kategorisine göre fiyatlandırılan herhangi bir şablon gönderimi gibi ücretlendirilir. Diğer kanallarda açılış mesajı normal bir giden mesajdır.
Bir kampanyayı gelen kanallara yönlendirme
Bu uç noktalar, bir kampanyanın bir kanaldaki yeni ve bilinmeyen kişilere nasıl yanıt vereceğini yönetir. Yeni entegrasyonlar için Giriş Noktalarını Tercih Edin (Kampanya türleri altındaki nota bakın) — bunlar, eski yöntemle yönlendirme yapan kampanyalarla çalışmak ve iki gelen kampanya arasındaki kanal sahipliği çakışmasını çözmek için yararlı olmaya devam eder.
Bir kampanyayı gelen kanallara atama
POST /campaigns/{campaignId}/incoming-routing
| Alan | Gerekli | Açıklama |
|---|---|---|
channels |
Evet | Bu kampanyanın yeni ve bilinmeyen kişiler için yanıt vermesi gereken kanalların dizisi. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/incoming-routing?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "channels": ["whatsapp", "instagram"] }'
Yanıt
{
"success": true,
"uid": "abc123",
"campaignId": "NBCXrhqGPSFsd6MV7pRo",
"channels": ["whatsapp", "instagram"],
"failed": []
}
channels yalnızca bu kampanyaya yönlendirilen kanalları listeler; failed ise yönlendirilmeyenleri listeler. İstenen her kanal başarısız olursa, isteğin kendisi de başarısız olur.
Bir kampanyanın gelen yönlendirmesini temizleme
DELETE /campaigns/{campaignId}/incoming-routing
| Alan | Gerekli | Açıklama |
|---|---|---|
channelToUnassign |
Hayır | Yalnızca bu kanal için yönlendirmeyi temizleyin. Bu kampanyanın şu anda yanıt verdiği tüm kanalları temizlemek için boş bırakın. |
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/incoming-routing?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "channelToUnassign": "instagram" }'
Yanıt
{
"success": true,
"uid": "abc123",
"campaignId": "NBCXrhqGPSFsd6MV7pRo",
"channelsRemoved": ["instagram"]
}
Uyuyan bir kampanyayı yeniden etkinleştirme
POST /campaigns/{campaignId}/reactivate
Bir kampanyayı Ended, Completed, Paused veya Draft durumundan geri getirir ve kanallarını yeniden talep eder. Yalnızca Incoming from Unknown Contacts veya Combined durumundaki kampanyalarda çalışır; zaten Live olan bir kampanya başarılı kabul edilir ve yapılacak bir işlem yoktur.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/reactivate?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"data": {
"success": true,
"channelsReactivated": ["whatsapp"],
"channelsBlockedByConflict": [],
"campaignType": "Incoming from Unknown Contacts"
}
}
Farklı bir kampanyanın temsilcisi tarafından halihazırda talep edilmiş bir kanal, tüm çağrıyı başarısız kılmak yerine channelsBlockedByConflict içinde görünür; bu kampanyanın kanalı devralmasını istiyorsanız, önce kanalı serbest bırakmak için aşağıdaki çakışan bir gelen kampanyayı durdur seçeneğini kullanın. Yeniden etkinleştirmeyi desteklemeyen bir kampanya türü veya yukarıdaki uyku durumlarından biri olmayan bir durum için 400 döndürülür.
Çakışan bir gelen kampanyayı durdur
POST /campaigns/{campaignId}/stop-incoming
Bu kampanyanın kanallarını, şu anda onları elinde tutan DİĞER kampanyadan serbest bırakır, böylece bu kampanya onları bir sonraki adımda talep edebilir. Bu, bir gelen kampanyayı başka birinin zaten yanıtladığı bir kanala başlattığınızda kontrol panelinin otomatik olarak yaptığı işlemin REST sürümüdür.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/stop-incoming?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"ended_campaign_ids": [],
"released_channels": ["whatsapp"],
"cleared_entire_field": false
}
Bu kampanya reklamını yaptığı her kanala zaten sahip olduğunda released_channels boş döner; devralınacak bir şey yoktur.
Maliyet tahminleri
Bir kampanyayı göndermeden önce başlatmanın ne kadara mal olacağını tahmin edin.
WhatsApp şablonu maliyet tahmini
GET /campaigns/{campaignId}/template-cost-estimate
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/template-cost-estimate?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"billing_mode": "credits",
"data": {
"countries": [
{
"countryCode": "1",
"name": "United States",
"iso": "US",
"flag": "🇺🇸",
"contactCount": 120,
"costPerContact": 2,
"subtotal": 240
}
],
"totalContacts": 120,
"totalTemplateCost": 240,
"templateCategory": "marketing",
"billing_mode": "credits",
"service_messages_billable_soon": false
}
}
billing_mode, yönetilen WhatsApp hattında "credits"'dir. Meta’nın WhatsApp İşletme Hesabınızı doğrudan faturalandırdığı bir hatta, costPerContact, subtotal ve totalTemplateCost değerleri null olarak döner; bildirilecek bir kredi rakamı olmadığından asla ücretsiz olarak okunacak 0 değeri dönmez.
SMS maliyet tahmini
GET /campaigns/{campaignId}/sms-cost-estimate
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/sms-cost-estimate?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"billing_mode": "twilio_direct",
"data": {
"totalContacts": 120,
"messageLength": 87,
"segmentsPerMessage": 1,
"totalSegments": 120,
"estimatedCostUsd": 0.96,
"priceUnit": "USD per segment",
"billedByTwilio": true
}
}
SMS her zaman kendi Twilio hesabınız üzerinden gönderilir (bkz. SMS sağlayıcısı), bu nedenle bu her zaman doğrudan Twilio tarafından faturalandırılır; estimatedCostUsd, bir kredi ücreti değil, bu Twilio faturasının bir tahminidir.
Limit kontrolleri
Başarısız bir gönderimden sonra öğrenmek yerine, başlatmadan önce bir limiti kontrol edin.
Kampanya kapsamlı kontroller
GET /campaigns/{campaignId}/limits/ai-credit-messaging — bu kampanyayı başlatmanın veya planlamanın hesabınızın yapay zeka kredisi mesajlaşma limitini aşıp aşmayacağı.
GET /campaigns/{campaignId}/limits/messaging — hesabınızın günlük mesajlaşma limitini aşıp aşmayacağı.
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/limits/messaging?apiKey=YOUR_API_KEY"
Yanıt (limit aşılmadı)
{
"success": true,
"data": "Campaign is within the daily messaging limit."
}
Limit aşıldığında bunun yerine bir 400 döndürülür ve nedeni error içinde belirtilir.
Hesap kapsamlı kontroller
GET /campaigns/limits/campaigns — aboneliğinizin aylık kampanya oluşturma limitine ulaşıp ulaşmadığınız.
GET /campaigns/limits/contacts — aboneliğinizin kişi limitine ulaşıp ulaşmadığınız.
curl "https://api.youraiconnector.com/v1/campaigns/limits/campaigns?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"data": "You can create 3 more campaigns this month."
}
Kampanya istatistik toplamları
GET /campaigns/stats/totals
Hesabınızdaki her kampanya VE her yapay zeka temsilcisi için, geriye dönük bir pencere üzerinden gönderilen ve yanıtlanan toplamlar — kampanya listesi sayfasında her satırın yanında gösterilen sayıların aynısı, kampanya başına bir istek yerine tek bir çağrıda.
| Sorgu parametresi | Açıklama |
|---|---|
days |
Geriye dönük pencerenin boyutu, 1-365 arası. Varsayılan değer 90’dır. |
curl "https://api.youraiconnector.com/v1/campaigns/stats/totals?days=30&apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"byCampaign": {
"NBCXrhqGPSFsd6MV7pRo": { "sent": 1204, "replied": 318 }
},
"byAgent": {
"agent_abc123": { "sent": 1204, "replied": 318 }
},
"windowDays": 30
}
byAgent kendi başına bir toplamdır, byCampaign toplamı değildir — yapay zeka temsilcisi tabanlı bir hesabın trafiği hiçbir kampanyaya bağlı olmayabilir, bu nedenle aksi takdirde burada görünmez olurdu.
Oyun alanında bir kampanyayı test etme
Oyun alanı, gerçek bir kanala veya gerçek bir kişiye dokunmadan bir kampanyanın botuyla sohbet etmenizi sağlar. Bu, kontrol panelinin deneme paneliyle aynı korumalı alandır ve API üzerinden tamamen kullanılabilir.
Akış şöyledir: gizli bir test kişisi oluşturun, bir mesaj gönderin ve ardından botun yanıtı için kampanyayı sorgulayın. Yanıtlar asenkron olarak oluşturulur, bu nedenle yanıt gövdesinde değil, kampanyadaki test_messages içinde gelirler.
Playground, API maliyet kredileri üzerinden çalışır. Bir API anahtarı ile başlatılan test konuşması, gerçek bir yanıtta olduğu gibi normal yapay zeka mesajı ücreti üzerinden ücretlendirilir ve kullanım geçmişinizde normal bir giriş olarak görünür. Kontrol panelinden yapılan testler ücretsiz kalmaya devam eder. Aradaki fark kasıtlıdır: bir test çalışması, canlı bir çalışma ile aynı yapay zeka işini yapar, bu nedenle sınırsız bir API playground’u, başkasının hesabına sınırsız yapay zeka çalıştırmanın bir yolu olurdu.
Adım 1 - Test kişisini oluşturun
POST /campaigns/{campaignId}/try-out/contact
Gizli test kişisini oluşturur ve onu kampanyaya bağlar. Tüm gövde alanları isteğe bağlıdır; boş bıraktığınız her şey yerleşik bir örnek kimliğe (John Doe) geri döner.
| Alan | Gerekli | Açıklama |
|---|---|---|
first_name |
Hayır | Test kişisinin adı. |
last_name |
Hayır | Test kişisinin soyadı. |
email |
Hayır | Test kişisinin e-postası. |
phone |
Hayır | Test kişisinin telefon numarası. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/try-out/contact?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "first_name": "Maria", "last_name": "Lopez" }'
Yanıt
{
"success": true,
"contactId": "8kQx1vNbA2fLpR7d"
}
Adım 2 - Gelen mesajı kaydet
POST /campaigns/{campaignId}/try-out/messages
Mesajları test dizisine ekler. Ziyaretçinin mesajını önce buraya gönderin, böylece botun okuduğu konuşma geçmişinde görünür.
| Alan | Gerekli | Açıklama |
|---|---|---|
messages |
Evet | Mesaj nesneleri dizisi, istek başına en fazla 200. |
messages[].body |
Evet | Mesaj metni. |
messages[].direction |
Evet | Ziyaretçi için "inbound", bot için "outbound". |
messages[].timestamp |
Hayır | ISO-8601 dizisi veya epoch milisaniyeleri. |
messages[].role |
Hayır | İsteğe bağlı rol etiketi. |
messages[].name |
Hayır | İsteğe bağlı görünen ad. |
ignoreCounter |
Hayır | Tamsayı. Aynı yazma işleminde kampanyanın yoksayma sayacını sıfırlar. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/try-out/messages?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"body": "Do you ship to Belgium?",
"direction": "inbound",
"timestamp": "2026-07-22T09:30:00Z"
}
]
}'
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"appended": 1
}
Adım 3 - Botun yanıt vermesini iste
POST /campaigns/{campaignId}/try-out/test-message
Mesajı yapay zeka hattına gönderir. Bot yanıtını fiilen üreten çağrı budur.
| Alan | Gerekli | Açıklama |
|---|---|---|
message |
Evet | Ziyaretçinin en son mesaj metni. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/try-out/test-message?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "message": "Do you ship to Belgium?" }'
Yanıt
{
"success": true,
"data": "Published"
}
"Published", mesajın yapay zeka hattına gittiği anlamına gelir. "Ignored", daha yeni bir test mesajının bunun yerini aldığı anlamına gelir; oyun alanı, gerçek bir konuşmada birinin yazmayı bitirmesinin beklenmesi gibi, son mesajdan yaklaşık dört saniye sonra hızlı bir mesaj dizisini tek bir yanıtta birleştirir. Bu birleştirme penceresi nedeniyle, bu çağrının dönmesi birkaç saniye sürer.
Adım 4 - Yanıtı oku
GET /campaigns/{campaignId}
Botun yanıtı, kampanyanın test_messages dizisine eklenir. Yeni bir outbound girişi görünene kadar kampanyayı sorgulayın.
{
"success": true,
"campaign": {
"id": "NBCXrhqGPSFsd6MV7pRo",
"test_messages": [
{ "body": "Do you ship to Belgium?", "direction": "inbound" },
{ "body": "Yes, we ship across the EU.", "direction": "outbound" }
]
}
}
Oyun alanını sıfırla
POST /campaigns/{campaignId}/try-out/reset
Tüm korumalı alanı temizler: test kişisini siler, test_messages içeriğini temizler ve botun yanıt kilitlerini serbest bırakır. Bunu test çalıştırmaları arasında kullanın.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/try-out/reset?apiKey=YOUR_API_KEY"
Yanıt
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
Diğer oyun alanı uç noktaları
| Uç Nokta | Ne işe yarar |
|---|---|
DELETE /campaigns/{campaignId}/try-out/contact |
Yalnızca mevcut test kişisini siler ve bağlantısını kaldırır, test_messages içeriğini olduğu gibi bırakır. Hiçbir kişi bağlı olmadığında bile başarılı olur. |
POST /campaigns/{campaignId}/try-out/transfer |
Tek bir istekte, mevcut bir konuşma ile önceden doldurulmuş yeni bir oyun alanı başlatır: test kişisini değiştirir ve test_messages içeriğinin üzerine yazar. Gövde first_name, last_name, messages (boş olabilir) ve ignoreCounter alır. Bunu, hız sınırı kullanımınızı üç katına çıkaran sil-sonra-oluştur-sonra-ekle yöntemine tercih edin. |
POST /campaigns/{campaignId}/try-out/messages/replace |
test_messages içeriğine ekleme yapmak yerine tamamen üzerine yazar. Bir iş parçacığını kısaltmak veya geri sarmak için kullanın. |
POST /campaigns/{campaignId}/try-out/contact/reset-ignore-counter |
Gönderimden sonra yeniden yapma ve tekrarlama akışları için yalnızca test kişisinin yoksayma sayacını sıfırlar. |
Kampanyalar API hataları
Kampanya uç noktaları standart hata zarfını döndürür:
{
"success": false,
"error": "Campaign not found"
}
| Durum | Bir kampanya uç noktasında gerçekleştiğinde |
|---|---|
400 |
Gerekli bir alan eksik veya geçersiz (örneğin hatalı bir type, boolean olmayan bir enabled veya bilinmeyen bir hafta içi anahtarı). Ayrıca, sınırın aşılacağı durumlarda bir limit kontrolü uç noktası tarafından ve desteklemeyen bir kampanya türü veya durumu için yeniden etkinleştirme tarafından döndürülür. |
404 |
Kampanya bulunamadı — ya mevcut değil ya da başka bir hesaba ait. |
409 |
Bu kampanya için halihazırda bir optimizasyon çalışıyor. |
Her uç noktanın döndürebileceği ortak kodlar — 401, 403 (planınız API erişimini içermiyor), 429 (hız sınırı) ve 500 — yeniden deneme rehberliği ile birlikte Hatalar ve Sayfalandırma bölümünde listelenmiştir.
İlgili
- Bir kanalı bir kampanyaya yönlendirin — Giriş Noktalarını kullanarak Instagram, WhatsApp veya yanıtlaması gereken herhangi bir kanalı Yapay Zeka Temsilcisine yönlendirin.
- Yapay zeka ile takip şablonları oluşturun — Bir kampanyanın WhatsApp takip şablonlarını yazan bir arka plan işi başlatın.
- SSS API’si — Kampanyalarınızın kullandığı soru-cevap girişlerini yönetin.
- API Erişimi — API anahtarınızı oluşturun.
- Kimlik Doğrulama — Anahtarınızı iletmenin tüm yolları.