Провайдер SIP-телефонии (provider)

Описание

Учетная запись провайдера SIP-телефонии, посредством которой система «Era» присоединяется к внешним SIP-сетям.
Это может быть внешняя телефонная сеть, подключаемая через провайдеров, или корпоративные АТС, находящиеся выше или на одном уровне иерархии в номерном плане, что и система «Era».
Роль ESG производит регистрацию и поддержание канала связи с внешним оборудованием, указанным в учетной записи провайдера. Любой вызов, приводящий к звонку наружу, всегда происходит через нее. Любой вызов, поступающий снаружи в систему, может быть принят, авторизован и обслужен только той ролью ESG, которая определена в учетной записи провайдера.

Определение того, какой учетной записи соответствует поступивший снаружи вызов, определяется по совокупности условий:
- учетная запись с регистрацией в заголовке "To:" или "Contact:" SIP-запроса INVITE содержит "username@domain", где "username" соответствует значению поля "username" учетной записи, а "domain" соответствует одному из адресов учетной записи;
- учетная запись без регистрации в заголовке "Contact:" SIP-запроса INVITE содержит "username@domain", где "username" соответствует значению поля "username" учетной записи, а "domain" соответствует одному из адресов учетной записи;
- учетная запись без регистрации в заголовке "Contact:" SIP-запроса INVITE содержит "username@domain", где "domain" соответствует одному из адресов учетной записи, а значение поля "username" учетной записи пусто.

В любом случае адрес отправителя, откуда запрос поступил на SIP-порт роли ESG, должен быть известен из описания учетной записи (совокупность полей "domain", "proxyaddr"/"alternative_proxies", "extaddrs").

Подробнее о работе с провайдерами телефонии.

Ограничения

  • Коллекция недоступна в мастер-домене.

  • При изменении поля лицензии в БД после перезагрузки домена объект не будет загружен, действует проверка по hash.

  • Лицензируется количественным параметром: расходуется лицензия на допустимое одновременное количество активных транков.

Поля

Структура сущности
{
  "id": uuid,
  "code": str,
  "enabled": intbool,
  "username": str,
  "login": str,
  "pwd": str,
  "domain": str,
  "proxyaddr": str,
  "proxyport": int,
  "transport": str,
  "alternative_proxies": str,
  "extaddrs": array<str>,
  "serveridx": int,
  "reg": bool,
  "expires": int,
  "pingmode": str,
  "pingsrv": str,
  "pingtimeout": int,
  "localdomain": str,
  "media": intbool,
  "reinvite": intbool,
  "translit": intbool,
  "lic": object,
  "trunksout": int,
  "opts": {
    "title": str,
    "comment": str,
    "agat_port_id": uuid,
    "agat_chassis_id": uuid,
    "agat_lm_id": uuid
  },
  "ext": {
    "ct": date,
    "lwt": date
  }
}
Table 1. Поля
Спецификация Описание

Поле: id
Режим: inout
Тип: uuid
По умолчанию: generated

Идентификатор. Может быть задан при создании, иначе генерируется системой.

Поле: code
Режим: in
Тип: str
По умолчанию: required

Код учетной записи.
Используется для указания в правилах маршрутизации.

Поле: enabled
Режим: in
Тип: intbool
По умолчанию: 1

Выключатель учетной записи.
В случае выключения роль esg не обладает данными об учетной записи и не обрабатывает звонки по ней.

Поле: username
Режим: in
Тип: str
По умолчанию: required

Имя пользователя.
Подставляется в заголовок From при использовании регистрации.
Используется в качестве ключа для связывания поступающего снаружи запроса INVITE с учетной записью провайдера.
Подробнее про связывание.

Поле: login
Режим: in
Тип: str
По умолчанию: empty

Логин для авторизации.

Если отсутствует, то авторизация производится на основе username.
При этом в качестве username во время INVITE и re-INVITE подставляется username из From URI текущего запроса, что может повлечь неожиданный отказ.

Чтобы не получить отказ в ответ на запросы INVITE и re-INVITE, можно воспользоваться одним из методов:

  • Установить в качестве 'login' значения, совпадающего с 'username' учетной записи. Это обеспечит корректную авторизацию по инициативе провайдера во время INVITE.

  • Использовать режим 'reinvite'=0 и оппозитный ему 'media'=1 с добавлением в конфигурацию экземпляров bgmg. Это исключит отправку reinvite с измененным значением From URI.

  • Настроить правило нормализации для этой учетной записи провайдера, где 'dir' = 'inner', а в 'modfromnumber' значение идентичное 'username' учетной записи. Это обеспечит подстановку всегда одинакового username в заголовок From запросов INVITE в сторону провайдера, что обеспечит корректную авторизацию по инициативе провайдера во время INVITE.

Поле: pwd
Режим: in
Тип: str
По умолчанию: required

Пароль для авторизации.
Обязательное поле если учетная запись с регистрацией.
Используется также в учетных записях без регистрации в случае, если внешнее оборудование требует авторизации путем отправки ответов 401 или 407.

Поле: domain
Режим: in
Тип: str
По умолчанию: required

SIP сервер. Доменное имя, подставляемое в заголовок To при отправке запросов из системы к внешнему оборудованию.
Также используется для идентификации учетной записи при получении запросов извне.

Поле: proxyaddr
Режим: in
Тип: str
По умолчанию: empty

Адрес Outbound Proxy-сервера, куда фактически отправляются запросы из системы к внешнему оборудованию.
Если не указан, то адресом выступает результат определения адреса по значению поля domain, в том числе у DNS-серверов.
Также используется для идентификации учетной записи при получении запросов извне.

При использовании режима параллельного обслуживания учетной записи на нескольких экземплярах esg, значение применяется только для избыточных экземпляров, для которых нет значений в списке opts.edge_proxies.

Поле: proxyport
Режим: in
Тип: int
По умолчанию: 0

Порт Outbound Proxy-сервера, куда фактически отправляются запросы из системы к внешнему оборудованию.
Значение 0 - означает порт по умолчанию. Это 5060 для udp и tcp и 5061 для tls.

При использовании режима параллельного обслуживания учетной записи на нескольких экземплярах esg, значение применяется только для избыточных экземпляров, для которых нет значений в списке opts.edge_proxies.

Поле: transport
Режим: in
Тип: str
По умолчанию: "udp"

Транспортный протокол для основного прокси. Допустимые значения "udp", "tcp", "tls".

При использовании режима параллельного обслуживания учетной записи на нескольких экземплярах esg, значение применяется только для избыточных экземпляров, для которых нет значений в списке opts.edge_proxies.

Поле: certificate_pem
Режим: in
Тип: str
По умолчанию: empty

Сертификат для подключения к провайдеру по TLS.
Содержимое PEM-файла с доверенной цепочкой, либо макро-путь к pem-файлу (например, ':SYNC_DOMAIN_DATA/files/certificates/provider1.pem').
Если значение не указано, то до версии 1.9.0 проверки цепочки сертификатов на стороне клиента не производится, а начиная с версии 1.9.0 применяются доверенные сертификаты из операционной системы.

Поле: alternative_proxies
Режим: in
Тип: str
По умолчанию: empty

Список альтернативных Proxy-серверов.
Формат: Proto:Address:Port через запятую, где Prototcp | udp | tls, Address – IPv4 или доменное имя, Port – порт (1-65535).
Например tcp:192.168.220.135:5060, udp:187.12.124.55:33985.
Могут использоваться также форматы: Proto:Address, Address:Port, Address. Протокол по умолчанию udp, порт по умолчанию 5060 или 5061 для tls.

Используется:
* при регистрации в качестве резервных точек для подключения, и как следствие точек для отправки следующих запросов;
* в алгоритме привязки входящего запроса к учетной записи провайдера: при проверке адреса отправителя поступившего запроса INVITE.

При использовании режима параллельного обслуживания учетной записи на нескольких экземплярах esg, значение применяется только для избыточных экземпляров, для которых нет значений в списке opts.edge_proxies.

Поле: extaddrs
Режим: in
Тип: str
По умолчанию: empty

Дополнительные возможные адреса или маски адресов для идентификации учетной записи и валидации отправителя при получении запросов извне, через запятую.

В качестве масок могут использоваться значения в форматах /reg/REGEX, а также целевые значения со спец-символами ?, * для указания соответственно произвольной цифры и жадной комбинации от одной до трех цифр.
Например, /reg/^*.*.*.*$, 144.76.?0?.*, 144.77.99.102

Применение масок влечет дополнительные затраты вычислительных мощностей. Поэтому во всех случаях проверка масок применяется только если не проходят другие более простые проверки:

  • при поиске учетной записи - прямое совпадение с доменом, прокси, разрешенными адресами домена и прокси, внешними NAT-адресами сервера, точными адресами в списке extaddrs;

  • при проверке адреса отправителя - совпадение с разрешенными адресами домена, прокси, alternative_proxies, точными адресами в списке extaddrs.

Поле: serveridxs
Режим: in
Тип: array(int)
По умолчанию: empty

Список экземпляров роли esg в порядке убывания приоритета, которые ответственны за работу с учетной записью. Роли указываются с помощью значений RoleId из конфигурации ролей.
После того, как приоритетный сервер становится недоступен, то в течение нескольких секунд работу с учетной записью начинает следующий по списку сервер. При восстановлении более приоритетного сервера в течение нескольких секунд производится перенос обслуживания на него. Обработка включения/выключения на разных серверах параллельная.
Если в списке находится лишь одно значение, то именно этот сервер отвечает за учетную запись, и при его недоступности учетная запись неактивна.
Если список пуст (по умолчанию), то работа с учетной записью определяется по правилам, установленным в настройках домена (settings.ext.default_provider_serveridxs), ожидается что там находится число RoleId или их список.
При отсутствии указанного ключа работу с учетной записью начинает сервер с самым низким значением RoleId на сайтах, где обслуживается домен.

Поле: reg
Режим: in
Тип: bool
По умолчанию: true

Режим работы с регистрацией (true) или без регистрации (false)

Поле: expires
Режим: in
Тип: int
По умолчанию: 3600

Период перерегистрации в секундах

Поле: pingmode
Режим: in
Тип: str
По умолчанию: "none"

Поле: pingsrv
Режим: in
Тип: str
По умолчанию: empty

Адрес внешнего оборудования для проверки доступности.
Если не указан, то проверка доступности происходит по тому же адресу, который выбран для отправки INVITE-запросов.

При использовании режима параллельного обслуживания учетной записи на нескольких экземплярах esg, значение применяется только для избыточных экземпляров, для которых нет значений в списке opts.edge_proxies.

Поле: pingtimeout
Режим: in
Тип: int
По умолчанию: 10

Период проверки доступности, в секундах

Поле: localdomain
Режим: in
Тип: str
По умолчанию: empty

Значение поля domain в заголовке From при отправке запросов из системы к внешнему оборудованию.
Применяется только для учетных записей без регистрации. По умолчанию пустое значение, при котором используется домен идентичный To.

Поле: media
Режим: in
Тип: intbool
По умолчанию: 0

Выключатель режима использования пограничного media-шлюза.
В случае включения адрес отправителя, контактный адрес и адрес сервера обработки медиа-трафика совпадают и система может рассматриваться внешним оборудованием как единая точка.
Применяется также для решения проблемы стыковки с другой подсетью.

Поле: reinvite
Режим: in
Тип: int
По умолчанию: 1

Переключатель режима прозрачного проброса re-INVITE наружу. Может быть выключен только в случае, если включен режим media.
Возможные варианты:

  • 0 (none) - Проброс реинвайта выключен. При изменении медиа-сессии обработка производится на экземпляре bgmg, обслуживающем этот диалог под управлением esg. Режим может быть активирован только в случае, если включена опция media.

  • 1 (keep_from) - Проброс реинвайта в upstream включен, в каждом отправляемом запросе re-INVITE значение заголовка From сохраняется из первичной транзакции INVITE.

  • 2 (update_from) - Проброс реинвайта в upstream включен, в каждом отправляемом запросе re-INVITE значение заголовка From определяется заново на основании абонента в новом плече внутренней стороны.

Поле: refer_mode
Режим: in
Тип: str
По умолчанию: "terminate"

Переключатель режима обработки REFER на пограничном шлюзе, обслуживающем учетную запись провайдера.
Возможные варианты:

  • terminate - Запросы REFER приводят к инициации вызова микросервисом ESG в сторону того же номерного плана, откуда поступил запрос.

  • forward - Запросы REFER с соответствующей модификацией значений заголовков Refer-To, Referred-By перенаправляются дальше, в оппозитное плечо и другой номерной план.

Режим 'forward' применяется для тестовых кейсов эмуляции системой абонентов.
Он может быть включен только в случае, если режим reinvite не установлен в значение 'none'.
Если производится Refer с подменой, то режим 'forward' применяется только если подменяемый вызов также проходит через этот экземпляр esg и ту же учетную запись провайдера. В противном случае обработка этого конкретного запроса Refer происходит в режиме 'terminate'.

Поле: translit
Режим: in
Тип: intbool
По умолчанию: 0

Выключатель транслитерации отображаемого имени при отправке запросов и ответов наружу

Поле: lic
Режим: in
Тип: object
По умолчанию: empty

Набор лицензий переданных из домена. Среди параметров ожидается максимальное количество одновременных звонков с использованием учетной записи, например {"siptrunks":5}.

Поле: trunksout
Режим: in
Тип: int
По умолчанию: -1

Максимальное количество транков, используемых для исходящих звонков.
-1 – не ограничено, то есть ограничено лишь лицензией.
В любом другом случае исходящий звонок из системы к внешнему оборудованию отклоняется правилом маршрутизации, если количество активных транков по этой учетной записи не меньше указанного в поле числа.

Поле: opts
Режим: in
Тип: object
Составное поле

Поле: opts.title
Режим: in
Тип: str
По умолчанию: empty

Произвольный заголовок

Поле: opts.comment
Режим: in
Тип: str
По умолчанию: empty

Произвольный комментарий

Поле: opts.extusernames
Режим: in
Тип: str
По умолчанию: empty

Список дополнительных имен провайдера, идентифицирующих учетную запись.
Применяется при поиске учетной записи провайдера по входящему запросу INVITE в случае, если провайдер указывает различные значения из конечного пула, не совпадающие с именем регистрации.

Поле: opts.deservice_response
Режим: in
Тип: bool
По умолчанию: true

Поддержка учетной записью режима мягкого вывода сервера из эксплуатации.

Если учетная запись с регистрацией, то экземпляры микросервиса esg, переключенные в режим мягкого вывода из эксплуатации, прекращают регистрацию.
В соответствии с установленным перечнем допущенных к обслуживанию экземпляров esg (параметр serveridxs) регистрация передается активному экземпляру (или нескольким, параметр 'instance_count').
Система стремится поддерживать указанное количество регистраций, преимущественно с экземпляров esg, исполняемых на активных серверах.
Если ни одного активного экземпляра нет среди разрешенных для обслуживания, то регистрации будут поддерживаться на серверах выводимых из эксплуатации.

Если учетная запись без регистрации, то экземпляры микросервиса esg, переключенные в режим мягкого вывода из эксплуатации, отклоняют первичные вызовы INVITE от провайдера с кодом ответа 'deservice_sipcode'.
В соответствии с установленным перечнем допущенных к обслуживанию экземпляров esg (параметр serveridxs), обслуживание по цепочке передается активному экземпляру (или нескольким, параметр 'instance_count').
Если ни одного активного экземпляра нет среди разрешенных для обслуживания, то режим мягкого вывода из обслуживания для этой учетной записи не применяется вплоть до появления хотя бы одного актвного микросервиса.

Поле: opts.deservice_sipcode
Режим: in
Тип: int
По умолчанию: 503

Код ответа, отправляемый микросервисом esg на первичные запросы INVITE от провайдера.
Отправляется, если сервер, исполняющий экземпляр esg, находится в режиме мягкого вывода из эксплуатации, а учетная запись провайдера без регистрации и с включенным параметром 'deservice_response'.
Возможные значения: 400-699.

Поле: opts.instance_count
Режим: in
Тип: int
По умолчанию: 1

Количество экземпляров микросервиса ESG, обслуживающих одновременно учетную запись.

Например, параметр можно применить, если учетная P2P (без регистрации) предполагает возможность получения INVITE на один из нескольких адресов многосерверной системы.
Для учетных записей с регистрацией использование нескольких экземпляров обеспечит несколько одновременных параллельных регистраций, у которых в контакт в соответствии с RFC-5626 будут добавлены опции '+sip.instance' и 'reg-id'. Это может иметь значительный смысл для регистрациии через различные внешние SIP прокси.

Если при этом часть серверов находится в режиме мягкого вывода из эксплуатации, то поведение и распределение обслуживающих экземпляров соовтетствует описанию параметра 'deservice_response'.

Поле: opts.edge_proxies
Режим: in
Тип: array(str)
По умолчанию: empty

Список альтернативных Proxy-серверов для параллельных экземпляров esg, при одновременном обслуживании учетной записи на нескольких экземплярах (instance_count).

Каждый элемент списка - это строка формата: Proto:Address:Port через запятую, где Prototcp | udp | tls, IP-address – IPV4, Port – порт (1-65535).
Например tcp:192.168.220.135:5060, udp:187.12.124.55:33985.
Могут использоваться также форматы: Proto:Address, Address:Port, Address. Протокол по умолчанию - udp, порт по умолчанию 5060 или 5061 для tls.

Первый элемент списка применяется для первого из параллельных экземпляров, второй элемент списка для второго и т.д.
Если список пуст, то для всех параллельных экземпляров применяется набор значений из основных полей transport, proxyaddr/domain, proxyport, alternative_proxies.
Если список содержит меньшее количество значений, чем instance_count, то для всех избыточных экземпляров также применяется набор значений из основных полей.
Избыточные значения списка не используются.

Указанный адрес используется также:

  • в алгоритме привязки входящего запроса к учетной записи провайдера: при проверке адреса отправителя поступившего запроса INVITE;

  • для отправки ping-запросов вне зависимости от значения pingsrv.

Каждый параллельный экземпляр esg, обслуживающий учетную запись, может иметь различный состав и количество edge proxies.

Поле: opts.use_diversion
Режим: in
Тип: bool
По умолчанию: false

Выключатель применения Diversion при вызовах из upstream, переадресованных или смаршрутизированных обратно в upstream (RFC-5806).

Если вызов поступил не из upstream, или учетная запись имеет выключенный режим Diversion, то параметры INVITE-запроса формируются на общих основаниях от имени учетной записи системы в соответствии с правилами нормализации.

Когда вызов поступает от абонента A из upstream в рамках учетной записи c включенным режимом Diversion на номер B, то каждый запрос INVITE, отправляемый в upstream на номер C через любую учетную запись с включенным режимом Diversion, размещает в качестве From URI абонента A, и дополнительно размещает заголовок Diversion с URI номера B.

Поле: opts.use_billing
Режим: in
Тип: bool
По умолчанию: false

Выключатель применения биллинга к вызовам, производимым в любую из сторон через текущую учетную запись.
Если в диалоге в обоих плечах находятся внешние абоненты, то биллинг в соответствии с настройками учетных записей применяется к каждому плечу.
Параметры подключения биллинга размещаются в настройках мастер-домена (billing_options).

Поле: opts.sip_restore_mode
Режим: in
Тип: str
По умолчанию: replace

Переключатель режима восстановления диалога при обрушении ноды с микросервисом esg, обслуживающим сигнализацию вызова.

Возможные варианты:

  • replace - в сторону аплинка отправляется INVITE с заголовком Replaces. Аплинк должен поддерживать подмены. Новый вызов автоматически замещает предыдущий вызов.

  • regular - в сторону аплинка отправляется новый INVITE. Ожидается что абонент будет вызван параллельно, и самостоятельно переключится на новый вызов и прекратит предыдущий.

  • disabled - диалоги по этой учетной записи не восстанавливаются.

Сервис восстановления активируется в конфигурационной настройке sip_restore_enabled микросервиса callstore.

Поле: opts.invite_filter
Режим: in
Тип: array | false
По умолчанию: false

Дополнительный фильтр для входящих снаружи запросов INVITE.

Формат значения соответствует формату параметра 'filter' при выборке из коллекции (подробнее).

Фильтр применяется к объекту, сформированному из ключевых параметров запроса INVITE и объекта текущей учетной записи.

{
  "ruri": {
    "user": username from INVITE's request line,
    "domain": domain from INVITE's request line
  },
  "from": {
    "user": username from INVITE's From header,
    "domain": domain from INVITE's From header
  },
  "to": {
    "user": username from INVITE's To header,
    "domain": domain from INVITE's To header
  },
  "contact": {
    "user": username from INVITE's Contact header,
    "domain": domain from INVITE's Contact header,
    "port": port from INVITE's Contact header
  },
  "proto": "tcp" | "udp" | "tls",
  "remote": {
    "addr": ip-address of INVITE's sender,
    "port": port of INVITE's sender
  },
  "local": {
    "addr": ...,
    "port": ...
  },
  "account": {
     "id": ...,
     "code": ...,
     ...
  }
}

С помощью дополнительного фильтра можно решить, например, следующую задачу.

Одним экземпляром esg обслуживаются несколько учетных записей.
Эти учетные записи P2P (без регистрации) для одного и того же провайдера, но с разными учетными данными.
Каждая из учетных записей мультиномерная, то есть может поставлять вызовы на большое количество различных номеров.
При этом адрес сервера провайдера одинаков, а порты на сервере провайдера для разных учетных записей назначены разные.

Один из способов решения этой задачи — прописывание всего перечня возможных номеров в свойство opts.extusernames этих учетных записей.
Такое решение не является оптимальным, поскольку и вносить тысячи номеров в учетную запись неудобно, и перебирать их все при каждом инвайте в поисках нужной учетной записи не слишком производительно.

Второй способ - привязать эти учетные записи к разным экземплярам esg. Тем самым входящие INVITE от провайдера не будут пересекаться. Однако если таких учетных записей не две-три, а десятки или сотни, то размножать роли под них становится неудобным и перестает быть оптимальным в поддержке при модификациях.

С помощью дополнительного фильтра

[
  "equals",
    ["property", "remote", "port"],
    ["property", "account", "proxyport"]
]

можно разграничить учетные записи, сопоставив порт отправителя с портом, заданным в учетной записи. В этом случае не обязательно разделять по разным экземплярам esg, а также не обязательно перечислять весь пул номеров в 'opts.extusernames'. Достаточно оставить username пустым, чтобы каждая из этих учетных записей в соответствии с алгоритмом привязки (этап 2.2.) подходила под условия базовой проверки, а фильтр делал остальную часть работы.

Поле: opts.allow_ac_set
Режим: in
Тип: bool
По умолчанию: false

Выключатель режима отправки набора кодеков в ответах на INVITE.
Применяется только при использовании режима обслуживания медиа-вызова через bgmg.

  • false – в ответе отправляется не более одного кодека из полученных в Offer SDP.

  • true – в ответе может быть отправлено подмножество кодеков из списка полученных в Offer SDP.

Поле: opts.payloads_audio_offer
Режим: in
Тип: array(str)
По умолчанию: empty

Список имен аудиокодеков, используемых для инициации звонка (вызове плеча).
Применяется только при использовании режима обслуживания медиа-вызова через bgmg.

Если список пустой, то применяется значение одноименного параметра роли esg.

Особенность применения именно значения, заданного в учетной записи провайдера, в том, что оно осуществляет замену списка форматов из SDP инициатора (в том числе возможно изменение порядка элементов).
Применение конфигурационной опции, напротив, оставляет форматы из SDP инициатора без изменения и добавляет в конец списка дополнительные кодеки.

В качестве значения - список, содержащий имена аудио-кодеков в формате "Name/Freq".
Поддерживаются следующие кодеки (case-sensitive):

  • telephone-event/8000 - сигналы DTMF, добавляется автоматически, даже если не задан,

  • CN/8000,

  • PCMU/8000,

  • PCMA/8000,

  • GSM/8000,

  • G722/8000,

  • G729/8000,

  • speex/8000,

  • speex/16000,

  • speex/32000,

  • G726-16/8000,

  • G726-24/8000,

  • G726-32/8000,

  • G726-40/8000,

  • iLBC/8000,

  • opus/48000/2.

Поле: ext
Режим: inout
Тип: object
Составное поле

Позволяет расширять состав произвольными ключами и значениями

Поле: ext.ct
Режим: out
Тип: date
По умолчанию: generated

Время создания объекта

Поле: ext.lwt
Режим: out
Тип: date
По умолчанию: generated

Время последней модификации объекта

Режимы проверки доступности

Table 2. Режимы проверки доступности
Значение Описание

"none"

Отключить проверку доступности

"rn"

Отправлять пустой запрос CR LF, ожидая в ответ CR LF CR LF

"options"

Отправлять SIP-запрос OPTIONS, ожидая в ответ SIP-ответ 200 OK

"register"

Отправлять внеочередной SIP-запрос REGISTER, ожидая в ответ SIP-ответ 200 OK

"stun"

Отправлять STUN-запрос