Ses API
Ses modülünün tüm işlemleri (22) ve veri modelleri (3): adresler, izinler, girdiler, ön koşullar, olaylar ve örnekler.
Era’larınız telefonu ve web sitenizi sesle yanıtlar, randevu verir, mesaj alır ve her aramayı Gelen kutusuna kaydeder.
Modül kodu voice · 22 işlem · 3 veri modeli · 13 olay. Bir anahtar ya da token, arkasındaki kişinin bu modülde yapabildiğinden fazlasını asla yapamaz; satır düzeyindeki güvenlik uygulamadakiyle birebir aynıdır. Yetki kapsamları: voice (hepsi), voice:read (yalnız okuma) ya da voice:<yetenek>.
Kaynaklar
| Kaynak | Tablo | Listeleme ve okuma | POST | PATCH | DELETE |
|---|---|---|---|---|---|
voice_agents | voice_agent | /api/v1/voice_agents | voice.update | ||
voice_calls | voice_call | /api/v1/voice_calls | |||
voice_whatsapp_lines | voice_whatsapp_line | /api/v1/voice_whatsapp_lines |
Listeler limit (en çok 200), cursor, order (ör. -created_at), fields ve q alır; diğer her sorgu parametresi bir sütun süzgecidir: ?status=paid, ?total[gte]=100, ?id[in]=a,b, ?x=null.
İşlemler
| İşlem | Gereken izin | Ne yapar |
|---|---|---|
voice.answer_permission | voice:handle | Müşteri arama iznini yanıtladı |
voice.await_permission | voice:handle | Müşterinin arama iznini bekle |
voice.complete_call | voice:handle | Biten aramayı kaydet |
voice.connect_whatsapp | voice:manage | WhatsApp aramalarını yanıtla |
voice.connect_whatsapp_call | voice:handle | Era bir WhatsApp aramasını açtı |
voice.decide_whatsapp_call | voice:write | Çalan WhatsApp aramasını Era açsın ya da çalsın |
voice.enable | voice:manage | Bir Era’ya ses ver |
voice.fail_call | voice:handle | Arama gerçekleşmedi |
voice.mark_dialed | voice:handle | Arama yapıldı |
voice.open_call | voice:handle | Bir arama başladı |
voice.record_sync | voice:handle | Ses sağlayıcısının yanıtını kaydet |
voice.record_turn | voice:handle | Era’nın aramada yaptığını kaydet |
voice.record_whatsapp | voice:handle | WhatsApp aramalarının durumunu kaydet |
voice.remove | voice:delete | Era’nın sesini kaldır |
voice.set_enabled | voice:manage | Era’nın sesini aç/kapat |
voice.set_outcome | voice:write | Aramanın sonucunu düzelt |
voice.set_whatsapp_line | voice:manage | WhatsApp aramalarını bilgisayarımda aç |
voice.start_call | voice:write | Ara (sesli ajanla) |
voice.start_whatsapp_call | voice:write | WhatsApp’tan ara (sesli ajan ile) |
voice.take_over_whatsapp_call | voice:write | WhatsApp aramasını Era’dan devral |
voice.update | voice:manage | Era’nın sesini değiştir |
voice.whatsapp_ring | voice:handle | Bilgisayarda bir WhatsApp araması çalıyor |
voice.answer_permission
Müşteri arama iznini yanıtladı — İzin verdi: arama hemen yapılır. Vermedi: arama iptal olur, ücret alınmaz. Yalnız sistem.
Gereken izin voice:handle · veriyi değiştirir
403 machine_only).https://app.getera.io/api/v1/voice_calls/{id}/actions/answer_permission- Asıl adres:
POST /api/v1/actions/voice.answer_permission
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
granted | boolean | evet | İzin verildi |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_awaiting | Yanıtı yalnızca izin bekleyen bir arama alır. |
Yayımladığı olaylar: voice.call_missed
Neye yazar: voice_call (update) — awaiting → queued (allowed) or cancelled (declined, released)
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_awaiting · 429 çok sık istek
voice.await_permission
Müşterinin arama iznini bekle — WhatsApp, işletmenin yalnızca izin veren kişiyi aramasına izin verir: istek gitti, arama yanıtı bekliyor. Yalnız sistem.
Gereken izin voice:handle · veriyi değiştirir
403 machine_only).https://app.getera.io/api/v1/voice_calls/{id}/actions/await_permission- Asıl adres:
POST /api/v1/actions/voice.await_permission
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
requestId | string | İzin isteği mesajı · en çok 200 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_queued | Yalnızca sıradaki bir WhatsApp araması izin bekler. |
Neye yazar: voice_call (update) — queued → awaiting permission
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_queued · 429 çok sık istek
voice.complete_call
Biten aramayı kaydet — Döküm, özet, sonuç ve süreyi yazar, gerçek dakikaları kendi ses anahtarına ölçer ve iş akışlarına haber verir. Yalnızca sistem.
Gereken izin voice:handle · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
403 machine_only).https://app.getera.io/api/v1/voice_calls/{id}/actions/complete_call- Asıl adres:
POST /api/v1/actions/voice.complete_call
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
transcript | object / array | Döküm | |
summary | string | Özet · en çok 4000 | |
durationSec | number | evet | Süre (saniye) · en az 0 · en çok 14400 |
endReason | string | Nasıl bitti · en çok 200 | |
transferred | boolean | Bir kişiye aktarıldı | |
externalId | string | Sağlayıcı araması · en çok 120 | |
fromNumber | string | Nereden · en çok 40 | |
toNumber | string | Bitiş · en çok 40 | |
conversationId | uuid | Gelen kutusu konuşması · kimliği: conversation | |
customerId | uuid | Müşteri · kimliği: customer | |
recording | boolean | Kaydı var | |
recordingFileId | uuid | Kayıt dosyası | |
language | string | Dil · en çok 8 | |
providerActions | object / array | Sağlayıcı işlemleri |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
call_not_found | Bu arama bulunamadı. |
call_finished | Bu arama zaten kaydedilmiş. |
Yayımladığı olaylar: voice.call_finished, voice.appointment_booked, voice.lead_captured, voice.message_taken, voice.transfer_requested, voice.whatsapp_call_finished
Neye yazar: voice_call (update) — → completed, with transcript, outcome and cost
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 call_not_found, call_finished · 429 çok sık istek
voice.connect_whatsapp
WhatsApp aramalarını yanıtla — Era, WhatsApp Business numarana gelen sesli aramaları da yanıtlar ve her aramayı o müşterinin WhatsApp sohbetine kaydeder.
Gereken izin voice:manage · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
https://app.getera.io/api/v1/voice_agents/{id}/actions/connect_whatsapp- Asıl adres:
POST /api/v1/actions/voice.connect_whatsapp
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Ses · kimliği: voice_agent |
inboxId | uuid | WhatsApp numarası (Gelen Kutusu kanalı) · kimliği: inbox |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
voice_not_found | Bu ses bulunamadı. |
inbox_not_whatsapp | Aramalar etkin bir WhatsApp Cloud API kanalına gelir. |
whatsapp_taken | Bir WhatsApp numarasını tek bir Era yanıtlar. |
Yayımladığı olaylar: voice.agent_changed
Neye yazar: voice_agent (update) — Points the WhatsApp line at the Era (pending until Meta and the voice provider take it)
curl -X POST https://app.getera.io/api/v1/voice_agents/VOICE_AGENT_ID/actions/connect_whatsapp \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"inboxId":"INBOX_ID"}'{
"ok": true,
"result": "…",
"events": [
"voice.agent_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceAgents.connectWhatsapp("VOICE_AGENT_ID", {
inboxId: "INBOX_ID"
})era voice_agents connect_whatsapp VOICE_AGENT_ID \
--inbox-id "INBOX_ID"{
"name": "era__voice__connect_whatsapp",
"arguments": {
"id": "VOICE_AGENT_ID",
"inboxId": "INBOX_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 voice_not_found, inbox_not_whatsapp, whatsapp_taken · 429 çok sık istek
voice.connect_whatsapp_call
Era bir WhatsApp aramasını açtı — Bilgisayar WhatsApp aramasını açtı (ya da yaptı) ve ses bağlandı — dakikalar ve ödeme önce kontrol edilir. Yalnızca sistem.
Gereken izin voice:handle · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
403 machine_only).https://app.getera.io/api/v1/voice_calls/{id}/actions/connect_whatsapp_call- Asıl adres:
POST /api/v1/actions/voice.connect_whatsapp_call
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
deviceId | uuid | Bilgisayar |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_ringing | Yalnızca bekleyen bir WhatsApp araması, bir kez bağlanır. |
wrong_computer | Aramayı, arama kendisinde olan bilgisayar bağlar. |
voice_not_found | Konuşan Era’nın bir sesi olmalı. |
voice_off | Ses kapalı; önce açın. |
minutes_used_up | Bu ayın arama dakikaları doldu. |
no_source | Dakikaların ödenebileceği bir kaynak gerekiyor. |
budget_exceeded | Yapay zekâ bütçesi doldu. |
Yayımladığı olaylar: voice.call_started
Neye yazar: voice_call (update) — queued → in progress, with its reservation
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_ringing, wrong_computer, voice_not_found, voice_off, minutes_used_up, no_source, budget_exceeded · 429 çok sık istek
voice.decide_whatsapp_call
Çalan WhatsApp aramasını Era açsın ya da çalsın — Bilgisayarında bir WhatsApp araması çalarken: Era açar ya da senin için çalmaya devam eder. “WhatsApp araması çalıyor” iş akışları da bunu kullanır.
Gereken izin voice:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
https://app.getera.io/api/v1/voice_calls/{id}/actions/decide_whatsapp_call- Asıl adres:
POST /api/v1/actions/voice.decide_whatsapp_call
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
answer | boolean | evet | Era yanıtlasın |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_ringing | Yalnızca çalmakta olan bir WhatsApp araması için karar verilir. |
Neye yazar: voice_call (update) — Writes the decision; a call left to ring is closed without cost
curl -X POST https://app.getera.io/api/v1/voice_calls/VOICE_CALL_ID/actions/decide_whatsapp_call \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"answer":true}'{
"ok": true,
"result": "…",
"events": []
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceCalls.decideWhatsappCall("VOICE_CALL_ID", {
answer: true
})era voice_calls decide_whatsapp_call VOICE_CALL_ID \
--answer true{
"name": "era__voice__decide_whatsapp_call",
"arguments": {
"id": "VOICE_CALL_ID",
"answer": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_ringing · 429 çok sık istek
voice.enable
Bir Era’ya ses ver — Bir Era telefonunu, web sitesindeki ses butonunu ve uygulamada seni yanıtlar — seçtiğin ses, karşılama, saatler ve yeteneklerle.
Gereken izin voice:manage · veriyi değiştirir
https://app.getera.io/api/v1/voice_agents/actions/enable- Asıl adres:
POST /api/v1/actions/voice.enable
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
agentId | uuid | evet | Era · kimliği: ai_agent |
inboxId | uuid | evet | Telefon hattı (Gelen kutusu kanalı) · kimliği: inbox |
voiceId | string | Ses · en çok 120 | |
voiceName | string | Ses adı · en çok 120 | |
language | string | Dil · en çok 8 | |
greeting | string | Karşılama · en çok 600 | |
persona | string | Üslup · en çok 4000 | |
afterHours | string (enum) | Çalışma saatleri dışında · İzin verilen değerler: answer, take_message, transfer, closed_message | |
afterHoursMessage | string | Kapalı mesajı · en çok 600 | |
transferNumber | string | Aktarma numarası · en çok 32 | |
tools | object / array | Neler yapabilir · check_availability, book_appointment, cancel_appointment, order_status, capture_lead, answer_question, take_message, transfer_to_human | |
approvalTools | object / array | Önce bana sor | |
knowledgeBaseIds | object / array | Bilgi alanları | |
maxCallMinutes | number | En uzun görüşme (dakika) · en az 1 · en çok 60 | |
widgetEnabled | boolean | Web sitemde ses butonu | |
widgetSiteId | uuid | Web sitesi · kimliği: site | |
widgetLabel | string | Düğme yazısı · en çok 60 | |
appEnabled | boolean | Uygulamada onunla konuş | |
outboundEnabled | boolean | Arama yapabilir | |
disclosureEnabled | boolean | Yapay zekâ olduğunu ve görüşmenin kaydedildiğini söyle | |
confirmBooking | boolean | Randevudan sonra WhatsApp/SMS ile teyit gönder |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
agent_not_found | Bu Era bulunamadı. |
already_has_voice | Bu Era’nın zaten bir sesi var. |
inbox_not_voice | Aramalar etkin bir sesli kanala gelmeli. |
inbox_taken | Bu hattı zaten başka bir Era yanıtlıyor. |
unknown_tool | Her yetenek, sesli Era’nın sahip olduğu bir yetenek olmalı. |
bad_transfer_number | Aktarım numarası, ülke koduyla birlikte tam bir telefon numarası olmalı. |
transfer_needs_number | Aramaları aktarmak için bir aktarma numarası gerekir. |
unknown_language | Dil, sesin konuşabildiği dillerden biri olmalı. |
unknown_knowledge_base | Bilgi bankaları kimlikleriyle seçilmeli. |
site_not_found | Web sitesi bu çalışma alanına ait olmalı. |
Yayımladığı olaylar: voice.agent_changed
Neye yazar: voice_agent (insert) — Writes the voice, switched off until it is ready
curl -X POST https://app.getera.io/api/v1/voice_agents/actions/enable \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"agentId":"AI_AGENT_ID","inboxId":"INBOX_ID"}'{
"ok": true,
"result": "…",
"events": [
"voice.agent_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceAgents.enable({
agentId: "AI_AGENT_ID",
inboxId: "INBOX_ID"
})era voice_agents enable \
--agent-id "AI_AGENT_ID" \
--inbox-id "INBOX_ID"{
"name": "era__voice__enable",
"arguments": {
"agentId": "AI_AGENT_ID",
"inboxId": "INBOX_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 agent_not_found, already_has_voice, inbox_not_voice, inbox_taken, unknown_tool, bad_transfer_number, transfer_needs_number, unknown_language, unknown_knowledge_base, site_not_found · 429 çok sık istek
voice.fail_call
Arama gerçekleşmedi — Meşgul, cevap yok ya da başarısız: hiçbir şey ölçülmez, cevapsız arama takip edilebilir. Yalnızca sistem.
Gereken izin voice:handle · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
403 machine_only).https://app.getera.io/api/v1/voice_calls/{id}/actions/fail_call- Asıl adres:
POST /api/v1/actions/voice.fail_call
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
status | string | evet | Ne oldu · en çok 12 |
reason | string | Neden · en çok 600 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
call_finished | Bu arama zaten kaydedilmiş. |
invalid_state | Durum cevapsız, başarısız ya da iptal olmalı. |
Yayımladığı olaylar: voice.call_missed
Neye yazar: voice_call (update) — → missed / failed / cancelled, released
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 call_finished, invalid_state · 429 çok sık istek
voice.mark_dialed
Arama yapıldı — Sağlayıcı numarayı çaldırıyor. Yalnızca sistem.
Gereken izin voice:handle · veriyi değiştirir
403 machine_only).https://app.getera.io/api/v1/voice_calls/{id}/actions/mark_dialed- Asıl adres:
POST /api/v1/actions/voice.mark_dialed
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
externalId | string | evet | Sağlayıcı araması · en çok 120 |
callSid | string | Telefon sistemi kimliği · en çok 120 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_queued | Yalnızca sırada bekleyen bir arama, bir kez aranabilir. |
Neye yazar: voice_call (update) — queued → in progress
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_queued · 429 çok sık istek
voice.open_call
Bir arama başladı — Arama başladığı anda kaydedilir — telefon, web butonu ya da uygulama — dakika ve para kontrolünden sonra. Yalnızca sistem.
Gereken izin voice:handle · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
403 machine_only).https://app.getera.io/api/v1/voice_calls/actions/open_call- Asıl adres:
POST /api/v1/actions/voice.open_call
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
voiceAgentId | uuid | evet | Ses · kimliği: voice_agent |
channel | string (enum) | evet | Kanal · İzin verilen değerler: phone, widget, app, whatsapp |
bridge | string | Era’ya nasıl ulaştı · en çok 20 | |
waCallId | string | WhatsApp araması · en çok 200 | |
direction | string (enum) | Yön · İzin verilen değerler: inbound, outbound | |
fromNumber | string | Nereden · en çok 40 | |
toNumber | string | Bitiş · en çok 40 | |
externalId | string | Sağlayıcı araması · en çok 120 | |
callSid | string | Telefon sistemi kimliği · en çok 120 | |
principalUserId | uuid | Konuşan üye | |
practice | boolean | Deneme araması |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
voice_not_found | Bu ses bulunamadı. |
voice_off | Ses kapalı; önce açın. |
channel_off | Orada arama için web sitesi düğmesi ya da uygulama içi ses açık olmalı. |
unknown_bridge | Aramanın Era’ya ulaştığı yol bilinen bir yol olmalı. |
minutes_used_up | Bu ayın arama dakikaları doldu. |
no_source | Çalışma alanının kendi ses anahtarı bunu çalıştırabilmeli. |
budget_exceeded | Yapay zekâ bütçesi doldu. |
Yayımladığı olaylar: voice.call_started
Neye yazar: voice_call (insert) — Opens the call
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 voice_not_found, voice_off, channel_off, unknown_bridge, minutes_used_up, no_source, budget_exceeded · 429 çok sık istek
voice.record_sync
Ses sağlayıcısının yanıtını kaydet — Sağlayıcı Era’nın sesini ve numarasını aldı (ya da reddetti). Yalnızca sistem.
Gereken izin voice:handle · veriyi değiştirir
403 machine_only).https://app.getera.io/api/v1/voice_agents/{id}/actions/record_sync- Asıl adres:
POST /api/v1/actions/voice.record_sync
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Ses · kimliği: voice_agent |
status | string | evet | Durum · en çok 10 |
externalAgentId | string | Sağlayıcı ajanı · en çok 120 | |
externalPhoneId | string | Sağlayıcı numarası · en çok 120 | |
voiceId | string | Ses · en çok 120 | |
error | string | Neden · en çok 600 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
voice_not_found | Bu ses bulunamadı. |
invalid_state | Eşitleme ya başarılı ya başarısızdır. |
Yayımladığı olaylar: voice.sync_failed
Neye yazar: voice_agent (update) — Writes the provider ids and the sync state
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 voice_not_found, invalid_state · 429 çok sık istek
voice.record_turn
Era’nın aramada yaptığını kaydet — Bir yanıtın işlemlerini arama günlüğüne ekler ve kısa hafızasını tutar. Yalnızca sistem.
Gereken izin voice:handle · veriyi değiştirir
403 machine_only).https://app.getera.io/api/v1/voice_calls/{id}/actions/record_turn- Asıl adres:
POST /api/v1/actions/voice.record_turn
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
actions | object / array | Eylemler | |
memory | object / array | Çalışma hafızası | |
externalId | string | Sağlayıcı araması · en çok 120 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
call_not_open | Yalnızca süren bir aramaya yeni işlem eklenebilir. |
Neye yazar: voice_call (update) — Appends actions, replaces memory
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 call_not_open · 429 çok sık istek
voice.record_whatsapp
WhatsApp aramalarının durumunu kaydet — Meta ve ses sağlayıcısı kurulumu aldı ya da reddetti. Yalnız sistem.
Gereken izin voice:handle · veriyi değiştirir
403 machine_only).https://app.getera.io/api/v1/voice_agents/{id}/actions/record_whatsapp- Asıl adres:
POST /api/v1/actions/voice.record_whatsapp
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Ses · kimliği: voice_agent |
status | string | evet | Durum · en çok 10 |
externalPhoneId | string | Sağlayıcı numarası · en çok 120 | |
error | string | Neden · en çok 600 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
voice_not_found | Bu ses bulunamadı. |
invalid_state | Açık, kapalı ya da başarısız. |
Yayımladığı olaylar: voice.sync_failed
Neye yazar: voice_agent (update) — Writes the WhatsApp line state and the provider number id
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 voice_not_found, invalid_state · 429 çok sık istek
voice.remove
Era’nın sesini kaldır — Era aramaları yanıtlamayı bırakır. Arama geçmişi kalır.
Gereken izin voice:delete · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/voice_agents/{id}/actions/remove- Asıl adres:
POST /api/v1/actions/voice.remove
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Ses · kimliği: voice_agent |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
voice_not_found | Bu ses bulunamadı. |
Yayımladığı olaylar: voice.agent_changed
Neye yazar: voice_agent (delete) — Deletes the voice; calls keep their history
curl -X POST https://app.getera.io/api/v1/voice_agents/VOICE_AGENT_ID/actions/remove \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"voice.agent_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceAgents.remove("VOICE_AGENT_ID")era voice_agents remove VOICE_AGENT_ID{
"name": "era__voice__remove",
"arguments": {
"id": "VOICE_AGENT_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:delete izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 voice_not_found · 429 çok sık istek
voice.set_enabled
Era’nın sesini aç/kapat — Açık: aramaları yanıtlar. Kapalı: Era yanıtlamaz; hiçbir şey kaybolmaz.
Gereken izin voice:manage · veriyi değiştirir
https://app.getera.io/api/v1/voice_agents/{id}/actions/set_enabled- Asıl adres:
POST /api/v1/actions/voice.set_enabled
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Ses · kimliği: voice_agent |
enabled | boolean | evet | Açık |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
voice_not_found | Bu ses bulunamadı. |
no_voice | Açmadan önce bir ses seçin. |
inbox_not_voice | Açmadan önce bir hat seçin. |
Yayımladığı olaylar: voice.agent_changed
Neye yazar: voice_agent (update) — Flips the switch
curl -X POST https://app.getera.io/api/v1/voice_agents/VOICE_AGENT_ID/actions/set_enabled \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"enabled":true}'{
"ok": true,
"result": "…",
"events": [
"voice.agent_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceAgents.setEnabled("VOICE_AGENT_ID", {
enabled: true
})era voice_agents set_enabled VOICE_AGENT_ID \
--enabled true{
"name": "era__voice__set_enabled",
"arguments": {
"id": "VOICE_AGENT_ID",
"enabled": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 voice_not_found, no_voice, inbox_not_voice · 429 çok sık istek
voice.set_outcome
Aramanın sonucunu düzelt — Era aramayı yanlış okuduysa — aslında randevuydu, potansiyel müşteriydi, mesajdı.
Gereken izin voice:write · veriyi değiştirir
https://app.getera.io/api/v1/voice_calls/{id}/actions/set_outcome- Asıl adres:
POST /api/v1/actions/voice.set_outcome
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
outcome | string (enum) | evet | Sonuç · İzin verilen değerler: booked, cancelled, lead, message, answered, transferred, no_action, failed |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
call_not_finished | Yalnızca bitmiş bir arama düzeltilebilir. |
Neye yazar: voice_call (update) — Writes the outcome
curl -X POST https://app.getera.io/api/v1/voice_calls/VOICE_CALL_ID/actions/set_outcome \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"outcome":"booked"}'{
"ok": true,
"result": "…",
"events": []
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceCalls.setOutcome("VOICE_CALL_ID", {
outcome: "booked"
})era voice_calls set_outcome VOICE_CALL_ID \
--outcome "booked"{
"name": "era__voice__set_outcome",
"arguments": {
"id": "VOICE_CALL_ID",
"outcome": "booked"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 call_not_finished · 429 çok sık istek
voice.set_whatsapp_line
WhatsApp aramalarını bilgisayarımda aç — Era bilgisayarındaki WhatsApp’a gelen sesli aramaları açar — hangileri, kaç saniye sonra ve senin yerine arama yapıp yapamayacağı. Telefon numarası gerekmez.
Gereken izin voice:manage · veriyi değiştirir
https://app.getera.io/api/v1/voice_whatsapp_lines/actions/set_whatsapp_line- Asıl adres:
POST /api/v1/actions/voice.set_whatsapp_line
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
voiceAgentId | uuid | evet | Konuşan Era · kimliği: voice_agent |
deviceId | uuid | Bilgisayar · WhatsApp’ını yanıtladığı Era Desktop; boş = senin herhangi biri. | |
enabled | boolean | Açık | |
answerRule | string (enum) | Hangi aramalar · İzin verilen değerler: all, unknown, contacts, in_hours, after_hours, workflow | |
ringSeconds | number | Önce çalsın (saniye) · en az 0 · en çok 40 | |
ownerName | string | Era kimin asistanı olduğunu söylesin · en çok 120 | |
outboundEnabled | boolean | Benim yerime insanları arayabilir | |
answerVideo | boolean | Görüntülü aramaları da aç (yalnız ses) |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
voice_not_found | Konuşan Era’nın burada bir sesi olmalı. |
Neye yazar: voice_whatsapp_line (upsert) — Writes the workspace’s one WhatsApp-on-the-computer line
curl -X POST https://app.getera.io/api/v1/voice_whatsapp_lines/actions/set_whatsapp_line \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"voiceAgentId":"VOICE_AGENT_ID"}'{
"ok": true,
"result": "…",
"events": []
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceWhatsappLines.setWhatsappLine({
voiceAgentId: "VOICE_AGENT_ID"
})era voice_whatsapp_lines set_whatsapp_line \
--voice-agent-id "VOICE_AGENT_ID"{
"name": "era__voice__set_whatsapp_line",
"arguments": {
"voiceAgentId": "VOICE_AGENT_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 voice_not_found · 429 çok sık istek
voice.start_call
Ara (sesli ajanla) — Era bir müşteriyi şimdi arar — telefonla ya da WhatsApp’tan (gerekirse önce müşteriden izin ister): randevu teyidi, potansiyel müşteri takibi, siparişin hazır olduğu. Dakikalar önce kontrol edilip ayrılır.
Gereken izin voice:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır) · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/voice_calls/actions/start_call- Asıl adres:
POST /api/v1/actions/voice.start_call
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
voiceAgentId | uuid | evet | Era · kimliği: voice_agent |
to | string | evet | Sayı · Nasıl yazılırsa yazılsın: 0532 123 45 67 veya +90… · en çok 40 |
purpose | string | Arama ne için · en çok 1000 | |
customerId | uuid | Müşteri · kimliği: customer | |
channel | string (enum) | Nereden aransın · İzin verilen değerler: phone, whatsapp |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
voice_not_found | Bu ses bulunamadı. |
voice_off | Ses kapalı; önce açın. |
outbound_off | Bu Era’nın arama yapmasına izin verilmemiş. |
bad_number | Bu numara aranamıyor. |
no_phone_line | Arama yapmak için bağlı bir numara gerekiyor. |
whatsapp_calling_off | WhatsApp araması için bu Era’da WhatsApp aramalarının açık olması gerekir. |
minutes_used_up | Bu ayın arama dakikaları doldu. |
outbound_limit | Günlük giden arama sınırına ulaşıldı. |
no_source | Çalışma alanının kendi ses anahtarı bunu çalıştırabilmeli. |
budget_exceeded | Yapay zekâ bütçesi doldu. |
Yayımladığı olaylar: voice.call_started
Neye yazar: voice_call (insert) — Queues the call
curl -X POST https://app.getera.io/api/v1/voice_calls/actions/start_call \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"voiceAgentId":"VOICE_AGENT_ID","to":"Number"}'{
"ok": true,
"result": "…",
"events": [
"voice.call_started"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceCalls.startCall({
voiceAgentId: "VOICE_AGENT_ID",
to: "Number"
})era voice_calls start_call \
--voice-agent-id "VOICE_AGENT_ID" \
--to "Number"{
"name": "era__voice__start_call",
"arguments": {
"voiceAgentId": "VOICE_AGENT_ID",
"to": "Number"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 voice_not_found, voice_off, outbound_off, bad_number, no_phone_line, whatsapp_calling_off, minutes_used_up, outbound_limit, no_source, budget_exceeded · 429 çok sık istek
voice.start_whatsapp_call
WhatsApp’tan ara (sesli ajan ile) — Era bilgisayarındaki WhatsApp’tan birini arar, istediğin konuyu konuşur, kapatır ve nasıl geçtiğini anlatır — özet, sonuç, konuşma metni.
Gereken izin voice:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
https://app.getera.io/api/v1/voice_calls/actions/start_whatsapp_call- Asıl adres:
POST /api/v1/actions/voice.start_whatsapp_call
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
to | string | Sayı · Nasıl yazılırsa yazılsın: 0532 123 45 67 veya +90… · en çok 40 | |
customerId | uuid | Müşteri · kimliği: customer | |
name | string | Ad · en çok 120 | |
goal | string | evet | Ne konuşulsun · ör. “Perşembe yerine cuma saat 3’te gelip gelemeyeceğini sor.” · en çok 1000 |
script | string | Değinilecek noktalar · en çok 2000 | |
exact | boolean | Tam olarak bu WhatsApp sohbeti · Ad, kişinin Era’nın seçeneklerinden seçtiği sohbettir. | |
threadId | string | Era sohbeti · Arama bitince Era’nın sonucu bildireceği yer. · en çok 200 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
whatsapp_line_off | Era bir bilgisayarda WhatsApp için kurulmuş olmalı. |
whatsapp_outbound_off | Era’nın WhatsApp araması yapmasına izin verilmiş olmalı. |
no_one_to_call | Bir WhatsApp adı, numara ya da müşteri gerekir. |
bad_number | Bu numara aranamıyor. |
voice_not_found | Konuşan Era’nın bir sesi olmalı. |
voice_off | Ses kapalı; önce açın. |
minutes_used_up | Bu ayın arama dakikaları doldu. |
outbound_limit | Günlük giden arama sınırına ulaşıldı. |
no_source | Dakikaların ödenebileceği bir kaynak gerekiyor. |
budget_exceeded | Yapay zekâ bütçesi doldu. |
Yayımladığı olaylar: voice.whatsapp_call_requested
Neye yazar: voice_call (insert) — Queues the call for the computer, with its reservation
curl -X POST https://app.getera.io/api/v1/voice_calls/actions/start_whatsapp_call \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"goal":"What to talk about"}'{
"ok": true,
"result": "…",
"events": [
"voice.whatsapp_call_requested"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceCalls.startWhatsappCall({
goal: "What to talk about"
})era voice_calls start_whatsapp_call \
--goal "What to talk about"{
"name": "era__voice__start_whatsapp_call",
"arguments": {
"goal": "What to talk about"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 whatsapp_line_off, whatsapp_outbound_off, no_one_to_call, bad_number, voice_not_found, voice_off, minutes_used_up, outbound_limit, no_source, budget_exceeded · 429 çok sık istek
voice.take_over_whatsapp_call
WhatsApp aramasını Era’dan devral — “Devral”: Era susar ve aramanın sesi bilgisayardaki kendi mikrofonuna ve hoparlörüne döner.
Gereken izin voice:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
https://app.getera.io/api/v1/voice_calls/{id}/actions/take_over_whatsapp_call- Asıl adres:
POST /api/v1/actions/voice.take_over_whatsapp_call
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Arama · kimliği: voice_call |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
call_not_live | Yalnızca şu an süren bir WhatsApp araması, bir kez devralınır. |
Yayımladığı olaylar: voice.whatsapp_takeover
Neye yazar: voice_call (update) — Marks the moment; the computer hands the sound back
curl -X POST https://app.getera.io/api/v1/voice_calls/VOICE_CALL_ID/actions/take_over_whatsapp_call \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"voice.whatsapp_takeover"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceCalls.takeOverWhatsappCall("VOICE_CALL_ID")era voice_calls take_over_whatsapp_call VOICE_CALL_ID{
"name": "era__voice__take_over_whatsapp_call",
"arguments": {
"id": "VOICE_CALL_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 call_not_live · 429 çok sık istek
voice.update
Era’nın sesini değiştir — Ses, karşılama, dil, çalışma saatleri dışı davranış, aktarma numarası, yetenekler, bilgi ve nerede cevap verdiği.
Gereken izin voice:manage · veriyi değiştirir
https://app.getera.io/api/v1/voice_agents/{id}/actions/update- REST kısayolu:
PATCH /api/v1/voice_agents/{id} - Asıl adres:
POST /api/v1/actions/voice.update
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Ses · kimliği: voice_agent |
inboxId | uuid | Telefon hattı (Gelen kutusu kanalı) · kimliği: inbox | |
voiceId | string | Ses · en çok 120 | |
voiceName | string | Ses adı · en çok 120 | |
language | string | Dil · en çok 8 | |
greeting | string | Karşılama · en çok 600 | |
persona | string | Üslup · en çok 4000 | |
afterHours | string (enum) | Çalışma saatleri dışında · İzin verilen değerler: answer, take_message, transfer, closed_message | |
afterHoursMessage | string | Kapalı mesajı · en çok 600 | |
transferNumber | string | Aktarma numarası · en çok 32 | |
tools | object / array | Neler yapabilir · check_availability, book_appointment, cancel_appointment, order_status, capture_lead, answer_question, take_message, transfer_to_human | |
approvalTools | object / array | Önce bana sor | |
knowledgeBaseIds | object / array | Bilgi alanları | |
maxCallMinutes | number | En uzun görüşme (dakika) · en az 1 · en çok 60 | |
widgetEnabled | boolean | Web sitemde ses butonu | |
widgetSiteId | uuid | Web sitesi · kimliği: site | |
widgetLabel | string | Düğme yazısı · en çok 60 | |
appEnabled | boolean | Uygulamada onunla konuş | |
outboundEnabled | boolean | Arama yapabilir | |
disclosureEnabled | boolean | Yapay zekâ olduğunu ve görüşmenin kaydedildiğini söyle | |
confirmBooking | boolean | Randevudan sonra WhatsApp/SMS ile teyit gönder |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
voice_not_found | Bu ses bulunamadı. |
inbox_not_voice | Aramalar etkin bir sesli kanala gelmeli. |
inbox_taken | Bu hattı zaten başka bir Era yanıtlıyor. |
unknown_tool | Her yetenek, sesli Era’nın sahip olduğu bir yetenek olmalı. |
bad_transfer_number | Aktarım numarası, ülke koduyla birlikte tam bir telefon numarası olmalı. |
transfer_needs_number | Aramaları aktarmak için bir aktarma numarası gerekir. |
unknown_language | Dil, sesin konuşabildiği dillerden biri olmalı. |
unknown_knowledge_base | Bilgi bankaları kimlikleriyle seçilmeli. |
site_not_found | Web sitesi bu çalışma alanına ait olmalı. |
Yayımladığı olaylar: voice.agent_changed
Neye yazar: voice_agent (update) — Writes the settings and marks the provider copy for re-sync
curl -X POST https://app.getera.io/api/v1/voice_agents/VOICE_AGENT_ID/actions/update \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"inboxId":"INBOX_ID"}'{
"ok": true,
"result": "…",
"events": [
"voice.agent_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.voiceAgents.update("VOICE_AGENT_ID", {
inboxId: "INBOX_ID"
})era voice_agents update VOICE_AGENT_ID \
--inbox-id "INBOX_ID"{
"name": "era__voice__update",
"arguments": {
"id": "VOICE_AGENT_ID",
"inboxId": "INBOX_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 voice_not_found, inbox_not_voice, inbox_taken, unknown_tool, bad_transfer_number, transfer_needs_number, unknown_language, unknown_knowledge_base, site_not_found · 429 çok sık istek
voice.whatsapp_ring
Bilgisayarda bir WhatsApp araması çalıyor — Era Desktop çalan bir WhatsApp aramasını bildirir; kural Era’nın açacağını, sana bırakacağını ya da bir iş akışının karar vereceğini söyler. Yalnızca sistem.
Gereken izin voice:handle · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
403 machine_only).https://app.getera.io/api/v1/voice_calls/actions/whatsapp_ring- Asıl adres:
POST /api/v1/actions/voice.whatsapp_ring
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
deviceId | uuid | Bilgisayar | |
callerName | string | Arayan · en çok 120 | |
callerNumber | string | Sayı · en çok 40 | |
known | boolean | Bir müşteri | |
customerId | uuid | Müşteri · kimliği: customer | |
openNow | boolean | Açık | |
video | boolean | Görüntülü arama |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
whatsapp_line_off | Era, WhatsApp aramalarını bir bilgisayarda yanıtlayacak şekilde ayarlanmış olmalı. |
wrong_computer | Yalnızca seçilen bilgisayar yanıtlar. |
voice_not_found | Konuşan Era’nın bir sesi olmalı. |
voice_off | Konuşan Era’nın sesi açık olmalı. |
Yayımladığı olaylar: voice.whatsapp_ringing
Neye yazar: voice_call (insert) — A ringing WhatsApp call with Era’s decision
Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde voice:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 whatsapp_line_off, wrong_computer, voice_not_found, voice_off · 429 çok sık istek
Veri modelleri
VoiceAgent
Tablo voice_agent · Kaynak voice_agents
GET /api/v1/voice_agentsGET /api/v1/voice_agents/{id}PATCH /api/v1/voice_agents/{id}→voice.update
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
agent_id | string (uuid) · uuid | ai_agent | ||
inbox_id | string (uuid) · uuid | evet | inbox | |
is_enabled | boolean · bool | |||
provider | string · text | elevenlabs, mock | ||
payer | string · text | |||
voice_id | string · text | evet | ||
voice_name | string · text | evet | ||
language | string · text | |||
greeting | string · text | |||
persona | string · text | |||
after_hours | string · text | answer, take_message, transfer, closed_message | ||
after_hours_message | string · text | evet | ||
transfer_number | string · text | evet | ||
tools | string[] · text[] | |||
approval_tools | string[] · text[] | |||
knowledge_base_ids | string[] · uuid[] | |||
max_call_minutes | integer · int4 | |||
widget_enabled | boolean · bool | |||
widget_site_id | string (uuid) · uuid | evet | site | |
widget_label | string · text | evet | ||
app_enabled | boolean · bool | |||
outbound_enabled | boolean · bool | |||
external_agent_id | string · text | evet | ||
external_phone_id | string · text | evet | ||
sync_status | string · text | pending, synced, failed | ||
sync_error | string · text | evet | ||
synced_at | string (date-time) · timestamptz | evet | ||
created_by | string (uuid) · uuid | evet | app_user | |
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz | |||
whatsapp_inbox_id | string (uuid) · uuid | evet | inbox | |
whatsapp_phone_id | string · text | evet | ||
whatsapp_status | string · text | off, pending, on, failed | ||
whatsapp_error | string · text | evet | ||
disclosure_enabled | boolean · bool | |||
confirm_booking | boolean · bool |
Birincil anahtar: id
Denetimler:
CHECK (((after_hours_message IS NULL) OR (length(after_hours_message) <= 600)))CHECK ((approval_tools <@ tools))CHECK ((length(greeting) <= 600))CHECK ((language ~ '^[a-z]{2}(-[A-Z]{2})?$'::text))CHECK (((max_call_minutes >= 1) AND (max_call_minutes <= 60)))CHECK ((payer = 'own_key'::text))CHECK ((length(persona) <= 4000))CHECK (((sync_error IS NULL) OR (length(sync_error) <= 600)))CHECK ((tools <@ ARRAY['check_availability'::text, 'book_appointment'::text, 'cancel_appointment'::text, 'order_status'::text, 'capture_lead'::text, 'answer_question'::text, 'take_message'::text, 'transfer_to_human'::text]))CHECK (((transfer_number IS NULL) OR (transfer_number ~ '^\+[1-9][0-9]{6,14}$'::text)))CHECK (((whatsapp_error IS NULL) OR (length(whatsapp_error) <= 600)))CHECK (((widget_label IS NULL) OR (length(widget_label) <= 60)))
VoiceCall
Tablo voice_call · Kaynak voice_calls
GET /api/v1/voice_callsGET /api/v1/voice_calls/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
voice_agent_id | string (uuid) · uuid | evet | voice_agent | |
agent_id | string (uuid) · uuid | evet | ai_agent | |
inbox_id | string (uuid) · uuid | evet | inbox | |
conversation_id | string (uuid) · uuid | evet | conversation | |
customer_id | string (uuid) · uuid | evet | customer | |
channel | string · text | phone, widget, app, whatsapp | ||
direction | string · text | inbound, outbound | ||
status | string · text | queued, awaiting_permission, in_progress, completed, missed, failed, cancelled | ||
from_number | string · text | evet | ||
to_number | string · text | evet | ||
caller_name | string · text | evet | ||
purpose | string · text | evet | ||
external_id | string · text | evet | ||
external_call_sid | string · text | evet | ||
started_at | string (date-time) · timestamptz | evet | ||
ended_at | string (date-time) · timestamptz | evet | ||
duration_sec | integer · int4 | |||
transcript | object · jsonb | |||
summary | string · text | evet | ||
outcome | string · text | evet | ||
actions | object · jsonb | |||
memory | object · jsonb | |||
recording | boolean · bool | |||
recording_file_id | string (uuid) · uuid | evet | ||
language | string · text | evet | ||
end_reason | string · text | evet | ||
principal_user_id | string (uuid) · uuid | evet | app_user | |
payer | string · text | evet | ||
usage_id | string (uuid) · uuid | evet | ||
source_kind | string · text | evet | ||
cost_usd | string (decimal) · numeric | |||
error | string · text | evet | ||
created_by | string (uuid) · uuid | evet | app_user | |
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz | |||
bridge | string · text | evet | ||
wa_call_id | string · text | evet | ||
device_id | string (uuid) · uuid | evet | ||
ring_decision | string · text | evet | ||
ring_reason | string · text | evet | ||
handover_requested_at | string (date-time) · timestamptz | evet | ||
handover_by | string (uuid) · uuid | evet | app_user |
Birincil anahtar: id
Denetimler:
CHECK ((jsonb_typeof(actions) = 'array'::text))CHECK (((bridge IS NULL) OR (bridge = ANY (ARRAY['twilio'::text, 'sip'::text, 'elevenlabs'::text, 'whatsapp_sip'::text, 'desktop'::text, 'web'::text]))))CHECK ((duration_sec >= 0))CHECK (((error IS NULL) OR (length(error) <= 600)))CHECK ((jsonb_typeof(memory) = 'object'::text))CHECK (((outcome IS NULL) OR (outcome = ANY (ARRAY['booked'::text, 'cancelled'::text, 'lead'::text, 'message'::text, 'answered'::text, 'transferred'::text, 'no_action'::text, 'failed'::text]))))CHECK (((payer IS NULL) OR (payer = 'own_key'::text))) NOT VALIDCHECK (((purpose IS NULL) OR (length(purpose) <= 1000)))CHECK (((ring_decision IS NULL) OR (ring_decision = ANY (ARRAY['answer'::text, 'ignore'::text, 'wait'::text]))))CHECK (((ring_reason IS NULL) OR (length(ring_reason) <= 300)))CHECK (((source_kind IS NULL) OR (source_kind = ANY (ARRAY['native'::text, 'byos'::text, 'byok'::text])))) NOT VALIDCHECK ((jsonb_typeof(transcript) = 'array'::text))
VoiceWhatsappLine
Tablo voice_whatsapp_line · Kaynak voice_whatsapp_lines
GET /api/v1/voice_whatsapp_linesGET /api/v1/voice_whatsapp_lines/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
voice_agent_id | string (uuid) · uuid | voice_agent | ||
device_id | string (uuid) · uuid | evet | ||
is_enabled | boolean · bool | |||
answer_rule | string · text | all, unknown, contacts, in_hours, after_hours, workflow | ||
ring_seconds | integer · int4 | |||
owner_name | string · text | evet | ||
outbound_enabled | boolean · bool | |||
answer_video | boolean · bool | |||
created_by | string (uuid) · uuid | evet | app_user | |
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Denetimler:
CHECK (((owner_name IS NULL) OR (length(owner_name) <= 120)))CHECK (((ring_seconds >= 0) AND (ring_seconds <= 40)))
Olaylar
İş akışları ve webhook'lar bu olaylara tepki verir.
| Olay | Ne olur | Taşıdığı alanlar |
|---|---|---|
voice.agent_changed | Bir Era’ya ses verildi ya da ses ayarları değişti. | id, agentId, enabled |
voice.appointment_booked | Era bir aramada (telefon, WhatsApp, web) randevu verdi. | id, voiceAgentId, customerId, conversationId, appointmentId, channel, service, appointmentDate, startTime, callerName, callerNumber |
voice.call_finished | Bir arama bitti; özeti ve sonucuyla Gelen Kutusu’na kaydedildi. | id, voiceAgentId, agentId, customerId, conversationId, outcome, channel, direction, durationSec, summary, fromNumber, recipientUserId |
voice.call_missed | Bir arama bağlanmadı (meşgul, cevap yok, başarısız). | id, voiceAgentId, customerId, number, direction, reason, recipientUserId |
voice.call_started | Telefon/WhatsApp araması geldi — ya da web düğmesinden, uygulamadan bir görüşme başladı. | id, voiceAgentId, channel, direction, customerId |
voice.lead_captured | Era bir aramada yeni bir potansiyel müşteri aldı. | id, voiceAgentId, customerId, conversationId, leadId |
voice.message_taken | Era bir aramada mesaj aldı. | id, voiceAgentId, customerId, conversationId, taskId, summary, recipientUserId |
voice.sync_failed | Ses sağlayıcısı bir Era’nın kurulumunu reddetti. | id, error, recipientUserId |
voice.transfer_requested | Bir arayan bir kişiye aktarıldı. | id, voiceAgentId, customerId, conversationId |
voice.whatsapp_call_finished | Era’nın bilgisayarda yanıtladığı WhatsApp araması bitti — arayan, konuşma metni, özet, sonuç ve konu. | id, voiceAgentId, direction, callerName, callerNumber, customerId, conversationId, transcript, summary, outcome, outcomeLabel, intent, goal, durationSec, recipientUserId |
voice.whatsapp_call_requested | Biri Era’dan bilgisayardaki WhatsApp’tan birini aramasını istedi. | id, voiceAgentId, deviceId, to, name, goal, customerId, recipientUserId |
voice.whatsapp_ringing | WhatsApp araması çalıyor (bilgisayar) — kimin aradığı ve Era’nın açıp açmayacağıyla. | id, voiceAgentId, callerName, callerNumber, customerId, known, decision |
voice.whatsapp_takeover | Bir kişi WhatsApp aramasını Era’dan devraldı. | id, byUserId |