Звоним Бесплатно С Помощью Блокчейн-Сервиса Enumer

В статье описана децентрализованная реализация протокола IP-телефонии.

ЕНУМ на основе криптовалютного блокчейна Эмеркойн .

Дано описание системы ENUMER, ее отличие от других реализаций ENUM. В нем также приведены инструкции по расширению узла ENUMER и приведен пример настройки УАТС FreeSWITCH VOIP для работы с ENUMER.

Звоним бесплатно с помощью блокчейн-сервиса ENUMER



Введение

IP-телефония, имеющая ряд преимуществ перед классической, получает все большее распространение во всем мире.

IP-решения обычно дешевле классических и обладают большей функциональностью.

В настоящее время IP-АТС используются в различных организациях, однако в основных телефонных сетях продолжают использоваться классические решения, даже если они основаны на цифровых АТС.

В результате такого положения вещей связь даже между двумя IP-АТС происходит через обычную телефонную сеть PSTN. Давайте посмотрим на пример: Пусть у нас будет организация «Покупатель» и еще одна организация «Продавец».

Обе организации используют IP-АТС (также называемую АТС) для своих внутренних нужд. Пусть сотрудник Покупателя найдет объявление Продавца в интересующем его объявлении.

Покупатель решает позвонить Продавцу и набирает его номер.

Звонок выглядит следующим образом:

Звоним бесплатно с помощью блокчейн-сервиса ENUMER

Во время этого звонка две IP АТС соединяются через цепочку.

ТфОП -провайдеров, и соответственно покупатель оплачивает звонок провайдеру, который перенаправляет звонок из сети VOIP в сеть PSTN (завершает звонок).

Ну и есть взаиморасчеты между провайдерами ТфОП, которые нас не интересуют. Если бы IP_ATC покупателя «знал дорогу», он мог бы напрямую подключиться через Интернет к IP_ATC продавца, и тем самым избавил бы покупателя от оплаты лендера PSTN, а звонок был бы бесплатным:

Звоним бесплатно с помощью блокчейн-сервиса ENUMER

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

Понятно, что «знание всех дорог», то есть ведение всевозможной карты прямых IP-соединений, весьма трудоемко, и был разработан сетевой протокол для преобразования телефонного номера в «дорогу», то есть в URI, который назывался ENUM.

ЕНУМ

Протокол ENUM ( rfc6116 ) работает как распределенная адресная книга и позволяет по номеру телефона «найти дорогу» к соответствующему IP-АТЦ, обслуживающему этот номер.

Описание протокола: https://en.wikipedia.org/wiki/Telephone_number_mapping Идея использования протокола заключается в следующем:

  • Продавец регистрирует свой IP АТС (АТС) в системе ENUM.
  • При вызове IP-АТЦ покупателя перед использованием сети PSTN он пытается найти «ярлык», для чего делает запрос в систему ENUM.
  • Если в системе есть «короткий путь», АТС покупателя использует его.

    Если нет, то она использует стандартный маршрут через PSTN и платит за вызов обычным способом.



Воспользуйтесь преимуществами ENUM

Использование ENUM предоставляет преимущества как отправителю, так и получателю вызова.

Для них это:

  • Улучшенное качество сигнала благодаря прямому цифровому соединению.

  • Повышенная скорость и надежность соединения.

  • Обход ограничения оператора ТфОП на количество используемых линий или минут.
  • Ситуация отказа в обслуживании из-за перегрузки оператора невозможна.

  • Для звонящего звонок всегда бесплатный (прямая экономия).

  • Для получателя это тоже бесплатно, даже если у него есть бесплатный номер, когда за входящие сообщения надо платить (тоже экономия).

  • Использование ENUM происходит автоматически, незаметно для пользователей и требует лишь минимальной настройки IP-АТС.

Протокол ENUM прост и легок, технически эффективен, его поддерживают все наиболее популярные IP-АТС.

Однако широкого распространения она не получила, и существует ряд причин организационного и экономического характера, которые стали проблемами для широкого внедрения.

Давайте посмотрим на них поближе.



Проблемы с текущими реализациями ENUM

  1. Первая проблема ENUM заключается в том, что на данный момент просто нет места, где владелец обычной IP-АТС мог бы прописать свой номер (или несколько номеров) и соответствующие ему SIP URI. Вернее, были такие места, например, freenum.org или e164.org. Но freenum долгое время был недоступен, а e164.org перестал работать в ноябре 2016 года.

    Да, где-то ENUM-сервер типа e164.arpa продолжает существовать.

    Но эта услуга не для владельцев IP ATC или частных лиц, а «межпровайдерский узел», где крупные и взаимно проверенные VOIP-провайдеры предоставляют информацию о возможности приземления в их сети.

    Это своего рода «тусовка своих», куда рядовому владельцу IP АТС нет дороги.

  2. Вторая проблема — критическая зависимость сети от централизованного сервиса, который может вести себя некорректно или вообще не работать.

    Хорошим примером является e164.org. Последние 2 года он работал нестабильно, а кроме того, занимался матом, например, несмотря на зарегистрированные у него бесплатные номера, он направлял трафик не на абонентов IP ATC, а на «своих лендингов», которые естественно не забыл выставить счета за доставленные звонки через ТФОП сеть.

    Естественно, такое поведение привело к тому, что владельцы бесплатных номеров потеряли экономический стимул регистрировать эти номера на e164.org. А примерно за месяц до закрытия e164.org вообще перестал давать ответы ENUM, несмотря на то, что содержащиеся в нем записи были верными (мы проверяли).

  3. Поскольку классическая централизованная система ENUM использует транспорт DNS, она уязвима для всех видов атак на инфраструктуру DNS, таких как DNS-спуфинг , Взлом DNS , и тому подобное.

    Естественно, сбои в системе DNS также приводят к отказу в обслуживании в системе ENUM.

  4. И последнее, но не менее важное: нагрузка на такой сервер довольно велика, поскольку запрос выполняется каждый раз при попытке вызова с IP-АТЦ.

    Да, запросы кэшируются промежуточными DNS-серверами, но тем не менее нагрузка все равно остается высокой для сервера, обслуживающего все телефонные станции по всему миру.

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

Вышеупомянутые причины «неудачи» носят организационно-технический характер, вытекающие из централизованной организации сервиса и непрозрачности алгоритма разрешения запросов.

Действительно, централизованная реализация ENUM, как и любой сетевой службы, зависит от функциональности сайта, который занимается созданием записей ENUM и поддерживает их в актуальном состоянии, а также соответствующего DNS-сервера, который разрешает запросы ENUM. Другими словами, доверие к такой системе ENUM не может превышать доверие к организации, которая этой системой управляет. Доверие снижается еще и потому, что совершенно неизвестны алгоритм и критерии, по которым тот или иной централизованный сервис разрешает ENUM-запросы.

Так, например, сегодня он может работать как надо, а завтра может перенаправить куда идти звонки на определенный номер, который интересует компетентных товарищей( кого волнует все ).

Например, на промежуточный VOIP-узел, который в свою очередь может делать с трафиком что угодно.

Почему вдруг перенаправление? Ну, может, хозяин комнаты играет джаз.

Соответственно, выход из строя такой службы приводит к немедленному отключению всей сети.

Оба эти недостатка в полной мере продемонстрировал e164.org: сначала он перенаправлял бесплатные звонки не на зарегистрированные номера, а на своего лендинг-провайдера, затем вообще отвечал пустыми ответами, а в конце эпопеи вышел из строя.

бизнес, со всеми базами в целости и сохранности.



ENUMER — децентрализованный ENUM

Для решения вышеуказанных проблем мы разработали децентрализованную систему ENUM на базе блокчейна Emercoin. Проект получил название «ENUMER», производное от слов «ENUM» и «Emer».

Короче говоря: ENUM+EMER=ENUMER. Криптовалюты являются трендом современной финансовой индустрии и в настоящее время активно развиваются.

Основой всех криптовалют, включая Emercoin, является блокчейн — распределенная, доверенная общедоступная база данных платежных транзакций.

Особенностью Emercoin является НВС (Name-Value Storage) – распределенное доверенное хранилище информации общего назначения.

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

работают шахтеры военнопленный и подтверждение доли POS-терминал .

На базе этого хранилища уже созданы и работают системы безопасности.

эмкСШ / emcSSL , а также неуязвимую децентрализованную систему доменных имен ЭмерДНС .

Этот децентрализованный проект ENUM основан на системе EmerDNS и имеет следующие преимущества по сравнению с классической централизованной реализацией ENUM:

  • Высокая скорость разрешения ENUM-запросов за счет локальности их обработки.

  • Высокая надежность обработки запросов.

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

  • Анонимность запросов ENUM. Поскольку запросы не покидают локальный компьютер или доверенную локальную сеть, никто посторонний не может знать, что происходит или кого они ищут.
  • Невозможность атаки на инфраструктуру DNS из-за ее отсутствия [3].

  • Поскольку сеть действительно децентрализована, доверие к ней не зависит от доверия к какой-либо одной компании.

    Невозможно остановить всю систему по решению одного человека [2].

    Сеть ENUM будет продолжать работать до тех пор, пока сотни независимых майнеров закроют блоки и подтвердят консенсус блокчейна.

  • Алгоритм обработки запроса ENUM выполняется на стороне запрашивающей стороны.

    Код, который это делает, доступен по адресу Гитхаб , и любой может быть проанализирован на предмет правильности.

    Сервер ENUM не может менять правила во время игры.

    То есть вы запрашиваете собственный локальный сервер через локальное соединение (или через доверенную сеть).

  • Благодаря децентрализации одноранговой сети Emercoin она масштабируется бесконечно.

    Следовательно, не существует узкого места, которое концентрирует запросы со всего мира.

    Каждый может настроить столько независимых узлов EmerCoin, сколько пожелает, и обрабатывать свои запросы ENUM в этом кластере.

    То есть проблема [4] решена.

  • Записи ENUM создаются и изменяются самими пользователями через локальный кошелек EmerCoin. Таким образом, нет необходимости в сервере или другом месте [1], куда необходимо вводить информацию.

    Каждый пользователь делает это локально, и «место, куда сообщить о себе» становится просто ненужным.

    Каждый сообщает об этом своему локальному кошельку, который затем транслирует запись ENUM в одноранговую сеть.

В результате получаем систему:
  • Быстрый
  • Надежный
  • Защищено
  • Масштабируемый
  • Критически ни от кого не зависит
  • Не подлежит отказу из-за волюнтаристского решения
  • Без возможности блокировать нежелательных людей
  • С прозрачным алгоритмом разрешения запросов
  • С возможностью управлять записями через локальный кошелек, а не «интернет-сервер»
Но при таких впечатляющих преимуществах децентрализованный ENUM имеет и свои специфические проблемы, связанные с публичной доступностью инфраструктуры.

Итак, любой желающий может создать запись с любым содержимым и захватить запись, соответствующую чужому номеру телефона и его содержимому, или заблокировать ENUM-доступ для истинного владельца телефона, или, что еще хуже, перенаправить звонок куда-то еще.

Звонишь, например, в прачечную, а в итоге попадаешь в Министерство культуры.

Чтобы предотвратить подобные злоупотребления, в системе предусмотрены верификаторы.

Это агенты, которые проверяют, что та или иная запись ENUM действительно принадлежит владельцу соответствующего номера, и после этого предоставляют владельцу записи ENUM подпись — вердикт о том, что запись корректна и может быть использована.

Кроме того, во избежание злоупотреблений система ENUMER работает только с отдельными телефонными номерами.

То есть невозможно захватить значительный кусок числового пространства одной записью ENUM.

Как создать проверенную запись в системе ENUMER

Владелец IP-АТС, желающий принимать вызовы с использованием ENUM, должен сначала настроить свою IP-АТС так, чтобы она могла принимать входящие вызовы на SIP URI «из мира».

Детали настройки зависят от конкретной IP-АТС (АТС) и сетевого окружения и ничем не отличаются от настройки обычной АТС без блокчейна.

После этого вам необходимо разместить в EmerCoin NVS проверенную запись ENUM, которую будут использовать звонящие.

Для этого необходимо предпринять следующие действия:

Установить кошелек Emercoin

Кошелёк (нода) Emercoin — это клиентская программа для распределённой сети ENUM (и не только ENUM), и что-то вроде «личного кабинета», где пользователь может создавать свои собственные записи ENUM и затем обновлять их по мере необходимости.

Кошелек можно скачать с сайта http://emercoin.com/#download Для управления записями мы рекомендуем использовать кошелек с графическим интерфейсом для вашей ОС.

После загрузки и запуска подождите, пока кошелек синхронизирует локальную копию блокчейна.

Это может занять несколько часов.



Получите монеты EMC

Далее вам необходимо где-то приобрести монеты EMC, необходимые для загрузки и обновления записей в NVS. Их можно приобрести на одна из бирж , или свяжитесь с разработчиками .

Резервирование одной записи на 10 лет и несколько последующих обновлений стоит примерно 0,05EMC, что по текущему курсу составляет $0,06. В целом цена вполне приемлемая.

А если учесть, что скоро цена на запись НВС будет уменьшено в 100 раз , мы можем считать, что стоимость поддержания записи ENUMER близка к нулю.

Адрес, по которому получать монеты, находится в меню «Файл/Адреса получения» и выглядит примерно так: ERFJfQGwmZEomHQHGZsRFLZEyBxaWsCHTo .



Создать запись ENUM

Для хранения записей ENUM используется доверенное децентрализованное хранилище — ЭмерКоин НВС (Хранение имени-значения).

Доступ к записям NVS осуществляется либо через графический интерфейс кошелька на вкладке «Управление именами», либо с помощью команд JSON API, приведенных в документации.

Запись NVS, как следует из названия, состоит из имени и значения.



Звоним бесплатно с помощью блокчейн-сервиса ENUMER



Имя

Для подсистемы ENUM имена записей следующие: перечисление:phone_num:N Здесь:
  • enum — префикс службы
  • phone_num — номер телефона в формате Е164
  • N – количество попыток борьбы с скваттерами (десятичное число)
Например: перечисление:18009359935:0 Если с префиксом и номером службы все понятно, то назначение параметра N требует пояснения.

Этот номер нужен для защиты истинного владельца номера от скваттеров, которые могут завладеть ENUM-записью, соответствующей чужому номеру, и попытаться через нее совершить всякие нехорошие дела.

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

ниже), но при отсутствии номера попытки N реальный владелец номера не сможет осуществить свою запись.

В случае использования номера N реальный владелец номера телефона может создать запись с первым свободным значением N. Например, предположим, что вы хотите создать запись ENUM для номера телефона.

18009359935 , а тот, что приведен в примере выше, уже захвачен каким-то скваттером.

Нет проблем, придумай имя » перечисление:18009359935:1 ", и после проверки система будет доверять вашему имени, а сквоттеру останется любоваться бесполезной записью, в которой он сжег свои монеты.

Если и это имя заблокировано, попробуйте создать запись с номером N=2, и так на.



Ценить

Поле Значение состоит из нескольких строк.

Строки – либо U-директивы NAPTR ( rfc3402 ) ЕНУМ (начинаются с E2U) или подписи проверяющего (начинаются с SIG).

Одна запись ENUM может иметь несколько директив и несколько подписей от разных верификаторов.

Пример значения, включая U-директиву и подпись:

 
 E2U+sip=100|10|!^(.

*)$!sip:[email protected]! SIG=ver:enum|IC00zMELlEwmMHLpQs8=

У вас пока нет подписей (верификаторы предоставят вам строки подписи), поэтому при создании записи вводите только U-директивы (хотя бы одну), которые будут обеспечивать маршрутизацию звонков на вашу IP-АТС.

Структура директив следующая: Сервис=Приоритет|Предпочтение|Регулярное выражение В примере выше:

  • Сервис -> E2U+sip
  • Приоритет -> 100
  • Предпочтение -> 10
  • Regex -> !^(.

    *)$!sip:[email protected]!

Значение полей и их названия соответствуют стандарты классический ENUM. Для тех, кому лень читать документацию, вот краткое руководство для новичков: Почти всегда услуга аналогична приведенному выше примеру: E2U+sip для SIP IP ATC. Возможны и другие варианты, например E2U+iax или что-то подобное.

Как упоминалось выше, запись ENUM может содержать несколько U-директив.

Приоритет, Предпочтение – оставьте как в примере для начала.

Не рекомендуется их сильно уменьшать.

Самое главное — это Regex. Это правило, по которому номер телефона преобразуется в SIP URI. Разделитель — «!».

В первой части регулярное выражение накладывается на номер телефона, а во второй подставляется это число вместо \1, и таким образом формируется SIP URI. Еще один хороший пример использования регулярного выражения: !^\+?441865332(.

*)$!sip:\[email protected]!

Провести проверку

Итак, запись ENUM была создана и блокчейн ее принял.

Это уже доступно каждому.

Но звонящие по IP ATC его единогласно игнорируют, так как он не содержит подписей проверяющих, которым они доверяют. И это правильно.

Потому что кто знает, сколько людей создали запись с вашим номером телефона? И что, теперь весь трафик отправлять куда указано, не глядя? Нет, трафик будет отправляться только на основе проверенных записей, содержащих подпись верификатора.

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

Если вы хотите принять участие в партнерстве по созданию и эксплуатации подсистемы автоматической проверки, свяжитесь с нами: [email protected]. На данный момент проверка происходит через человека-оператора.

Чтобы получить подпись, напишите электронное письмо на адрес [email protected]. В письме укажите NVS имя вашей ENUMER записи, например: перечисление:18009359935:0 .

В течение нескольких дней оператор проверит наличие записи и совершит тестовый звонок на соответствующий номер, чтобы убедиться, что владелец номера осведомлен о запросе и согласен использовать ENUMER. После успешной проверки мы отправим ответ с подписью, которую вы добавите в свою запись NVS. После подписания ваша запись станет доверенной, и другие пользователи смогут использовать ее для прямых звонков на вашу АТС.



Добавьте подпись проверяющего в свою запись ENUM.

Добавив эту подпись в свою запись ENUM и выполнив NAME_UPDATE, вы доказываете всем, что являетесь владельцем номера, а вызывающие абоненты (клиенты ENUMER), доверяющие этому верификатору, будут отправлять вызовы не на PSTN, а на SIP URI вашего IP ATC. Запись ENUM может иметь несколько подписей от разных верификаторов.

Клиент использует запись ENUM, если она содержит хотя бы одну подпись от одного из верификаторов, которым он доверяет. После добавления подписи ваша запись ENUM становится активной, и клиенты ENUMER могут звонить вам напрямую, не используя сеть PSTN.

Как совершать звонки с помощью ENUMER (клиент)

Теперь, после того как запись о вашей IP АТС внесена в ENUMER, остается только начать использовать систему с пользой для себя и других абонентов.

Для этого вам необходимо, чтобы ваш IP ATC отправлял запросы ENUM в Emercoin NVS.

Использование сервиса enum.enumer.org

Мы создали публичный шлюз в ENUMER, и любой пользователь АТС может использовать его в своей АТС без каких-либо настроек блокчейна и т. д. Для этого нужно отправить запрос ENUM в DNS: на преобразователь enum.enumer.org. Пример тестового запроса из командной строки и ответа:
 
 
 $ dig -t naptr +short 53995390081.enum.enumer.org
 100 10 "u" "E2U+sip" "!^(.

*)$!sip:\\[email protected]!" .

Но при использовании нашего шлюза вы потенциально получаете все рассмотренные выше проблемы, связанные с централизацией и использованием внешнего сервера.

Поэтому основная цель нашего шлюза — предоставить тестовую среду и не более того.

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



Развертывание шлюза к EmerDNS

Самый правильный, быстрый и безопасный вариант — установить демон-кошелек EmerCoin и развернуть шлюз в emcDNS в локальной сети или даже на сервере, где работает IP ATC. Документация по развертыванию такого шлюза приведена здесь .

См.

раздел «Интеграция в обычное DNS-дерево».

В конфиге BINDa (или другого DNS-прокси) вам нужно будет добавить ссылку на пятую «enum» зону, аналогичную четырем, уже имеющимся у EmerDNS. Кроме того, в конфиге кошелька emercoin.conf нужно добавить «$enum» в список обслуживаемых зон, как в примере ниже.

Использование знака «$» вместо точки указывает кошельку, что данная зона будет обслуживаться по правилам ENUM rfc6116. Кроме того, в конфигурацию кошелька необходимо добавить два параметра, специфичных для ENUM:

  • Список доверенных верификаторов enumtrust (в примере ниже — ver:enum|olegh)
  • Имя файла или ссылка на запись NVS (ссылка начинается с '@'), содержащая список правил для попытки обработки бесплатных звонков через публичные лендинги, если для нужного номера в ENUMER ничего не найдено.

    Это enumtollfree. В приведенном ниже примере такой список представляет собой ссылку на запись NVS enum:tollfree, которая в настоящее время содержит правила для бесплатных звонков в США, Францию и Польшу.

    Мы будем обновлять этот пост и добавлять маршруты в другие страны по мере появления соответствующих посадок.

Таким образом, в файле конфигурации emercoin.conf вам необходимо добавить следующие строки:
 
 
 emcdnsallowed=$enum|.

coin|.

emc|.

lib|.

bazar # Allowed TLDs, including ENUM enumtrust=ver:enum|olegh enumtollfree=@enum:tollfree

Чтобы проверить настройки, попробуйте вручную отправить ENUM-запрос в DNS: $ dig -t naptr +short 53995390081.enum локальный хост Ответ должен быть примерно таким:
 
 100 10 "u" "E2U+sip" "!^(.

*)$!sip:\\[email protected]!" .

Если что-то не работает, попробуйте отправить запрос напрямую на кошелек, на порт 5335. $ dig -t naptr +short 53995390081.enum локальный хост –p 5335 И локализовать место неисправности.

Но если правильно настроить, все работает сразу и без проблем.



Подключение IP-АТС

Это самый простой способ.

В диалплане IP ATC необходимо указать, что после разрешения внутренних и корпоративных номеров, но перед переходом к провайдерам PSTN, мы делаем запрос к ENUMER. Естественно, прежде чем сделать запрос, необходимо преобразовать необходимое число в формат ITU-T E164. Ниже приведен пример фрагмента диалплана для FreeSWITCH, который сначала преобразует номер в формат E164 без предшествующего плюса, а затем делает запрос к ENUMER, добавляя плюс при запросе.

Если ENUMER не может помочь, делается запрос к e164.arpa. Ну а если там ничего нет, то диалплан уходит на лендинги PSTN. Аналогичный фрагмент диалплана можно создать и для другой IP-АТС, поддерживающей ENUM (Asterisk, Yate и т. д.).

 
 <!-- Normalize numbers to ITU-T E164 without PLUS -->
 <extension name="Normalize to ITU-T E164 without PLUS">
   <condition field="destination_number" expression="^(?:\+|011|00)(\d{7,})$" break="on-true">
     <action application="transfer" data="$1"/>
   </condition>
   <condition field="destination_number" expression="^(\d{10})$" break="on-true">
     <action application="transfer" data="1$1"/>
   </condition>
   <condition field="destination_number" expression="^(\d{7})$" break="on-true">
      <action application="transfer" data="1${home_code}$1"/>
   </condition>
 </extension>
 
 <!-- Lookup E164 with PLUS in the ENUMER and e164.arpa -->
 <extension name="Lookup ENUM" continue="true">
   <condition field="destination_number" expression="^(\d{7,})$" break="on-true">
     <action application="ring_ready"/>
     <action application="set" data="hangup_after_bridge=true"/>
     <action application="set" data="continue_on_fail=true"/>
     <action application="set" data="effective_caller_id_name=+15553550000"/>
     <action application="set" data="effective_caller_id_number=+15553550000"/>
     <action application="enum" data="+$1 enum"/>
     <action application="bridge" data="${enum_auto_route}"/>
     <action application="enum" data="+$1 e164.arpa"/>
     <action application="bridge" data="${enum_auto_route}"/>
     </condition>
 </extension>
 
Теги: #блокчейн #enum #криптовалюты #Криптовалюты #телефония #коммуникации #телекоммуникации #Анализ и проектирование систем #ИТ-стандарты #asterisk #Разработка систем связи
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.