Mesajlar ve Konuşmalar
Messages API, herhangi bir kişiye mesaj göndermenize, bir konuşmayı okumanıza, gönderdiğiniz bir mesajı düzeltmenize veya silmenize, bir mesaja tepki vermenize, tam bir sohbet oturumu dizisini çekmenize, bir dökümü dışa aktarmanıza ve sohbetleri okundu veya okunmadı olarak işaretlemenize olanak tanır; üstelik tüm bunları gelen kutusunu açmadan yapabilirsiniz.
Bu sayfadaki tüm yollar https://api.youraiconnector.com/v1 temel URL’sine göredir. Her istek API anahtarınızı gerektirir — gönderme yollarının tam listesi için Kimlik Doğrulama bölümüne bakın. Aşağıdaki örnekler X-API-Key başlığını kullanır; bir cURL örneği ise ?apiKey= sorgu biçimini de gösterir.
Teslimat nasıl çalışır: Bir mesaj göndermek, mesajın ulaşmasını beklemez. API mesajınızı kabul eder, hemen bir mesaj kimliği ile yanıt verir ve ardından mesajı arka planda kişinin kanalında (WhatsApp, SMS, Instagram vb.) teslim eder. Bir mesajın gerçekten teslim edilip edilmediğini veya okunup okunmadığını takip etmek için Webhooks ile durum güncellemelerini dinleyin; yoklama (polling) yapmayın. Gönderme yanıtı yalnızca mesajın kabul edildiğini onaylar.
Mesaj gönder
Göndermenin iki yolu vardır. Kişiyi halihazırda nasıl tanımladığınıza uygun olanı seçin:
- Kişi kimliği ile gönder — kişinin kimliğini zaten biliyorsunuz (örneğin, kişiyi API aracılığıyla oluşturdunuz veya bir web kancasından aldınız).
POST /contacts/{contactId}/send-messagekullanın. - Kişi kimliği (identity) ile gönder — kişinin telefon numarasını, Instagram kimliğini vb. biliyorsunuz ancak dahili kimliğini bilmiyorsunuz.
POST /contacts/sendkullanın ve platformun doğru kişiyi bulmasını sağlayın.
Her ikisi de mesajı aynı şekilde sıraya alır ve kişinin bulunduğu kanaldan teslim eder. Bir taşıma yöntemi seçmezsiniz; platform, WhatsApp kişilerini WhatsApp üzerinden, SMS kişilerini SMS üzerinden vb. yönlendirir.
Kişi kimliği ile gönder
POST /contacts/{contactId}/send-message
| Alan | Gerekli | Açıklama |
|---|---|---|
body |
Evet | Gönderilecek mesaj metni. |
mediaUrl |
Hayır | Eklenecek medya dosyasının (görsel, belge vb.) URL’si. |
mediaContentType |
Hayır | Eklenen medyanın MIME türü, örneğin image/jpeg. |
pauseBot |
Hayır | true, mesaj gönderilirken bu kişi için yapay zekayı duraklatır — bir insanın devralması içindir. Bkz. Yapay zekayı duraklatma veya devam ettirme. |
clearIncompleteReply |
Hayır | true, yarım kalmış bir bot yanıtını atar, böylece mesajınızdan sonra devam etmez. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/send-message" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Hi! Your appointment is confirmed for tomorrow at 10:00."
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/send-message",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
body: "Hi! Your appointment is confirmed for tomorrow at 10:00.",
}),
}
);
const data = await res.json();
console.log(data.messageId);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/send-message",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"body": "Hi! Your appointment is confirmed for tomorrow at 10:00."},
)
print(res.json()["messageId"])
Yanıt (200 OK):
{
"success": true,
"messageId": "aB3dE5fG7hI9jK1lM2nO",
"contactId": "contact123",
"channel": "whatsapp",
"message": "Message created successfully. Delivery is being processed."
}
Kişi kimliği (identity) ile gönder
POST /contacts/send
Bunu, kişinin dahili kimliğine sahip olmadığınızda kullanın. Mesaj body değerini ve ya bir contact_id ya da o kanalla eşleşen kimlik alanı ile birlikte bir channel sağlayın.
| Alan | Gerekli | Açıklama |
|---|---|---|
body |
Evet | Gönderilecek mesaj metni. |
contact_id |
Hayır | Mevcut bir kişiye ait kimlik (ID). Ayarlandığında, aşağıdaki kimlik alanlarına gerek kalmaz. |
channel |
Hayır | Mesajın gönderileceği kanal. contact_id belirtilmediğinde gereklidir. Giden mesaj gönderilebilen 14 kanaldan biri: whatsapp, whatsapp_web, sms, instagram, instagram_private, messenger, telegram, chat-widget, custom, email, line, imessage, linkedin, viber. |
phone_number |
Hayır | Kişinin uluslararası formatta telefon numarası. whatsapp, whatsapp_web ve sms ile birlikte kullanılır. |
instagram_id |
Hayır | Kişinin Instagram kullanıcı kimliği. instagram ile birlikte kullanılır. |
messenger_id |
Hayır | Kişinin Messenger kullanıcı kimliği. messenger ile birlikte kullanılır. |
telegram_user_id |
Hayır | Kişinin Telegram kullanıcı kimliği. telegram ile birlikte kullanılır. |
media_url |
Hayır | Eklenecek medya dosyasının URL’si. |
media_content_type |
Hayır | Ekli medyanın MIME türü, örneğin image/jpeg. |
Hangi kanallar kimlik bilgisi ile çözümlenebilir. 14 kanaldan sadece altısı contact_id yerine bir kimlik alanı kabul eder: whatsapp, whatsapp_web ve sms, phone_number ile; instagram, instagram_id ile; messenger, messenger_id ile ve telegram, telegram_user_id ile aranır. Diğer sekizi — instagram_private, chat-widget, custom, email, line, imessage, linkedin ve viber — aranabilecek genel bir kimliğe sahip değildir, bu nedenle bu kanallar üzerinden gönderim yapmak contact_id gerektirir; yalnızca channel geçmek, contact_id bilgisinin gerekli olduğunu belirten bir 400 döndürür.
cURL (?apiKey= sorgu formunu kullanarak)
curl -X POST "https://api.youraiconnector.com/v1/contacts/send?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel": "whatsapp",
"phone_number": "+31612345678",
"body": "Hi! Your appointment is confirmed."
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/contacts/send", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
channel: "whatsapp",
phone_number: "+31612345678",
body: "Hi! Your appointment is confirmed.",
}),
});
const data = await res.json();
console.log(data.message_id, data.channel);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/send",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"channel": "whatsapp",
"phone_number": "+31612345678",
"body": "Hi! Your appointment is confirmed.",
},
)
data = res.json()
print(data["message_id"], data["channel"])
Yanıt (201 Created):
{
"success": true,
"message_id": "aB3dE5fG7hI9jK1lM2nO",
"contact_id": "contact123",
"channel": "whatsapp"
}
Bir mesaj neden reddedilebilir: Rahatsız etmeyin veya gizli modu açık olan bir kişi giden mesajları alamaz — istek
422hatasıyla başarısız olur. Sağladığınız kimlik veya tanımlayıcı ile eşleşen bir kişi yoksa,404alırsınız.
Bir kişinin mesajlarını listele
GET /contacts/{contactId}/messages
Bir kişinin mesajlarını, imleç tabanlı sayfalama ile en yeniden başlayacak şekilde döndürür.
| Sorgu parametresi | Gerekli | Açıklama |
|---|---|---|
limit |
Hayır | Sayfa boyutu. Varsayılan 50, maksimum 100. |
cursor |
Hayır | Önceki bir yanıttan gelen next_cursor değeri. İmleçten daha eski mesajları döndürür. |
filter |
Hayır | İçerik türüne göre filtrele: all (varsayılan), text, media veya tool_use. |
direction |
Hayır | Yöne göre filtrele: all (varsayılan), inbound (kişiden alınan) veya outbound (sizin tarafınızdan gönderilen). |
Filtreleme ve sayfalama hakkında not:
filtervedirectionfiltreleri, okunduktan sonra her sayfaya uygulanır, bu nedenle filtrelenmiş bir sayfalimitdeğerinden daha az öğe içerebilir.next_cursortüm konuşma boyunca ilerlemeye devam eder, bu nedenlenext_cursordeğerinullolana kadar sayfalamaya devam edin.
cURL
curl "https://api.youraiconnector.com/v1/contacts/contact123/messages?limit=50&direction=inbound" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ limit: "50", direction: "inbound" });
const res = await fetch(
`https://api.youraiconnector.com/v1/contacts/contact123/messages?${params}`,
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.messages, data.next_cursor);
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/contacts/contact123/messages",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"limit": 50, "direction": "inbound"},
)
data = res.json()
print(data["messages"], data["next_cursor"])
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123",
"messages": [
{
"id": "aB3dE5fG7hI9jK1lM2nO",
"body": "Hi! Thanks for reaching out.",
"direction": "inbound",
"channel": "whatsapp",
"status": "delivered",
"type": null,
"timestamp": "2026-06-01T10:00:00.000Z",
"media_url": null,
"media_content_type": null,
"bot_reply": false
}
],
"next_cursor": "cD4eF6gH8iJ0kL2mN3oP"
}
Mesaj alanları
| Alan | Açıklama |
|---|---|
id |
Mesajın benzersiz kimliği. |
body |
Mesajın metin içeriği. |
direction |
inbound (kişiden alınan) veya outbound (hesabınız tarafından gönderilen). |
channel |
Mesajın gönderildiği veya alındığı kanal (örneğin whatsapp, sms, instagram). |
status |
Mevcut iletim durumu, örneğin Created, sent, delivered, read, failed. |
type |
Mesaj türü. Düz metin mesajları null türündedir; otomatik asistan aracı etkinliği tool_use olarak işaretlenir. |
timestamp |
Mesajın oluşturulduğu ISO 8601 zamanı. |
media_url |
Varsa, ekli bir medya dosyasının URL’si. |
media_content_type |
Varsa, ekli medyanın MIME türü. |
bot_reply |
Mesaj yapay zeka asistanı tarafından oluşturulduğunda true değerini alır. |
score |
Mesaj için verdiğiniz puan: 1 beğenme, -1 beğenmeme, 0 puanlanmadığında. Bkz. Bir mesajı puanlayın veya yıldızlayın. |
is_important |
Mesaj yıldızlandığında true değerini alır. |
is_deleted |
Mesaj silindiğinde true değerini alır. Silinen mesajlar listede kalır ancak body ve media_url alanları boştur. |
reactions |
Mesajdaki emoji tepkileri, her iki taraftan da. Her zaman bir dizidir; tepki yoksa boştur. Her giriş emoji, from_phone_number, from_me (tepki size aitse true) ve reacted_at içerir. |
Sohbet oturumlarını listele
Bir sohbet oturumu, bir kişiyle yapılan tek bir konuşma penceresidir: kişi konuşmaya başladığında açılır ve konuşma sona erdiğinde kapanır. Oturumlar, uzun bir geçmişi tek bir sonsuz liste yerine okunabilir konuşmalara bölmenizi sağlar.
Tüm kişilerdeki son oturumlar
GET /chat-sessions/recent
Hesaptaki her kişi genelinde, son X saat içinde başlayan oturumları en yeniden başlayarak döndürür.
| Sorgu parametresi | Gerekli | Açıklama |
|---|---|---|
hours |
Evet | Ne kadar geriye gidileceği (saat cinsinden). Pozitif bir tam sayı olmalıdır. |
status |
Hayır | Yalnızca şu duruma sahip oturumları döndür: ChatSessionOpened veya ChatSessionClosed. |
limit |
Hayır | Döndürülecek maksimum oturum sayısı. Varsayılan 100, maksimum 100. |
includeMessages |
Hayır | true, her oturuma bir messages dizisi ekler. Yanıtı çok daha büyük hale getirdiği için varsayılan olarak kapalıdır. |
cURL
curl "https://api.youraiconnector.com/v1/chat-sessions/recent?hours=24&status=ChatSessionClosed" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ hours: "24", status: "ChatSessionClosed" });
const res = await fetch(`https://api.youraiconnector.com/v1/chat-sessions/recent?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.data.total_sessions, data.data.sessions);
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/chat-sessions/recent",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"hours": 24, "status": "ChatSessionClosed"},
)
data = res.json()["data"]
print(data["total_sessions"], data["sessions"])
Yanıt (200 OK):
{
"success": true,
"data": {
"hours_ago": 24,
"total_sessions": 2,
"sessions": [
{
"session_id": "session456",
"contact_id": "contact123",
"contact_name": "Jane Doe",
"contact_phone": "+31612345678",
"contact_email": "jane@example.com",
"start_date_time": "2026-06-01T09:55:00.000Z",
"end_date_time": "2026-06-01T10:20:00.000Z",
"status": "ChatSessionClosed",
"tag": "Booking enquiry"
}
]
}
}
Bir kişi için tüm oturumlar
GET /chat-sessions/{contactId}
Tek bir kişi için tüm sohbet oturumlarını döndürür. Yukarıdakiyle aynı status, limit ve includeMessages parametrelerini kullanır; hours burada geçerli değildir.
cURL
curl "https://api.youraiconnector.com/v1/chat-sessions/contact123?limit=20" \
-H "X-API-Key: YOUR_API_KEY"
Yanıt (200 OK):
{
"success": true,
"data": {
"contact_id": "contact123",
"contact_name": "Jane Doe",
"total_sessions": 2,
"sessions": [
{
"id": "session456",
"start_date_time": "2026-06-01T09:55:00.000Z",
"end_date_time": "2026-06-01T10:20:00.000Z",
"status": "ChatSessionClosed",
"tag": "Booking enquiry"
}
]
}
}
Oturum kimliği alan adları iki uç nokta arasında farklılık gösterir. Son oturumlar listesi buna
session_idder (ayrıca kişinin ayrıntılarını da taşır, çünkü oturumlar birçok kişiden gelir); kişi bazlı liste iseidolarak adlandırır. Aşağıdaki tam diziyi çekerken{sessionId}olarak her iki değeri de kullanabilirsiniz.
includeMessages=true olduğunda, her oturum id, body, direction, timestamp, type, channel ve status içeren girişlere sahip bir messages dizisi kazanır.
Bir sohbet oturumu dizisini getir
GET /contacts/{contactId}/chat-sessions/{sessionId}/messages
Bir sohbet oturumu, bir kişinin mesajlarını tek bir konuşma penceresinde gruplandırır. Bu uç nokta, oturumun meta verileriyle birlikte tek bir oturumun tam dizisini en eskiden başlayarak döndürür. Bir kişi için oturum kimliklerini sohbet oturumları uç noktaları aracılığıyla bulabilirsiniz.
cURL
curl "https://api.youraiconnector.com/v1/contacts/contact123/chat-sessions/session456/messages" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/chat-sessions/session456/messages",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.session, data.messages);
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/contacts/contact123/chat-sessions/session456/messages",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["session"], data["messages"])
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123",
"session": {
"id": "session456",
"status": "ChatSessionClosed",
"start_date_time": "2026-06-01T09:55:00.000Z",
"end_date_time": "2026-06-01T10:20:00.000Z",
"tag": "Booking enquiry"
},
"messages": [
{
"id": "aB3dE5fG7hI9jK1lM2nO",
"body": "Hi! Thanks for reaching out.",
"direction": "inbound",
"channel": "whatsapp",
"status": "delivered",
"type": null,
"timestamp": "2026-06-01T09:55:00.000Z",
"media_url": null,
"media_content_type": null,
"bot_reply": false
}
]
}
session nesnesi status (etkin olduğunda ChatSessionOpened, sona erdiğinde ChatSessionClosed), start_date_time, end_date_time ve insan tarafından okunabilir bir tag bildirir. messages dizisi, liste uç noktasıyla aynı mesaj alanlarını kullanır.
Mesajları düzenle, sil ve tepki ver
Bu uç noktalar, bir mesaj gönderildikten sonra üzerinde değişiklik yapar. Bunlardan ikisi, kendi kopyanızın yanı sıra kişinin kanalına da ulaşır, bu nedenle bunları bağlamadan önce bölüm girişini okuyun; nelerin mümkün olduğu tamamen konuşmanın gerçekleştiği kanala bağlıdır.
Her kanalın izin verdikleri
| Eylem | Kişinin kopyasını değiştirebilen kanallar | Zaman sınırı |
|---|---|---|
| Gönderilen bir mesajı düzenle | Sohbet aracı, WhatsApp Web, Telegram, LinkedIn | Sohbet aracında sınır yok, WhatsApp Web’de 15 dakika, Telegram’da 48 saat, LinkedIn’de 60 dakika |
| Herkes için sil | Sohbet aracı, WhatsApp Web, Telegram, LinkedIn | LinkedIn’de 60 dakika; diğerlerinde yayınlanmış bir sınır yoktur |
| Emoji ile tepki ver | WhatsApp Web, Telegram | Yok |
Diğer tüm kanallarda — WhatsApp Business API, SMS, Instagram, Messenger, e-posta, LINE, özel kanallar — silme işlemi mesajı gelen kutunuzdan kaldırır ancak kişi kendi kopyasını tutmaya devam eder ve düzenleme veya tepki verme işlemleri hiç mümkün değildir.
Bir mesajı düzenle
POST /contacts/{contactId}/messages/{messageId}/edit
Zaten gönderdiğiniz bir mesajı, kişinin cihazında ve sizin kopyanızda yeniden yazar.
| Alan | Gerekli | Açıklama |
|---|---|---|
body |
Evet | Yeni mesaj metni. Boş olmamalı ve en fazla 4096 karakter olabilir. |
Silmenin aksine, bu işlem kanal reddettiğinde açıkça başarısız olur: bir 409 alırsınız ve kopyanız tam olarak kişinin sahip olduğu şekilde kalır, çünkü kişinin hiç almadığı bir düzenlemeyi göstermek iki tarafın uyumunu bozar. edit_reason alanı size nedenini söyler — kanalın düzenleme penceresi kapanmıştır, kanalın bağlantısı kesilmiştir veya başka bir sorun oluşmuştur.
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/edit" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "body": "Sorry - I meant Thursday at 3pm." }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/edit",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ body: "Sorry - I meant Thursday at 3pm." }),
}
);
const data = await res.json();
console.log(data.edited, data.edit_reason);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/edit",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"body": "Sorry - I meant Thursday at 3pm."},
)
data = res.json()
print(data.get("edited"), data.get("edit_reason"))
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123",
"message_id": "msg_1",
"edited": true,
"edit_reason": "edit_dispatched"
}
Kanal düzenlemeyi kabul etmezse bunun yerine bir 409 alırsınız ve hiçbir şey değiştirilmez:
{
"success": false,
"error": "The message could not be edited",
"edit_reason": "channel_disconnected"
}
Zaten silinmiş bir mesaj, hiç düzenleme yapamayan bir kanal ve kanalı için çok eski olan bir mesajın tümü 400 döndürür — istek kanala asla ulaşmaz.
Bir mesajı sil
DELETE /contacts/{contactId}/messages/{messageId}
Mesajı konuşmanızdan kaldırır ve kanalın izin verdiği durumlarda kişinin kopyasını da geri çeker. İstek gövdesi yoktur.
Bu, mesaj mevcut olduğunda, kişinin kopyası geri çekilemese bile her zaman 200 yanıtını verir — sizin kopyanız silinmiştir, bu nedenle bir hata mesajı yanıltıcı olur. Kullanıcıya gerçekte ne olduğunu söylemek için yanıttaki üç alanı okuyun:
| Alan | Açıklama |
|---|---|
revoke_supported |
Bu kanalın mesajları geri çekip çekemeyeceği. |
revoked |
Kişinin cihazındaki kopyanın kaldırılıp kaldırılmadığı. |
revoke_reason |
revoked değeri false olduğunda neden kaldırılmadığı — örneğin revoke_window_closed veya already_deleted. |
cURL
curl -X DELETE "https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1",
{ method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.revoked, data.revoke_reason);
Python
import requests
res = requests.delete(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["revoked"], data["revoke_reason"])
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123",
"message_id": "msg_1",
"revoke_supported": true,
"revoked": true,
"revoke_reason": "revoke_dispatched"
}
Silinen iletiler konuşma geçmişinden kaldırılmaz. Bunlar
GET /contacts/{contactId}/messagesiçindeis_deleted: trueve boş birbodyvemedia_urlile kalır.
Birden fazla iletiyi aynı anda silme
POST /contacts/{contactId}/messages/bulk-delete
Bir grup iletiyi yalnızca kendi tarafınızdan temizler. İçerikler ve ekler boşaltılır, ancak karşı tarafın cihazında hiçbir şey geri alınmaz — bir iletiyi tamamen geri çekmek için, yukarıdaki tekli ileti uç noktasını kullanarak tek tek silin.
| Alan | Gerekli | Açıklama |
|---|---|---|
message_ids |
Evet | İstek başına 500’e kadar, boş olmayan bir ileti kimliği dizisi. messageIds, takma ad olarak kabul edilir. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/messages/bulk-delete" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "message_ids": ["msg_1", "msg_2"] }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/bulk-delete",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ message_ids: ["msg_1", "msg_2"] }),
}
);
console.log((await res.json()).deleted);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/bulk-delete",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"message_ids": ["msg_1", "msg_2"]},
)
print(res.json()["deleted"])
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123",
"deleted": 2
}
Bir iletiye tepki verme
POST /contacts/{contactId}/messages/{messageId}/react
Bir iletiye kendi emoji tepkinizi ekler veya boş bir dize göndererek tepkinizi geri alır. Karşı tarafın kendi tepkilerine asla dokunulmaz.
| Alan | Gerekli | Açıklama |
|---|---|---|
emoji |
Evet | Tepki olarak verilecek emoji veya tepkinizi kaldırmak için "". Boşluk içermeyen, en fazla 16 karakterlik tek bir dize olmalıdır. |
Düzenleme işleminde olduğu gibi, bu işlem karşı tarafın hiç almadığı bir tepkiyi göstermek yerine başarısız olur ve hata, yeniden denemenin mantıklı olup olmadığını size bildirir:
422— bu konuşmada asla iletilemez: kanal tepkileri desteklemiyor, iletinin kanal tarafında bir kimliği yok veya emoji, kanalın izin verdiği kümenin dışında.409— kanala anlık olarak ulaşılamadı. Yeniden deneme işe yarayabilir.
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/react" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "emoji": "👍" }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/react",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ emoji: "👍" }),
}
);
const data = await res.json();
console.log(data.reactions);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/react",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"emoji": "👍"},
)
print(res.json()["reactions"])
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123",
"message_id": "msg_1",
"reaction_supported": true,
"reaction_reason": "reaction_dispatched",
"reactions": [
{
"emoji": "👍",
"from_phone_number": "+31612345678",
"from_me": true,
"reacted_at": "2026-06-01T10:05:00.000Z"
}
]
}
reactions dizisi, iletideki hem sizin hem de karşı tarafın tepkilerini içeren tam kümedir. Bir 409 veya 422 durumunda dizi değişmeden döndürülür, bu nedenle doğrudan bu diziden görüntüleme yapan bir istemci, iletilmemiş bir tepkiyi asla göstermez.
Bir iletiyi oylama veya yıldızlama
PATCH /contacts/{contactId}/messages/{messageId}
Bir iletiyi başparmak yukarı veya aşağı ile oylar ve/veya önemli olarak yıldızlar. Bu işlem yalnızca sizin tarafınızdaki kayıt tutma amaçlıdır; karşı tarafa hiçbir şey gönderilmez.
| Alan | Gerekli | Açıklama |
|---|---|---|
score |
Hayır | 1 beğenme, -1 beğenmeme, 0 derecelendirmeyi temizler. |
is_important |
Hayır | true mesajı yıldızlar, false yıldızı kaldırır. "true" dizesi değil, gerçek bir boolean olmalıdır. |
İkisinden en az birini gönderin, aksi takdirde bir 400 alırsınız. Yalnızca gönderdiğiniz şey yazılır, bu nedenle bir mesajı yıldızlamak derecelendirmesini asla temizlemez ve bunun tersi de geçerlidir — ve yanıt yalnızca gönderdiğiniz alanları geri yansıtır.
cURL
curl -X PATCH "https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "score": 1, "is_important": true }'
JavaScript
await fetch("https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1", {
method: "PATCH",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ score: 1, is_important: true }),
});
Python
import requests
requests.patch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"score": 1, "is_important": True},
)
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123",
"message_id": "msg_1",
"score": 1,
"is_important": true
}
Mesajları okundu olarak işaretle
Okunmamış durumunu belirli mesajlar için veya tüm konuşma için temizleyebilirsiniz.
Belirli mesajları okundu olarak işaretle
POST /contacts/{contactId}/messages/mark-read
Okundu olarak işaretlenecek mesajların kimliklerini iletin.
| Alan | Gerekli | Açıklama |
|---|---|---|
message_ids |
Evet | Boş olmayan bir mesaj kimlikleri dizisi (istek başına 500’e kadar). |
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/messages/mark-read" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message_ids": ["aB3dE5fG7hI9jK1lM2nO", "cD4eF6gH8iJ0kL2mN3oP"]
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/mark-read",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
message_ids: ["aB3dE5fG7hI9jK1lM2nO", "cD4eF6gH8iJ0kL2mN3oP"],
}),
}
);
const data = await res.json();
console.log(data.marked_read);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/mark-read",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"message_ids": ["aB3dE5fG7hI9jK1lM2nO", "cD4eF6gH8iJ0kL2mN3oP"]},
)
print(res.json()["marked_read"])
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123",
"marked_read": 2
}
Tüm sohbeti okundu olarak işaretle
POST /contacts/{contactId}/mark-read
Gelen kutusundaki kişinin tüm konuşması için okunmamış rozetini temizler. İstek gövdesi gerekmez.
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/mark-read" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/mark-read",
{ method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.success);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/mark-read",
headers={"X-API-Key": "YOUR_API_KEY"},
)
print(res.json()["success"])
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123"
}
Tüm sohbeti okunmadı olarak işaretle
POST /contacts/{contactId}/mark-unread
Okunmadı rozetini konuşmaya geri koyar — ekibinizden biri bir sohbeti açtığında ancak geri devrettiğinde kullanışlıdır. İstek gövdesi gerekmez.
Bu yalnızca gelen kutusuna özel bir bayraktır: konuşmanın en son ne zaman okunduğunu değiştirmez, bu nedenle destekleyen kanallarda kişiye okundu bilgisi gönderilmez.
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/mark-unread" \
-H "X-API-Key: YOUR_API_KEY"
Yanıt (200 OK):
{
"success": true,
"contact_id": "contact123"
}
Bir konuşmayı dışa aktar
Dışa aktarmalar, mesajlar arasında gezinmek yerine size tüm konuşmayı okunabilir bir döküm olarak verir. Her dışa aktarma uç noktası, mesaj listesindeki filtreyle eşleşen all (varsayılan), text, media veya tool_use değerinde bir filter kabul eder.
Bir kişinin sohbetini dışa aktar
GET /chat-exports/{contactId}
| Sorgu parametresi | Gerekli | Açıklama |
|---|---|---|
format |
Hayır | txt (varsayılan), düz metin dökümüne bir indirme bağlantısı döndürür. json, mesajları yanıtta yapılandırılmış veri olarak döndürür. |
filter |
Hayır | all (varsayılan), text, media veya tool_use. |
cURL
curl "https://api.youraiconnector.com/v1/chat-exports/contact123?format=json" \
-H "X-API-Key: YOUR_API_KEY"
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/chat-exports/contact123",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"format": "json"},
)
print(res.json()["data"]["messages"])
format=json ile yanıt (200 OK):
{
"success": true,
"data": {
"contact": {
"id": "contact123",
"name": "Jane Doe",
"phone": "+31612345678",
"email": "jane@example.com"
},
"messages": [
{
"body": "Hi! I have a question about my order.",
"direction": "inbound",
"timestamp": "2026-06-01T09:55:00.000Z",
"type": "text",
"media_url": null,
"media_content_type": null,
"name": null,
"args": null
}
]
}
}
format=txt (varsayılan) ile, data bunun yerine oluşturulan döküm dosyasına bir indirme bağlantısıdır:
{
"success": true,
"data": "https://storage.googleapis.com/.../chat-export-contact123-....txt"
}
İndirme bağlantısının ömrü kısadır. Dosyayı depolamak yerine bağlantıyı alır almaz indirin — döküme tekrar ihtiyacınız olduğunda yeni bir dışa aktarma isteğinde bulunun.
Tüm son konuşmaları dışa aktar
GET /chat-exports/recent
Son X saat içinde aktif olan tüm kişilerin konuşmalarını tek bir çağrıda dışa aktarır.
| Sorgu parametresi | Gerekli | Açıklama |
|---|---|---|
hours |
Evet | Geriye dönük olarak kaç saatlik aktiviteye bakılacağı. Pozitif bir tam sayı olmalıdır. |
format |
Hayır | json (varsayılan) kişi başına bir girdi döndürür. txt, içindeki tüm konuşmaları içeren tek bir indirilebilir metin dosyası döndürür. |
limit |
Hayır | Dışa aktarılacak maksimum kişi sayısı. Varsayılan 50, maksimum 100. |
filter |
Hayır | all (varsayılan), text, media veya tool_use. |
cURL
curl "https://api.youraiconnector.com/v1/chat-exports/recent?hours=24&limit=25" \
-H "X-API-Key: YOUR_API_KEY"
Yanıt (200 OK):
{
"success": true,
"data": {
"hours_ago": 24,
"total_contacts": 2,
"exports": [
{
"contactId": "contact123",
"contactName": "Jane Doe",
"phoneNumber": "+31612345678",
"email": "jane@example.com",
"messageCount": 12,
"chatExport": "Acme Export - Jane Doe\nPhone: +31612345678\n..."
}
]
}
}
format=txt ile yanıt, JSON yerine doğrudan indirme olarak gönderilen metin dosyasının kendisidir.
Bu tek çağrı, eşleşen her kişinin tam geçmişini çeker, bu nedenle yoğun hesaplarda
hoursvelimitdeğerlerini makul tutun.
Bir konuşma dökümünü kişiye e-posta ile gönderin
POST /chat-exports/{contactId}/email
Kişiye kendi konuşma dökümünü e-posta yoluyla gönderir — kendi sisteminizden yönetilen “bu sohbeti bana e-posta ile gönder” akışı.
| Alan | Gerekli | Açıklama |
|---|---|---|
recipient_email |
Hayır | Nereye gönderileceği. Varsayılan olarak kişinin kayıtlı e-posta adresidir. |
via |
Hayır | auto (varsayılan) en iyi rotayı seçer, transactional sistem e-postası olarak gönderir, email_channel bağlı e-posta kanalınızdan gönderir. |
note |
Hayır | Dökümün üzerinde gösterilecek kısa bir notunuz. 1000 karaktere kadar. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/chat-exports/contact123/email" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "note": "Here is a copy of our chat, as promised." }'
Yanıt (200 OK):
{
"success": true,
"data": {
"via": "transactional",
"recipientEmail": "jane@example.com",
"messageCount": 42,
"omittedCount": 0
}
}
omittedCount, e-postayı makul bir uzunlukta tutmak için en eski mesajlardan kaçının hariç tutulduğunu söyler. 200, dökümün oluşturulduğunu ve gönderilmek üzere sıraya alındığını belirtir, henüz gelen kutusuna ulaştığı anlamına gelmez.
Bir kişi için yapay zekayı duraklatma veya devam ettirme
PUT /contacts/{contactId}
Yapay zekanın bir kişiye yanıt vermesini durdurmak için is_bot_active değerini false olarak ayarlayın, konuşmayı geri vermek için tekrar true değerine getirin. Bir insan konuşmaya dahil olduğunda kullanmak istediğiniz devralma anahtarı budur: API ile gönderdiğiniz giden mesajlar, bot duraklatılmış olsa bile iletilmeye devam eder.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/contacts/contact123" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "is_bot_active": false }'
JavaScript
await fetch("https://api.youraiconnector.com/v1/contacts/contact123", {
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ is_bot_active: false }),
});
Python
import requests
requests.put(
"https://api.youraiconnector.com/v1/contacts/contact123",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"is_bot_active": False},
)
Yanıt
{
"success": true,
"contact_id": "contact123"
}
Yanıtın bir parçası olarak duraklatma
Bir insan yanıt göndererek devralıyorsa, ikinci bir çağrı yapmak yerine aynı istek içinde botu duraklatabilirsiniz. POST /contacts/{contactId}/send-message iki isteğe bağlı bayrağı kabul eder:
| Alan | Açıklama |
|---|---|
pauseBot |
true, mesaj gönderilirken bu kişi için yapay zekayı duraklatır. |
clearIncompleteReply |
true, yarım kalmış bir bot yanıtını atar, böylece sonrasında devam etmez. |
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/send-message" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Hi, Sarah here - taking over from the assistant.",
"pauseBot": true,
"clearIncompleteReply": true
}'
Yanıt, duraklatma uygulandığında "botPaused": true bilgisini içerir.
Bir kişiyi
POST /contacts/bulk-flagile özel olarak işaretlemek, botu onlar için de duraklatır. Tüm alan listesi için Kişiler bölümüne bakın.
Kendi gelen kutunuzu oluşturma
Bir gelen kutusunun ihtiyaç duyduğu her şey bu sayfada ve Kişiler bölümünde mevcuttur:
| İhtiyacınız olan | Uç nokta |
|---|---|
| Konuşmaları listele | GET /contacts |
| Bir konuşmayı oku | GET /contacts/{contactId}/messages |
| Bir kişinin sohbet oturumlarını listele | GET /chat-sessions/{contactId} |
| Yakın zamanda ne geldiğini gör | GET /chat-sessions/recent |
| Bir sohbet oturumunu oku | GET /contacts/{contactId}/chat-sessions/{sessionId}/messages |
| Manuel yanıt gönder | POST /contacts/{contactId}/send-message |
| Yeni gönderdiğiniz bir yanıtı düzelt | POST /contacts/{contactId}/messages/{messageId}/edit |
| Bir mesajı kaldır | DELETE /contacts/{contactId}/messages/{messageId} |
| Birkaç mesajı temizle | POST /contacts/{contactId}/messages/bulk-delete |
| Emoji ile tepki ver | POST /contacts/{contactId}/messages/{messageId}/react |
| Bir mesajı puanla veya yıldızla | PATCH /contacts/{contactId}/messages/{messageId} |
| Okundu olarak işaretle | POST /contacts/{contactId}/mark-read |
| Sohbeti ekibe geri devret | POST /contacts/{contactId}/mark-unread |
| Bir dökümü dışa aktar | GET /chat-exports/{contactId} |
| Yapay zekayı duraklat veya devam ettir | PUT /contacts/{contactId} ile is_bot_active |
Canlı güncellemeler için, bu API’yi bir zamanlayıcı ile sorgulamak yerine Webhooks ile New Message, Replies, Human Alerted ve Chat Concluded olaylarına abone olun.
Mesajlar API hataları
Mesaj uç noktaları standart hata zarfını döndürür:
{
"success": false,
"error": "Contact not found"
}
| Durum | Bir mesaj uç noktasında ne zaman gerçekleşir |
|---|---|
400 |
Gerekli bir alan eksik veya bir parametre geçersiz (hatalı limit, hours, filter, direction, status, boş veya 500’den fazla message_ids dizisi, geçersiz cursor, boş veya çok uzun düzenleme body, -1/0/1 dışında bir score veya boşluklu ya da 16 karakterden uzun bir emoji). Ayrıca bir mesaj hiç düzenlenemediğinde döndürülür — silinmiş, kanalı düzenlemeyi desteklemiyor veya o kanalın düzenleme süresi geçmiş. |
404 |
Kişi, sohbet oturumu veya sağlanan mesaj kimliklerinden biri bulunamadı. |
409 |
Kanal şu anda değişikliği kabul etmiyor. Hiçbir şey yazılmadı: düzenlemede edit_reason nedenini söyler; tepkide, kanal anlık olarak ulaşılamaz durumdadır ve yeniden deneme işe yarayabilir. |
422 |
Kişi giden mesajları alamaz (rahatsız etmeyin, özel veya desteklenmeyen bir kanal) ya da bu konuşmada bir tepki asla iletilemez (reaction_reason hangisi olduğunu söyler). |
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.
Sonraki adımlar
- Web kancaları — yoklama yapmak yerine teslimat durumu güncellemelerini size iletilmesini sağlayın.
- Kişiler — mesaj gönderdiğiniz kişileri oluşturun ve arayın.
- Randevular — kişileriniz için randevuları ayırtın ve yönetin.