REST APIDokümantasyon menüsü

Geliştiriciler

REST API

Bir Harmona asistanını kendi backend'inizden çağırın: asistan API anahtarı oluşturun, yanıtları server-sent events ile akışla alın, geçmişi ve hataları yönetin.

Her asistan HTTPS üzerinden yanıt verebilir. Bir API anahtarı tek bir asistana aittir; bu yüzden isteklerde asistanın adı geçmez. Kendi son kullanıcılarınızı kendi kimliklerinizle tanımlarsınız ve her birinin çağrılar arasında korunan bir konuşması olur. API erişimi Individual, Business ve Enterprise planlarına dahildir.

API erişimini açın ve anahtar oluşturun

  1. 1Asistanı Stüdyo → Asistanlar altında açın ve Çıktı Kanalları bölümünü açın.
  2. 2API Erişimi anahtarını açın.
  3. 3API Anahtarları altında Anahtar Oluştur seçeneğini seçin ve anahtara bir ad verin, örneğin "Production".
  4. 4Anahtarı kopyalayın. Anahtar hapi_ ile başlar ve yalnızca bir kez gösterilir.
API Erişimi her yeni asistanda kapalıdır. Çağırmak istediğiniz her asistan için ayrı ayrı açın; diğer asistanlara API üzerinden ulaşılamaz.

Anahtarları yalnızca organizasyon yöneticileri oluşturabilir. Uygulamada oluşturulan anahtarların süresi dolmaz. Her ortam ya da uygulama için ayrı bir anahtar kullanın; böylece birini diğerlerine dokunmadan iptal edebilirsiniz.

Dikkat

Harmona anahtarın yalnızca önekini saklar; bu yüzden kaybolan bir anahtar yeniden gösterilemez. Anahtarı silin ve yenisini oluşturun. Bir anahtarı silmek onu hemen iptal eder ve onu kullanan tüm entegrasyonlar anında çalışmayı durdurur.

Kimlik doğrulama ve temel URL

Anahtarı her istekte bearer token olarak gönderin. Harmona Cloud'da temel URL https://api.harmona.ai adresidir; özel bulut ya da kurum içi kurulumlarda kendi dağıtımınızın API adresini kullanın. Tüm uç noktalar /b2c/v1 altındadır.

Authorization: Bearer hapi_your_key

Tehlike

Anahtarı sunucunuzda tutun; asla tarayıcı JavaScript'ine ya da bir mobil uygulamaya koymayın. Anahtara sahip olan herkes asistanla konuşabilir, bağlantılarının içeriğini okuyabilir ve çalışma alanınıza faturalanan kullanım oluşturabilir. Bir anahtar sızarsa hemen silin.

Uç noktalar

POST/b2c/v1/chat

Bir tur gönderir ve asistanın yanıtını akışla döndürür.

GET/b2c/v1/chat/rooms

Bir son kullanıcının konuşmalarını en yeniden başlayarak listeler.

GET/b2c/v1/chat/messages

Bir konuşmanın geçmişini döndürür.

GET/b2c/v1/chat/handoff

Bir konuşmayı bir kişiye devretmek için düz metin olarak döndürür.

GET/b2c/v1/widget-config

Harmona'da yapılandırılan Web SDK ayarlarını döndürür.

Mesaj gönderin

AlanZorunluAçıklama
external_user_idEvetSon kullanıcı için sizin kimliğiniz, en fazla 255 karakter. Aynı değer her zaman aynı kullanıcının konuşmalarına döner.
messagesEvetTur; role (user ya da assistant) ve content alanlarını içeren nesnelerden oluşan bir liste. Son mesaj kullanıcıdan gelmelidir. Daha önce gösterdiğiniz bir karşılama mesajını, assistant mesajı olarak bunun önüne koyabilirsiniz.
room_idHayırBelirli bir konuşmayı sürdürür. Verilmezse kullanıcının en son etkin konuşması sürer; ilk çağrı bu konuşmayı oluşturur.
room_nameHayırKonuşma oluşturulurken ona verilecek ad.
curl -N https://api.harmona.ai/b2c/v1/chat \
  -H "Authorization: Bearer hapi_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "external_user_id": "customer-4821",
    "messages": [{ "role": "user", "content": "Where is my order?" }]
  }'

Akışı okuma

Yanıt bir text/event-stream akışıdır. Her çerçeve, data: ile başlayıp JSON ile devam eden bir satırdır ve akış data: [DONE] ile biter. Çerçeveler asistan çalıştırma olaylarıdır. Göstereceğiniz yanıt, on_chain_stream adlı olaylarda, data.chunk içinde gelir:

  • type: printable, yanıt metnini content içinde taşır. is_thinking değeri true olan parçaları atlayın.
  • type: tool, yapılandırılmış bir sonucu artifact içinde, artifact.type ve artifact.data ile taşır; örneğin ürün kartları ya da önerilen sonraki sorular.
  • Diğer tüm olayları yok sayabilirsiniz.

Bir yanıt, her olay kısaltılmış hâliyle şöyle görünür:

data: {"event": "on_chain_stream", "data": {"chunk": {"type": "printable", "content": "Your order left "}}, ...}
data: {"event": "on_chain_stream", "data": {"chunk": {"type": "printable", "content": "our warehouse today."}}, ...}
data: [DONE]

Asistan yanıtın ortasında hata verirse akış önce printable metin olarak kısa bir özür gönderir, ardından data.error ve data.error_code içeren bir error olayı, sonra da [DONE] gelir. Model sağlayıcısı yoğunsa kod rate_limit_exceeded olur (kısa süre sonra yeniden deneyin), aksi hâlde internal_error olur.

Node.js 18 ve sonrası için en küçük bir okuyucu:

const res = await fetch("https://api.harmona.ai/b2c/v1/chat", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.HARMONA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    external_user_id: "customer-4821",
    messages: [{ role: "user", content: "Where is my order?" }],
  }),
});
if (!res.ok) throw new Error(`Harmona ${res.status}: ${await res.text()}`);

const decoder = new TextDecoder();
let buffer = "";
for await (const bytes of res.body) {
  buffer += decoder.decode(bytes, { stream: true });
  const frames = buffer.split("\n\n");
  buffer = frames.pop();
  for (const frame of frames) {
    const payload = frame.replace(/^data: /, "");
    if (payload === "[DONE]") continue;
    const evt = JSON.parse(payload);
    const chunk = evt.data?.chunk;
    if (evt.event === "on_chain_stream" && chunk?.type === "printable" && !chunk.is_thinking) {
      process.stdout.write(chunk.content);
    }
    if (evt.event === "error") console.error(evt.data.error_code);
  }
}

Konuşmalar ve geçmiş

  • GET /chat/rooms?external_user_id=… her konuşmanın room_id, room_name, created_at ve updated_at değerlerini döndürür.
  • GET /chat/messages?external_user_id=… geçmişi döndürür. Belirli bir konuşma için room_id, sayfalama için limit (1–200, varsayılan 50) ve offset ekleyin.
  • GET /chat/handoff?external_user_id=… agent_name ve messages döndürür; messages, role (human ya da ai) ve content alanlarından oluşan düz bir listedir. Araç adımları dahil edilmez; bu yüzden listeyi doğrudan bir destek temsilcisine iletebilirsiniz.

Hatalar

Hata yanıtları, detail mesajı içeren JSON'dır. Çoğu bir error_code da taşır. Mesaja göre değil, koda göre dallanın: mesaj İngilizcedir ve değişebilir.

{
  "detail": "…",
  "error_code": "usage_limit_exceeded"
}
Durumerror_codeAnlamı
400validation_errorGövde geçersiz; örneğin son mesaj kullanıcıdan gelmiyor.
401yokAnahtar eksik, yanlış, süresi dolmuş ya da silinmiş veya asistanın API erişimi kapalı.
402usage_limit_exceededÇalışma alanı kredilerini bitirdi ya da kullanım eşiğine ulaştı.
402subscription_past_dueBir kart ödemesi başarısız oldu ve hâlâ açık. 1., 3. ve 7. günlerde otomatik olarak yeniden denenir.
402subscription_inactiveAbonelik askıya alındı ya da iptal edildi.
402trial_expiredÇalışma alanının ücretsiz denemesi sona erdi.
404room_not_foundroom_id mevcut değil ya da başka bir asistana ait.
409yokAsistan şu anda sohbet edemiyor. Modelini ve talimatlarını kontrol edin.
503yokGeçici bir sorun. Yeniden deneyin.

402 hatalarını ele alma

402 hatasını otomatik olarak yeniden denemeyin: biri harekete geçene kadar başarılı olmaz. Kullanıcılarınıza tarafsız bir mesaj gösterin ve kendi ekibinizi uyarın. Çalışma alanının Sahibi sorunu kredi satın alarak, eşiği yükselterek ya da aboneliği düzelterek çözer; bkz. Planlar ve krediler.

Güncellendi 2026-09-24