Przejdź do treści

Przewodniki

SIP

Gdy agent głosowy i proste przekierowanie nie wystarczają, a chcą Państwo podłączyć numer do własnego softphone'a lub centrali telefonicznej (PBX), potrzebny jest dostawca SIP trunk - volai nim jest. Ta strona to przewodnik krok po kroku.

1Połączenia przychodzące na Państwa serwer SIP

Proszę ustawić routing numeru na mode: "sip" i podać swój sipUri - stąd połączenie trafia bezpośrednio do Państwa, a nie do naszego agenta ani przekierowania:

bash
curl -X PATCH "https://volai.eu/v1/numbers/+420601234567" \
  -H "Authorization: Bearer vk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"routing": {"mode": "sip", "sipUri": "sip:reception@your-server.com"}}'

Rozliczana jest tylko minuta połączenia przychodzącego (0,50 kr/min (≈ 0,09 PLN)), bez dodatkowego agenta - pełny kształt żądania i pozostałe tryby routingu opisuje referencja REST API.

Uwierzytelnianie na Państwa centrali

Połączenie na Państwa serwer SIP wysyłamy najpierw jako nieuwierzytelnione INVITE na sipUri. Centrala, która odpowie na nie wezwaniem do zalogowania (401/407) i bez dodatkowych danych odrzuci połączenie, w tej postaci go nie otrzyma - wezwania nie ma kto odebrać. Proszę więc dodatkowo uzupełnić w routingu sipUsername i sipPassword - po uzupełnieniu obu pól nasza sieć zaloguje się na docelowej centrali (SIP digest) i wybierze numer docelowy. Zweryfikowano rzeczywistym połączeniem na natywny numer SIP Vapi, który przyjmuje dane logowania niezależnie od ich zawartości. To, czy Państwa centrala również połączy rozmowę, zależy od niej - musi rzeczywiście odpowiedzieć na INVITE wezwaniem i uznać podaną nazwę z hasłem; nie gwarantujemy tego dla każdej centrali (w teście nie udało się to na przykład wobec domeny SIP Twilio). Bez sipUsername i sipPassword routing pozostaje w dzisiejszej, nieuwierzytelnionej postaci. Logowanie dodaje się do routingu tak:

bash
curl -X PATCH "https://volai.eu/v1/numbers/+420601234567" \
  -H "Authorization: Bearer vk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"routing": {"mode": "sip", "sipUri": "sip:reception@your-server.com", "sipUsername": "reception", "sipPassword": "supersecret123"}}'

Numer wywoływany wysyłamy zawsze dokładnie w takiej postaci, w jakiej stoi w sipUri przed znakiem @ - nie dodajemy ani nie odejmujemy żadnego prefiksu ani zera, więc centrala docelowa musi poradzić sobie dokładnie z tym, co Państwo tam wpiszą.

sipUsername ani sipPassword nie mogą zawierać dwukropka, znaku @, spacji, cudzysłowu ani odwrotnego ukośnika i mogą mieć najwyżej 64 znaki każde.

Uzupełnienie tylko jednego z pól nie jest możliwe - API zwraca komunikat po angielsku: "Please fill in both username and password, or leave both empty."

Dwukropek w części użytkownika sipUri (przed znakiem @) ani port w hoście (po dwukropku przy serwerze, np. :5060) nie są na razie obsługiwane przy uzupełnionych sipUsername i sipPassword - oba zwracają ten sam twardy błąd. Bez danych logowania oba działają bez zmian.

Wyjątek: BYO SIP trunk Vapi (adres <credentialId>.sip.vapi.ai, dla organizacji w regionie UE <credentialId>.sip.eu.vapi.ai) nie używa danych logowania. Vapi rozpoznaje nasze połączenia po IP w gateways trunku, a przy uzupełnionych sipUsername i sipPassword połączenie nie zostałoby nawiązane, dlatego API odrzuca taki routing z kodem validation. Natywnego numeru SIP Vapi (sip:<nazwa>@sip.vapi.ai) to nie dotyczy.

Kto jeszcze zobaczy nazwę i hasło

Nazwa i hasło wędrują z połączeniem dalej w naszej sieci i zostają w technicznych zapisach o jego routingu - nie są Państwo jedyną osobą, która je zobaczy. Proszę więc założyć na centrali wydzielone konto tylko dla nas, a nie podawać głównego hasła administratora.

Partial update: pominięte pole pozostaje bez zmian

Jeśli w PATCH wyślą Państwo tylko sipUri i pominą sipUsername oraz sipPassword , oba pola pozostaną bez zmian - nie trzeba podawać ich ponownie przy każdej zmianie sipUri. Pominięte pole (całkowicie brakujące w treści) zawsze zachowuje zapisaną wartość; logowanie wyłącza tylko jawny pusty ciąg w OBU polach naraz. Jedynym wyjątkiem jest zmiana serwera: jeśli w sipUri zmienią Państwo także część po znaku @, hasło trzeba wysłać ponownie - zapisanego hasła nie wyślemy na inny serwer niż ten, dla którego zostało podane. Aktualny stan można sprawdzić w polu hasSipPassword w odpowiedzi.

Połączenie nie zostało nawiązane? Proszę nas wpuścić po IP

Logowanie SIP działa tylko wobec celu, który wezwie w odpowiedzi na INVITE i przyjmie dane (zweryfikowano z natywnym numerem SIP Vapi) - w przeciwnym razie połączenie do Państwa nie dotrze, niezależnie od tego, czy dane logowania zostaną uzupełnione. Nasza sygnalizacja pochodzi z zakresu 81.31.45.0/24, w praktyce najczęściej z 81.31.45.51 i 81.31.45.56. Proszę zezwolić na centrali na cały ten zakres - połączenie zostanie wtedy rozpoznane po adresie źródłowym, a nie po nazwie i haśle, i dane logowania nie są w ogóle potrzebne.

2Dane SIP numeru

Dane logowania linii można pobrać jednym wywołaniem:

bash
curl "https://volai.eu/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"]
}

Konfiguracja w softphone (Zoiper, Linphone)

W obu aplikacjach wpisuje się w zasadzie to samo, tylko inaczej nazwane - proszę szukać „Dodaj konto” / „Konto SIP”:

PoleWartość
Serwer / Domenasip.volai.cz
Nazwa użytkownikaz odpowiedzi powyżej (username)
Hasłoz odpowiedzi powyżej (password)
TransportTCP
Port5060 (domyślny SIP - jeśli pole oferuje pustą opcję, proszę zostawić ją pustą)

Klient chce wypełnić realm?

Proszę zostawić pole puste - większość klientów pobiera realm z wezwania serwera. W logu klienta może pojawić się techniczna domena naszej sieci, to jest w porządku. Jeśli Państwa klient wymaga realm jako pola obowiązkowego, proszę napisać do wsparcia.

Po zapisaniu softphone powinien się zarejestrować (ikona stanu „online”/„zarejestrowany”), a połączenia na numer zaczną dzwonić bezpośrednio w nim.

3Połączenia wychodzące przez klienta SIP

Gdy softphone jest zarejestrowany, może sam wybierać numery przez tę linię - nie trzeba w tym celu wywoływać żadnego naszego API, wybiera się numer bezpośrednio z klienta jak ze zwykłej linii telefonicznej.

Minuty są pobierane z salda volai

Połączenie wychodzące przez klienta SIP jest rozliczane według tej samej stawki co połączenie wychodzące przez API (0,92 kr/min (≈ 0,16 PLN)) i pobierane z Państwa salda - nie z jakiegoś oddzielnego konta SIP. Stawki są bez VAT, jak cały cennik.

Połączenie biegnie bezpośrednio między Państwa klientem a serwerem sip.volai.cz, a nie przez nasze API, więc minut nie da się zablokować dokładnie w chwili wybierania numeru. Połączenie wybrane bezpośrednio z klienta SIP jest rozliczane z zapisów sieci z opóźnieniem - najwcześniej 10 minut po zakończeniu, zwykle do pół godziny - i na saldzie nie widać go w chwili wybierania. Dzienny limit połączeń i kontrola salda przy wybieraniu nie dotyczą tych połączeń, ponieważ pilnują tylko połączeń przez API - saldo może więc spaść poniżej zera. Gdy saldo spadnie do zera, nowe płatne akcje przez API/MCP zaczynają być odrzucane (połączenie wymaga salda co najmniej 5 CZK). Gdy saldo spadnie poniżej zera, dostęp SIP linii zostanie wyłączony w ciągu kilku minut, przekierowanie zostanie odłączone i otrzymają Państwo e-mail; po doładowaniu salda do co najmniej 5 CZK wszystko wznowi się samo, a hasło pozostanie bez zmian. Jeśli zadłużenie nie zostanie uregulowane w ciągu tygodnia, numer wraca do puli (dostęp SIP definitywnie wygasa). Proszę więc pilnować salda z wyprzedzeniem, a nie dopiero przy zerze.

Mają Państwo głosowego agenta AI, a nie softphone?

Ten krok zakłada klienta, który potrafi zarejestrować się na linii (SIP REGISTER) - softphone, PBX. Platforma, która wysyła połączenie jednorazowo z uwierzytelnieniem, bez stałej rejestracji (typowo głosowi agenci AI, np. ElevenLabs), wymaga innej procedury - patrz Własny agent.

Adres trunku wychodzącego platformy proszę brać z pola outboundTrunkAddress, a nie z serwera powyżej - szczegóły na tamtej stronie.

4Ograniczenia

  • Jedna rejestracja na linię - jedne dane logowania obsługują jedno zarejestrowane urządzenie naraz. Gdy zalogują się Państwo drugim klientem, pierwszy najprawdopodobniej straci rejestrację - proszę nie polegać na kilku urządzeniach jednocześnie na jednej linii.
  • Wychodzące z własnego agenta tak, pełny peering trunk nie - dane logowania linii służą temu, aby PAŃSTWA klient zarejestrował się u NAS jako telefon. Połączenia wychodzące z własnego agenta głosowego (ElevenLabs i innej platformy) jednak dziś DZIAŁAJĄ - przez relay, patrz Własny agent. Nadal nie można jednak podłączyć Państwa centrali jako równorzędnego operatora z własnym routingiem połączeń PRZYCHODZĄCYCH z zewnątrz - do tego proszę użyć routingu forward na numer Państwa centrali.
  • Tylko głos - bez wideo ani innych rozszerzeń SIP.