Към съдържанието

Ръководства

Свържете собствен агент

Искате ли да свържете със своя номер във volai собствена гласова платформа - ElevenLabs Conversational AI във Вашето работно пространство, Vapi, Retell или дори обикновена Asterisk/FreeSWITCH IVR - вместо вградения агент? Тази страница обхваща и двете посоки: входящи и изходящи обаждания. При изходящите отпада и таксата за агент от 2,50 kr/min (≈ 0,10 EUR) - агентът работи (и се плаща) от Вас на Вашата платформа.

Накратко

Входящите обаждания се настройват чрез насочване на номера към SIP адреса на Вашата платформа - без нов механизъм. Изходящите обаждания минават през краткотрайна релейна връзка, защото платформата сама не може да държи линията постоянно регистрирана като SIP клиент.

Ще Ви трябват: номер във volai, API ключ (vk_...) и акаунт във Вашата платформа (ElevenLabs, Vapi, собствена PBX централа...).

1Собствен агент или вграден

И двата пътя работят със същия номер и същия баланс - различават се само по това КОЙ води логиката на разговора и колко струва това допълнително:

КритерийВграден агентСобствен агент
Кой води разговораНие - един systemPrompt, нашият глас и нашето работно пространство в ElevenLabs.Вие - коя да е платформа, собствен промпт, собствен глас, собствени инструменти.
НастройкаЕдно POST /v1/agents извикване.SIP данните на номера + настройката на Вашата платформа (тази страница).
Цена на обаждането0,92 kr/min (≈ 0,04 EUR) изходящо, 0,50 kr/min (≈ 0,02 EUR) входящосъщата - 0,92 kr/min (≈ 0,04 EUR) изходящо, 0,50 kr/min (≈ 0,02 EUR) входящо
Такса за агент+ 2,50 kr/min (≈ 0,10 EUR)няма - плащате само минутите разговор
Препис, резюме, разпознаване на гласова пощаДа, автоматично.Не - грижи се Вашата платформа (или не).

Спестявате таксата за агент, но не получавате от нас и нищо допълнително безплатно - собствената си платформа (ElevenLabs, Vapi...) плащате директно, по нейните тарифи. Ние таксуваме само минутите разговор по линията във volai, както при SIP клиент или вградения агент. Цените са без ДДС, както цялата ценова листа.

2Входящи обаждания към собствен агент

Без нов механизъм - само съществуващото mode: "sip" маршрутизиране (същото като за Вашия собствен софтфон, вижте SIP) с sipUri адреса на Вашата платформа. За номер през ElevenLabs SIP trunk, регистриран във ВАШЕТО СОБСТВЕНО работно пространство, това е адрес със същия номер като Вашата линия във volai:

bash
curl -X PATCH "https://volai.cz/v1/numbers/+420601234567" \
  -H "Authorization: Bearer vk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"routing": {"mode": "sip", "sipUri": "sip:+420601234567@sip.rtc.elevenlabs.io"}}'

А във Вашия акаунт в ElevenLabs (Settings → Phone Numbers → Import → SIP trunk) регистрирате този номер с inbound_trunk_config:

json
{
  "provider": "sip_trunk",
  "phone_number": "+420601234567",
  "label": "Моят собствен агент",
  "inbound_trunk_config": {
    "allowed_addresses": ["81.31.45.0/24"],
    "media_encryption": "allowed"
  }
}

allowed_addresses по-горе е нашият сигнален диапазон (81.31.45.0/24) - по-безопасен от универсалния 0.0.0.0/0, който пропуска INVITE отвсякъде. И двата пропускат обаждането, но при импорт без данни за вход списъкът с разрешени адреси е ЕДИНСТВЕНАТА проверка - затова използвайте диапазона, а не 0.0.0.0/0.

Използвате различна платформа от ElevenLabs? Принципът е същият - установете на какъв SIP адрес тя очаква обажданията за Вашия номер и го поставете в sipUri. За Vapi същият диапазон се въвежда в gatewaysна BYO trunk.

За Vapi адресът за маршрутизиране е sip:<E164>@<credentialId>.sip.vapi.ai - <credentialId> ще намерите на Вашия BYO SIP trunk във Vapi; организация в региона ЕС използва домейна sip.eu.vapi.ai вместо sip.vapi.ai. Самостоятелният sip.vapi.ai е за собствените номера на Vapi и не работи за номер от нас. За BYO trunk оставете потребителското име и паролата празни - Vapi разпознава нашите обаждания по IP адреса в gateways.

В gateways въведете диапазона поотделно като IP 81.31.45.0 и netmask 24. При стандартната маска 32 Vapi би разрешил само един адрес и би отхвърлил нашите обаждания.

3Изходящи обаждания от собствен агент (релей)

Това е обратната посока - Вашата платформа сама набира. Повечето гласови AI платформи (включително ElevenLabs) не могат постоянно да регистрират телефонна линия като SIP клиент - изпращат само едно удостоверено обаждане с данните на Вашата линия. Телефонната мрежа не пуска такова обаждане направо до целевия номер, затова го насочвате през краткотрайна релейна връзка:

Защо релей, а не директно обаждане

Директното набиране на целевия номер през trunk така или иначе не работи: към номер извън нашата мрежа обаждането изобщо не се осъществява (платформата отчита неуспех, без следа никъде), а към друг номер на volai в нашата мрежа се свързва само ВЪТРЕШНО като анонимно обаждане - реално не излиза от нашата мрежа, макар да изглежда свързано. Релето е единственият начин обаждането наистина да излезе навън.

1. Насочете платформата към Вашата линия

Изтеглете SIP данните на Вашата линия:

bash
curl "https://volai.cz/v1/numbers/+420601234567/sip" \
  -H "Authorization: Bearer vk_YOUR_KEY"
json
{
  "server": "sip.volai.cz",
  "username": "123456",
  "password": "a1b2c3d4e5f6",
  "outboundTrunkAddress": "sip.volai.cz",
  "port": 5060,
  "transport": "tcp",
  "inboundSignallingCidrs": ["81.31.45.0/24"]
}

Отговорът връща server (за REGISTER на софтфон, вижте SIP) и outboundTrunkAddress ОТДЕЛНО - те не са взаимозаменяеми.

И задайте outboundTrunkAddress - НЕ server - като изходящ trunk на Вашата платформа. За ElevenLabs това е outbound_trunk_config на съответния телефонен номер (Settings → Phone Numbers → Вашият номер → Outbound calling), точно в тази форма:

json
{
  "outbound_trunk_config": {
    "address": "sip.volai.cz",
    "transport": "tcp",
    "media_encryption": "allowed",
    "credentials": {
      "username": "123456",
      "password": "a1b2c3d4e5f6"
    }
  }
}

Използвайте точно outboundTrunkAddress

Адресът на изходящия trunk трябва да е точно стойността на outboundTrunkAddress от отговора - независимо дали съвпада със server. Различен адрес означава, че обаждането не се маршрутизира в мрежата и платформата го отчита като 1011 sip request timed out - в историята на обажданията не остава нищо.

2. Създайте релейна връзка

Непосредствено преди обаждането (връзката живее кратко, вижте лимитите по-долу) извикайте:

bash
curl -X POST https://volai.cz/v1/relay \
  -H "Authorization: Bearer vk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to": "+420777123456", "from": "+420601234567"}'
json
{
  "id": "rl_4f2a91cd",
  "sipName": "volai_relay_2",
  "sipUri": "sip:volai_relay_2@sip.volai.cz",
  "expiresAt": 1756111760000,
  "callId": "c_9d4e2b7f"
}

Целевия номер подавате НА НАС в to - платформата никога не го вижда, получава само чистото sipName от отговора.

3. Накарайте платформата да набере sipName

Чистото име, а не пълният SIP URI

ElevenLabs to_number отхвърля пълен SIP URI със съобщението "SipCallTo should be a phone number or SIP user, not a full SIP URI" - затова отговорът по-горе връща sipName (чистото volai_relay_2) и sipUri (пълния sip:volai_relay_2@sip.volai.cz) ОТДЕЛНО. Само първото принадлежи в to_number - никога пълният URI.

За ElevenLabs това означава да извикате /v1/convai/sip-trunk/outbound-call със to_number зададено директно на sipName:

json
{
  "agent_id": "agent_...",
  "agent_phone_number_id": "phnum_...",
  "to_number": "volai_relay_2"
}

agent_id ще намерите при Вашия агент в ElevenLabs, agent_phone_number_id е phone_number_id на импортирания номер - връща го отговорът при импорта или можете да го прочетете от списъка Phone numbers.

Използвате собствен SIP клиент или PBX вместо ElevenLabs? Набирайте пълния sipUri директно, като обикновено SIP обаждане - това ограничение важи само за платформи, които искат чисто име без sip: префикса.

4. Какво следва

Телефонната мрежа приема обаждането под името volai_relay_2, прехвърля го към Вашата to и задава видимия идентификатор на обаждащия се на Вашата from - повиканият вижда на дисплея си Вашата линия във volai, а не вътрешното име на релейния слот (само ако номерът има собствени релейни имена - вижте Таксуване по-долу, иначе повиканият вижда демо номера на volai). Когато обаждането приключи, наемът се освобождава и минутите се таксуват точно като при обикновено изходящо обаждане - 0,92 kr/min (≈ 0,04 EUR), без такса за агент.

Отговорът, потвърждаващ обаждането, се връща едва след целия цикъл на звънене (лесно десетки секунди) - това не е грешка, макар кратък таймаут от Ваша страна да може да изглежда като такава, докато обаждането още звъни.

4Отстраняване на проблеми

Най-честите съобщения при собствен агент и какво да направите:

СъобщениеПричинаРешение
1011 sip request timed outАдресът на изходящия trunk не е outboundTrunkAddress.Задайте outbound_trunk_config.address в ElevenLabs на outboundTrunkAddress от отговора със SIP данните, а не на server.
SipCallTo should be a phone number or SIP user, not a full SIP URIto_number съдържа пълния sipUri вместо чистото име.В to_number принадлежи само sipName от отговора на POST /v1/relay.
Обаждането се проваля веднага в платформата (failed в ElevenLabs), а от наша страна няма нищоНабрали сте телефонния номер директно, а не през релето.Създайте релейна връзка (POST /v1/relay) и наберете върнатото sipName.
max auth retry attempts reached for SIP inviteПлатформата не успя да се впише: или потребителското име и паролата на изходящия trunk не съвпадат, или обаждането е стигнало до нас като телефонен номер вместо като sipName - мрежата тогава поиска ново вписване, което платформата не може да мине.Копирайте потребителското име и паролата точно от SIP данните на номера (username, password). В to_number поставете само sipName от POST /v1/relay и стартирайте обаждането през API (POST /v1/convai/sip-trunk/outbound-call) или инструмента make_outbound_call на ElevenLabs MCP, а не през формуляр, който приема само телефонни номера. Наемът чака обаждането само ttlSecs (по подразбиране 120 s).
404 from_number_not_ownedfrom в POST /v1/relay не е Ваш собствен номер във volai.Задайте from точно на номера във volai, от който се обаждате.
400 relay_lease_limitНа този номер (1) или акаунт (2) вече тече активен наем.Изчакайте наемът да се освободи или отменете неизползван (DELETE /v1/relay/{id}).
503 capacity_busyОбщият пул от релейни слотове е временно пълен.Нищо не се таксува - опитайте отново след малко.
Входящите обаждания не звънятНомерът не е импортиран в ElevenLabs, allowed_addresses не допуска нашия диапазон или маршрутизирането не е запазено във volai.Проверете и трите стъпки по-горе; ако PBX поиска удостоверяване с 401, попълнете потребителското име и паролата в маршрутизирането.
Повиканият вижда линията на volai вместо ВашатаНомерът още няма собствени релейни имена. Настройват се веднага след покупката, а този път не се е получило.Следващото обаждане повтаря настройката автоматично. Ако след един час повиканият още вижда номера на volai, свържете се с поддръжката.
Повторно обаждане се отхвърля веднага (SIP 603)Вашата платформа е набрала същото sipName отново, обикновено след обаждане без отговор. Един наем свързва точно едно обаждане.Създавайте нов наем (POST /v1/relay) преди всеки опит, включително повторен опит след обаждане без отговор, и изключете автоматичното повторно набиране във Вашата платформа.

5Таксуване

Изходящо обаждане през релето се таксува по същата тарифа като обикновено изходящо обаждане - 0,92 kr/min (≈ 0,04 EUR) - без никаква такса за агент. Цените са без ДДС, както цялата ценова листа.

Едновременността е ограничена (вижте лимитите по-долу): най-много 1 активно обаждане на един от Вашите номера и най-много 2 на акаунт едновременно.

Повиканият вижда Вашата линия във volai само ако номерът има собствени релейни имена (relayNames) - номерът ги получава веднага след покупката. Докато ги няма, наемът се връща към общия пул и повиканият вижда демо номера на volai. Ако това продължи повече от час, свържете се с поддръжката.

6Лимити, квоти и сигурност

Ограничението е 1 активен наем на номер и най-много 2 на акаунт - преднамерена защита, за да не заеме един клиент целия общ пул от релейни слотове:

КаквоСтойност
Наем, чакащ първото обаждане (pending)120 s по подразбиране, ttlSecs от 15 до 300 s
Обаждане в ход (active)15 минути
Активен наем на един от Вашите номеранай-много 1
Активни наеми на акаунтнай-много 2
Използване на наемаеднократно - второ обаждане по същия наем се отхвърля, а повторен опит след обаждане без отговор също изисква нов наем
  • from трябва да е Ваш собствен номер във volai - в противен случай from_number_not_owned. Без тази проверка бихте могли да подмените чужда линия като свой идентификатор на обаждащия се.
  • Същите бариери като при обикновено обаждане - списък с номера, на които не се звъни (само обаждания, не SMS), автоматична 30-дневна блокада след 3 неуспешни опита към същия номер в рамките на 24 часа, линии с повишена тарифа, защита от цикли между номера на volai, заключване на номера на повиквания и общото ограничение на честотата на обажданията. Нищо от това не може да се заобиколи през релето.
  • Пълен пул -> 503 capacity_busy - релейните слотове са общ лимит на едновременност за ЦЯЛАТА платформа, не само за Вашия акаунт. При capacity_busy нищо не се таксува, опитайте отново след малко.
  • Пълната REST справка (кодове на грешки, GET/DELETE при наемите) е в справката за REST API.

Всяка грешка на API съдържа cause (кой я отстранява) и action (какво да се направи) - вижте Формат на грешките в справката за REST API.