Свързване на трафик с номера +999
За оператори и собственици на SIP сървъри: как да доставяте обаждания и съобщения до номера +999 и как те стигат до вас. Отворени стандарти, без договор и без регистрация. Всеки номер +999 принадлежи на човек, проверен чрез Persona.
Номера +999 за вашата централа
Най-простият начин да получите номера за служители и отдели: безплатно, без оператор и договор, за минута на този сайт. Номерът се насочва към вашата централа в профила и оттам нататък е обикновен входящ номер, само че обажданията към него не струват нищо.
- Номер за всеки. До три номера на човек: за отдели, рецепция, проекти. Номерът принадлежи на проверен човек и не може да бъде подправен.
- Звънят директно. Потребителите на Armor и други централи намират номера ви чрез ENUM и звънят направо на централата ви, без посредници и без плащане на минута.
- Звънете на +999 и вие. Абонатите на централата ви набират всеки +999, а централата намира адреса чрез ENUM. Примери за Asterisk и FreeSWITCH по-долу.
Вземете номер
В приложението Armor, после влезте в профила си на armor.tel.
Насочете го към централата
В профила при номера: „Обаждания“ → „към своя централа“ → името на сървъра, например pbx.example.com.
Приемете в централата
Обаждането ще дойде на sip:+999…@pbx.example.com. Портът е от SRV _sip._udp, иначе 5060.
Маршрутизация: ENUM
За всеки издаден номер в зоната e164.armor.tel има запис NAPTR. Името е цифрите на номера в обратен ред, разделени с точки. Зоната е подписана с DNSSEC; проверявайте подписите — иначе подмяна на записа означава прихващане на номера.
- Заявка за +999 730 905 13 05: 5.0.3.1.5.0.9.0.3.7.9.9.9.e164.armor.tel IN NAPTR
- Отговор: 10 10 "u" "E2U+sip" "!^.*$!sip:+9997309051305@sip.armor.tel!" .
- NXDOMAIN — номерът не е издаден или е освободен. Не изпращайте такива обаждания: сървърът ще отговори с 404.
- Кеш. TTL на записите е 5 минути. След освобождаване номерът не се издава повторно 90 дни.
Сигнализация: SIP
- Адресът е от NAPTR; сървърът и портът се определят по RFC 3263 (SRV _sips._tcp, _sip._tcp, _sip._udp).
- TLS се препоръчва: порт 5061 (SRV _sips._tcp), сертификат на Let's Encrypt за sip.armor.tel, SNI е задължително, клиентски сертификат не е нужен. Без шифроване: UDP и TCP на порт 5080.
- Без регистрация и парола. Всеки сървър, който намери номера в ENUM, може да се обади на +999.
- From се предава на потребителя както е и не се проверява. Поставяйте номера на викащия в E.164 с „+“.
- Лимити: 10 INVITE в секунда от един адрес и 30 едновременни обаждания на номер. Над това: 503 с Retry-After.
- Повторни предавания по RFC 3261; при TCP/TLS дръжте връзката отворена, с CRLF keep-alive.
Медия: RTP
- Без транскодиране. Сървърът препраща RTP и не пипа кодеците в SDP: те се договарят с устройството на потребителя. Устройствата поддържат Opus, G.722, G.711 A/µ.
- SRTP и ZRTP преминават: a=zrtp-hash и пакетите на ZRTP стигат до потребителя. Ако вашата страна поддържа ZRTP, обаждането е шифровано между вас и потребителя.
- DTMF: RFC 4733 (telephone-event) в RTP.
- Не се поддържат: early media и late offer. INVITE без SDP получава 488.
Как протича обаждането
100 Trying, после 180
Сървърът събужда спящите устройства на потребителя с push и ги звъни всички едновременно. Първото 180 може да отнеме няколко секунди.
200 OK от първия, който отговори
Останалите устройства спират да звънят. Медията минава през сървъра на Armor; адресите са в SDP на отговора.
Грешки
404: номерът не е издаден. 480: няма устройство на линия. 486: заето или отказано. 503: достигнат лимит.
Съобщения
SIP MESSAGE към същия адрес sip:+999…@sip.armor.tel, с тяло text/plain или message/cpim. Сървърът го доставя на всички устройства на потребителя, а на устройствата без връзка, когато излязат на линия; отговорът е 202. Отговорът на потребителя отива на адреса във вашия From, затова той трябва да е достижим от интернет.
Трафик от +999 към вас
Сървърът на Armor не извършва изходящи обаждания към други мрежи. Потребител на +999 достига вашите номера през акаунт при вас: добавя вашата линия в приложението и се обажда от вашия номер. За вас той е обикновен SIP абонат.
- Какво ни трябва от вас: SIP достъп (адрес, потребителско име, парола, TLS), пренасочване към SIP адрес и, ако желаете, SMS през SIP MESSAGE.
- За настройка с две докосвания дайте на потребителите си QR код с настройки във формата Linphone remote provisioning. Приложението го чете.
- Каталог с доставчици. Можем да ви добавим в списъка с доставчици в приложението: потребителят ви избира и влиза в акаунта си при вас през OAuth, а приложението взема настройките само. Нужни са ви вход през OAuth и крайна точка с настройки.
- Проверен номер +999 във From при обаждане към вас не е наличен. Ако ви трябва, пишете ни.
Пример: Asterisk
PJSIP, Asterisk 18 и по-нова. Входящите обаждания към вашите номера +999 се приемат без регистрация, но само за изброените номера. Изходящите обаждания към +999 отиват на адреса от ENUM.
; pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
; Calls to your +999: the caller found the PBX in ENUM, no registration
[anonymous]
type=endpoint
context=from-armor
disallow=all
allow=opus,g722,alaw,ulaw
rtp_symmetric=yes
rewrite_contact=yes
direct_media=no
; Calls to +999 from your PBX
[armor]
type=endpoint
context=from-armor
disallow=all
allow=opus,g722,alaw,ulaw
from_domain=pbx.example.com
direct_media=no; extensions.conf
[from-armor]
; your +999 number -> an extension
exten => +9997309051305,1,Dial(PJSIP/101,30)
same => n,Hangup()
; include in your users' context: include => to-armor
[to-armor]
exten => _+999XXXXXXXXXX,1,Set(URI=${ENUMLOOKUP(${EXTEN},sip,,1,e164.armor.tel)})
same => n,GotoIf($["${URI}" = ""]?missing)
same => n,Dial(PJSIP/armor/sip:${URI},60)
same => n,Hangup()
same => n(missing),Hangup(1)- Безопасно. Контекстът from-armor съдържа само вашите номера, така че чуждо обаждане не може да мине през PBX.
- Номерът не е издаден: ENUM е празен и обаждането приключва веднага, без опит за свързване.
Пример: FreeSWITCH
Входящите обаждания се приемат от профила external (порт 5080: публикувайте SRV запис _sip._udp.pbx.example.com с този порт). Изходящите обаждания минават през mod_enum.
<!-- autoload_configs/enum.conf.xml (and mod_enum in modules.conf.xml) -->
<configuration name="enum.conf" description="ENUM">
<settings>
<param name="default-root" value="e164.armor.tel"/>
</settings>
<routes>
<route service="E2U+SIP" regex="sip:(.*)" replace="sofia/external/$1"/>
</routes>
</configuration><!-- dialplan/public/armor.xml: calls to your +999 -->
<include>
<extension name="armor-in">
<condition field="destination_number" expression="^\+9997309051305$">
<action application="bridge" data="user/1001@${domain_name}"/>
</condition>
</extension>
</include>
<!-- dialplan/default/armor.xml: calls to +999 from the PBX -->
<include>
<extension name="armor-out">
<condition field="destination_number" expression="^(\+999\d{10})$">
<action application="enum" data="$1 e164.armor.tel"/>
<action application="bridge" data="${enum_auto_route}"/>
</condition>
</extension>
</include>- Контекстът public приема само изброените номера: FreeSWITCH отхвърля всичко останало.
Тестване
Тестовият номер +999 100 000 00 01 отговаря и казва колко е часът: удобен начин да проверите маршрута, транспорта и медията. За въпроси и добавяне в каталога пишете на ops@armor.tel.