Пропуск трафика с номерами +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.
- Без регистрации и пароля. Позвонить на +999 может любой сервер, нашедший номер в ENUM.
- From передаётся абоненту как есть и не проверяется. Указывайте номер звонящего в E.164 с «+».
- Лимиты: 10 INVITE в секунду с одного адреса и 30 одновременных звонков на номер. Сверх — 503 с Retry-After.
- Ретрансмиссии по RFC 3261; по TCP/TLS соединение держите открытым, keep-alive — CRLF.
Медиа: RTP
- Без перекодирования. Сервер проксирует RTP и не трогает SDP-кодеки: они договариваются с устройством абонента. Устройства поддерживают Opus, G.722, G.711 A/µ.
- SRTP и ZRTP проходят насквозь: a=zrtp-hash и пакеты ZRTP доходят до абонента. Если ваша сторона поддерживает ZRTP, разговор зашифруется между вами и абонентом.
- DTMF — RFC 4733 (telephone-event) в RTP.
- Не поддерживаются: раннее медиа и поздний offer. На INVITE без SDP — 488.
Как идёт звонок
100 Trying, затем 180
Сервер будит спящие устройства абонента пушем и вызывает все сразу. До первого 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-вход и endpoint с настройками.
- Подтверждённый номер +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 только ваши номера: чужой звонок через АТС не пройдёт.
- Номер не выдан — 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>- Публичный контекст принимает только перечисленные номера: остальное FreeSWITCH отклонит.
Проверка
Тестовый номер +999 100 000 00 01 отвечает и произносит время: удобно проверить маршрут, транспорт и медиа. Вопросы и подключение к каталогу — ops@armor.tel.