Серия «Технические статьи»

Создание CLI-приложений при помощи System.CommandLine в .NET

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

В .NET уже несколько лет существует библиотека System.CommandLine, позволяющая быстро создавать CLI-приложения. Несмотря на то, что библиотека ещё в стадии beta, её активно используют и сами разработчики Microsoft, например, в утилите dotnet из пакета .NET SDK.

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

Реализация простого CLI-приложения

Библиотека поддерживает следующие виды токенов:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Опции и аргументы определяются совместно через обобщённый тип Option<T>:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Полностью исходный код можно найти в нашем GitLab-репозитории.

Subcommand и command отличаются тем, что subcommand определяет группу команд, а command определяет непосредственно действие, выполняемое командой.

Определим для начала команду sum:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Разделение на команды и группы команд очень условное, т.к. с точки зрения C# оба вида определяются через класс Command. Также нам ничто не мешает определить действие и для группы команд:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Помимо примитивных типов, библиотека также поддерживает массивы, списки, FileInfo, DirectoryInfo и другие. Полный список можно узнать, заглянув в документацию. Если есть необходимость привязать опции к кастомному типу, то можно воспользоваться встроенным механизмом привязки через тип BinderBase<T>. Определим операцию вычитания, используя этот способ:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

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

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Осталось определить Root command через одноимённый класс RootCommand :

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Теперь можно собрать приложение и проверить работу:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Внедрение зависимостей

Жизненный цикл CLI-приложения выглядит следующим образом:

  1. Вызывается некоторая команда.

  2. Запускается процесс.

  3. Происходит обработка данных, возвращается результат.

  4. Процесс завершается.

Классические контейнеры зависимостей не рекомендуется использовать, поскольку зависимости одной команды могут быть совершенно не нужны для другой команды, а инициализация всех зависимостей может увеличить время запуска CLI-приложения. Вместо этого можно воспользоваться механизмом внедрения зависимостей для конкретного обработчика. Для этого снова понадобится класс BinderBase<T>. Определим новый класс ResultWriter, который будет записывать результат математической операции в файл:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Теперь создадим класс ResultWriterBinder. Этот класс инкапсулирует экземпляр ResultWriter:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

=> _resultWriter;

Теперь определим операцию умножения и внедрим туда экземпляр ResultWriter:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

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

Кастомизация вывода

Справка генерируется автоматически из описаний, которые использовались при инициализации опций и команд. Например, команда cli-app math sum -h отобразит следующее:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

При желании можно заменить любой раздел справки, например, Description или создать новый. Добавим новую строку с текстом «This is a new section» в начало справки:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Тогда вывод станет следующим:

Создание CLI-приложений при помощи System.CommandLine в .NET Гайд, IT, Dotnet, Программирование, Гифка, Длиннопост

Если требуется улучшить внешний вид вывода данных в целом, то сделать это можно, например, написав кастомный способ отображения при помощи методов и свойств класса Console, таких как SetCursorPosition, ForegroundColor, BackgroundColor и т.д. Либо воспользоваться 3rd-party библиотеками:

1. ShellProgressBar. Простая библиотека для отображения прогресса в командном окне.

2. Spectre.Console. Мощная библиотека для создания красивых консольных приложений, которая имеет множество компонентов, упрощающих создание интерфейса. Кстати, обложка для статьи была сделана с помощью этой библиотеки.

3. ConsoleGUI. Позволяет создавать полноценный GUI на основе консоли. Судя по всему, автор вдохновлялся WPF, так как в ней содержатся привычные для этого фреймворка компоненты: TextBox, CheckBox, DataGrid, DockPanel и другие.

Заключение

Библиотека System.CommandLine является полезным инструментом для создания CLI-приложений. Она даёт разработчикам гибкий инструментарий для работы командами и опциями, что позволяет сократить время разработки и создать удобный и функциональный пользовательский интерфейс.

Показать полностью 14

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться

У нас в профсоюзе недавно появился сервис, который используется для создания публикаций в социальных сетях. Проект находится в GitLab, но с недавних пор использовать Shared Runners в GitLab не представляется возможным, поскольку для этого требуется подключить банковскую карту, а российские карты не принимаются. Открыть счёт в банке другой страны непросто, поэтому было решено развернуть GitLab Runner в Yandex Cloud, поскольку сервис уже развёрнут в Yandex Serverless Containers.

Развернуть GitLab Runner в Yandex Cloud можно в Managed Service for GitLab или на виртуальных машинах (далее ВМ). Сравнение этих сервисов в схожих конфигурациях:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Чистая ВМ — наиболее подходящий вариант, поскольку Managed Service for GitLab и ВМ с образом GitLab обходятся относительно дороже и имеют излишнюю функциональность для текущей задачи. Кроме того, чистая ВМ более гибкая в выборе вычислительных ресурсов, так что стоимость использования может быть ниже. Например, следующая конфигурация обойдётся в 754,65 / месяц:

  • vCPU: 2, Intel Ice Lake, 20%

  • RAM: 4 Гб

  • Disk: SSD 15 Гб

  • Прерываемая ВМ

Но было бы слишком расточительно оставлять ВМ запущенной круглые сутки, ведь работа GitLab Runner может занимать всего несколько минут. Поэтому после недолгих раздумий был придуман финт ушами функциями.

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

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Пререквизиты

Необходим аккаунт в Yandex Cloud и репозиторий в GitLab. В этом примере репозиторий уже содержит приложение и Dockerfile к нему. Требуется собрать и протестировать приложение, затем собрать Docker-образ и опубликовать его в реестре проекта.

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Заострять внимание на самом проекте нет смысла, так как приложение роли не играет. Если у вас другой стек, то изменения будут в Dockerfile и .gitlab-ci.yml. В данном случае приложение — это Web API на ASP.NET Core, сгенерированное командой:

dotnet new webapi –use-minimal-apis –no-openapi

Создание и настройка ВМ в Compute Cloud

Создание ВМ в Compute Cloud

Переходим в раздел Compute Cloud / Виртуальные машины и нажимаем «Создать ВМ».

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Присваиваем имя, выбираем зону доступности и ОС, которая больше нравится. Например, Ubuntu:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Настраиваем диск и вычислительные ресурсы, исходя из потребностей. Для простых приложений, в том числе и для нашего примера, подойдёт 20% гарантированной доли двух vCPU и 4 Гб RAM.

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Выбираем сервисный аккаунт с ролью compute.operator. Этой роли достаточно для запуска и остановки ВМ. Если такого сервисного аккаунта нет, то создаём. Этот аккаунт необходим для управления ВМ из функции, которая будет создана далее.

Вводим логин для пользователя ОС, SSH-ключ для подключения по SSH и нажимаем «Создать ВМ».

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Дожидаемся создания ВМ и переходим к следующему шагу.

Установка GitLab Runner

Сперва подключимся к ВМ. Для этого копируем публичный IP-адрес ВМ и подключаемся по SSH.

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Есть несколько способов установить GitLab Runner. В нашем примере будет использоваться Docker, так как это наиболее универсальный вариант. Инструкция по установке Docker Engine для разных ОС лежит тут.

После завершения установки добавляем Docker в автозагрузки, чтобы не приходилось запускать каждый раз руками:

sudo systemctl enable docker

Осталось загрузить и запустить образ с GitLab Runner. Сделаем это с подключением локальных томов.

docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest

Отключаться от ВМ не нужно, так как ещё необходимо зарегистрировать раннер. Как это сделать, будет показано позже, при настройке GitLab.

Создание и настройка функции в Cloud Functions

Создание функции

Переходим в раздел Cloud Functions / Функции и нажимаем «Создать функцию».

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Присваиваем имя функции и нажимаем «Создать»:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Выбираем среду выполнения. В этом примере используется Node.js. Затем снимаем галочку с «Добавить файлы с примерами кода» и нажимаем «Продолжить».

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Настройка функции

Нажимаем «Создать файл», присваиваем файлу имя, например, index.js и вставляем код функции. Затем определяем точку входа. Формат должен быть такой:

<имя файла без расширения>.<имя функции>

Аналогичным образом создаём package.json. Этот файл необходим, чтобы указать зависимость на Node.js SDK от Yandex.

Результат выглядит примерно так:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

В параметрах функции указываем сервисный аккаунт с ролью compute.operator, который был выбран при создании ВМ. Через этот аккаунт функция будет запускать и останавливать ВМ. Остальные значения оставляем по умолчанию:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Осталось нажать «Создать версию», дождаться обновления функции и сделать её публичной:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Прежде чем идти дальше, разберём, что происходит в index.js.

Функция handler:

  1. Сравнивает значение заголовка X-Gitlab-Token со значением в константе gitlabToken для того, чтобы функция обрабатывала запросы только от нашего репозитория. Значение токена можно сгенерировать любым удобным способом: GUID-генератор, генератор паролей и т.д.

  2. Парсит тело запроса и проверяет значение object_kind. Обрабатываться должны только события от pipeline. Остальные игнорируются.

  3. Проверяет значение detailed_status. Если в проекте создан новый pipeline, то статус у него будет pending. В таком случае запускаем ВМ. Если статус passed, значит, работа pipeline завершена успешно, можно останавливать ВМ.

Функции startInstance и stopInstance:

  1. Создают новую сессию с токеном сервисного аккаунта, который мы указали при создании функции. Данные этого аккаунта будут доступны в параметре context.

  2. Создают запрос на запуск и остановку ВМ соответственно.

  3. Отправляют запрос в инстанс, который указан в константе virtualMachineInstanceId.

Настройка проекта GitLab

Регистрация и настройка раннера

Возвращаемся к ВМ. Для регистрации необходимо выполнить одну из команд из этой инструкции. Для нашего примера:

docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

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

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

URL и токен находим на странице Settings / CI/CD:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Указываем при регистрации теги, которые описаны в файле .gitlab-ci.yml, иначе раннер не будет брать джобы.

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Если теги не используются, то после завершения регистрации указываем раннеру брать джобы без тегов:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

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

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Поскольку в этом примере будет собираться Docker-образ, включаем privileged mode в настройках раннера. Для этого флагу privileged присваивается значение true в файле /srv/gitlab-runner/config/config.toml

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Создание webhook

Переходим в раздел Settings / Webhook. Тут вводим URL функции, затем токен, который указали в константе gitlabToken, после чего выбираем триггер pipeline и нажимаем Add webhook:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Проверяем работу CI/CD

Сперва остановим ВМ. После этого создадим новую ветку в репозитории, изменим какой-нибудь файл и сделаем merge request.

Все три стейджа отработали без ошибок:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

В реестре контейнеров создан Docker-образ:

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

В логах функции видно, что с момента запуска ВМ до завершения работы CI/CD прошло примерно 5 минут 20 секунд.

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Анализ решения

Ниже приведена стоимость использования одной виртуальной машины с GitLab Runner в Compute Cloud за неделю. Если экстраполировать такое потребление на месяц, то выйдет примерно 200-250 рублей, что дешевле использования полноценной ВМ.

Импортозамещение облаков: как настроить GitLab Runner в Yandex Cloud и не обанкротиться Gitlab, Яндекс, Гайд, Длиннопост

Основной ресурс, на который уходит бюджет — хранилище. Если сумма в 200-250 рублей — всё ещё много, то нужно сменить тип хранилища с SSD на HDD.Также в качестве платформы можно выбрать Intel Cascade Lake, так как она позволяет снизить гарантированную долю vCPU до 5%. Стоимость такой ВМ будет на 30-40% ниже, но и производительность её также будет ниже.

Плюсы такого решения:

  1. Относительно простая конфигурация, которая легко настраивается.

  2. Невысокая стоимость ресурсов облака, подходит для небольших pet-проектов.

Минусы:

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

Показать полностью 25

VoIP-шлюз Eltex TAU-16 в качестве АТС

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

В этой статье я опишу, как настроить VoIP-шлюз Eltex TAU-16.IP в качестве мини-АТС.

Голосовые шлюзы Eltex TAU предназначены для подключения аналоговых аппаратов к телефонному оборудованию, работающему по протоколу SIP: различным ip-АТС, в том числе и облачным. Однако, благодаря наличию расширенных дополнительных функций, шлюз может выступать как самостоятельное устройство — мини-АТС для внутренней связи. Шлюз не заменит полноценную АТС, так как в нём будут отсутствовать многие функции, но в некоторых случаях такой вариант тоже применим.

Главным достоинством шлюза является поддержка SIP-транков и наличие аналоговых портов FXS одновременно. Как правило, это две взаимоисключающие опции: аналоговая мини-АТС не имеет возможности работать с внешним миром по протоколу SIP или подразумевает дополнительные затраты на это; IP-АТС имеет ограниченное количество FXS-портов и расширение также стоит денег. Кроме того, в современных реалиях, когда некоторые производители уже отказываются от производства аналоговых станций, а, в связи с последними событиями, и с покупкой IP-АТС возникают сложности, данная схема может рассматриваться как один из альтернативных и бюджетных вариантов.

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Внешний вид устройства

Во-первых, нужно настроить сеть. В самом простом случае достаточно изменить адрес шлюза, который установлен по умолчанию. Настройки выполняются в разделе «Сетевые настройки/Сеть»:

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Вкладка настройки сети устройства

Если же необходимо разделить сеть для голоса и для управления, следует настроить сети на вкладке «VLAN», указав адреса для каждой сети. Ещё нужно указать, по каким сетям будет передаваться голос и сигнальная информация, а также осуществляться управление (указывается внизу страницы). Настройки выполняются в разделе «Сетевые настройки/VLAN»:

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Вкладка настройки «VLAN»

Общий принцип настройки устройства в качестве АТС заключается в следующем: создаётся два SIP-профиля, один из которых отвечает за связь с внешним миром (с оператором VoIP), а второй — за работу аналоговых портов. В первом профиле задаются настройки транка для связи с оператором: адрес сервера, порт, данные для регистрации (если требуется), поддерживаемые кодеки и план нумерации, согласно которому устройство будет отправлять вызовы на этот транк. Второй профиль создаётся без регистрации и даёт возможность совершать вызовы по коротким номерам внутри шлюза. План набора этого профиля указывает устройству, какие вызовы выполняются внутри шлюза, а какие следует направлять во внешний мир.

Итак, настройки профиля для связи с провайдером. Выполняются в разделе «PBX / Профили SIP/H323 / Профиль 1». Во вкладке «SIP настройки профиля»:

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Настройки Профиля 1

Здесь указываются данные, которые предоставляет оператор связи. Основные данные — адрес, куда должен обращаться шлюз для совершения вызовов. Если используется транк с регистрацией, необходимо включить эту функцию в поле 1 и указать данные для регистрации (логин/пароль) в полях 2 и 3. Остальные настройки можно оставить по умолчанию.

Во вкладке «Кодеки» задаются используемые кодеки, а также есть возможность задать настройки для передачи модема и факса. Эти данные тоже обычно предоставляет оператор. В общем случае, у нас всегда должен работать кодек G.711a. Для успешного прохождения факсов обычно отключаем опцию «Передача модема», а в параметре «Основной кодек передачи факса» выбираем «Т38», резервный — G.711a. С нашим оператором возникают проблемы с опциями «Эхокомпенсатор» и «Комфортный шум», поэтому их тоже деактивируем.

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Настройки кодеков профиля 1

Переходим к вкладке «План набора». Настройки на этой вкладке позволяют совершать вызовы через сеть нашего оператора. Здесь указываем префиксы, набрав которые, абонент должен звонить через внешнюю сеть. В данном случае, удобнее использовать опцию «Табличный план набора»:

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Настройка плана набора

Нажимаем кнопку «Добавить префикс»:

Форма добавления префикса

Указываем префикс, минимальное количество цифр в набираемом номере. В поле «Протокол и направление» в нашем случае указываем «SIP-транк» (транк по IP-адресу без регистрации). Тип номера — Subscriber (при звонках внутри оператора связи) или National (при звонках на сеть МГ). На самом деле, вероятнее всего, на стороне оператора этот параметр все равно будет корректироваться. В поле «IP-адрес» указывается адрес станции оператора, на который обращается шлюз для выполнения вызовов. Этот же адрес указывался в настройках SIP-профиля. В форме «Абонентские порты» можно указать, какие именно абоненты могут выполнять вызовы по этому правилу.

Переходим к настройке Профиля 2 (для локальных абонентов).

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Настройки Профиля 2

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

Во вкладке «План набора» выбираем опцию «Строчный план набора» и вписываем следующую строчку:

1xx@192.168.130.58|x.@192.168.130.57

где:

1xx — нумерация, используемая для внутренних абонентов. В нашем случае внутренние номера телефонов имеют вид 101, 102, 103 и т.д.

192.168.130.58 — локальный адрес нашего устройства. То есть если внутренний абонент набирает номер вида 101, 102 и т.д., вызов осуществляется внутри устройства.

x.@192.168.130.57 — данная строчка означает, что все остальные вызовы будут направляться на адрес 192.168.130.57 (адрес оператора), то есть через транк.

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

План набора для Профиля 2

Теперь настроим абонентские порты. Переходим на вкладку «PBX/Абонентские порты»

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Настройка абонентских портов

В этой вкладке задаём внутренние номера, а в поле «SIP/H323 профиль» указываем тот профиль, который настраивали для внутренней связи (в нашем случае это Профиль 2).

После выполнения этих настроек исходящая связь уже должна работать. Остается настроить входящую связь.

Следует помнить, что при настройке параметров на каждой вкладке следует нажимать кнопку «Применить изменения». После выполнения всех настроек необходимо нажать кнопку «Сохранить». Иначе после перезагрузки устройства настройки будут утеряны. Эту особенность также можно использовать в случае, когда что-то пошло не так и необходимо вернуть исходные настройки.

Перейдём к настройке входящих вызовов. Открываем вкладку «PBX/Группы вызова». Здесь нажимаем кнопку «Новая группа»:

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Добавление группы вызова

Имя группы любое, пароль пропускаем, телефонный номер — внешний номер, на который совершается вызов и который будет обозначен как B-номер во входящем вызове. Тип группы: групповой (звонят все телефоны в группе), серийный (после таймаута начинает звонить следующий телефон, при этом предыдущий продолжает звонить), циклический (вызов по очереди переходит на следующий в списке порт). «SIP-профиль» — профиль, на котором работают внутренние номера (в нашем случае это Профиль 2). Кнопку «В работе» необходимо включить.

После добавления группы вызова её нужно отредактировать:

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Редактирование группы вызова

Для редактирования необходимо нажать иконку в столбце «Изменить».

VoIP-шлюз Eltex TAU-16 в качестве АТС Гайд, Eltex, Voip, АТС, Длиннопост

Порты в группе вызова

Здесь появилась новая вкладка «Порты», где можно добавлять или удалять порты, на которые будет поступать вызов и задавать очерёдность поступления вызова.

На этом настройка шлюза Eltex TAU-16.IP закончена. Настройки применимы на всех устройствах серии ELTEX TAU стоечного исполнения (16, 32, 36, 72 порта).

Версия ПО в данном случае — 2.18.0.35

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

Показать полностью 12

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Часто бывает, что при устройстве на работу в небольшую компанию специалист вынужден заниматься не только своим непосредственным направлением, но и решать некоторые смежные задачи. Причины могут быть разные: желание работодателя сэкономить, отсутствие компетентных специалистов или малый объём работ в данном направлении, когда нанимать отдельного человека под такие задачи не имеет смысла. Например, я работаю по направлению фиксированной телефонии, и мне иногда приходится заниматься транспортом E1. Вместе с Softswitch мне досталась в нагрузку пара мультиплексоров SDH производства Huawei, которые приходится иногда настраивать. Так как происходит это не так часто, каждый раз приходится всё вспоминать заново. Поэтому я составил небольшой туториал для себя и своих коллег. Возможно, он будет полезен кому-то ещё.

Примечание: в статье рассматривается управление уже установленным и настроенным оборудованием. Мне достались два работающих SDH-мультиплексора Huawei уровня STM-4 (622 Мбит/с). Система мониторинга и управления уже была настроена, и я осваивал её «как есть».

Краткое описание ПО для конфигурирования

Для работы с оборудованием на рабочей станции, подключенной к интерфейсу управления мультиплексором, я запускаю две программы – IManager T2000LCT-Server и IManager T2000LCT-Client, в которых и произвожу работы по конфигурированию. Для запуска программы требуются логин и пароль.

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.1 Окно программы IManager T2000LCT-Server

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.2 Окно программы IManager T2000LCT-Client

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

На скриншоте оборудование, к которому непосредственно подключён ПК управления, имеет значение в столбце Gateway – GNE. Мультиплексор, доступ к которому настроен через канал связи в тракте STM (территориально расположен в другом месте и доступен удалённо), имеет значение Gateway – Non-GNE.

В столбце Login отображается статус Not Login, а в столбце Communication – состояние Communication Interruption. Это означает, что оператор не авторизован в оборудовании, так как с ним нет связи. В таком состоянии можно просматривать конфигурацию, которая была в мультиплексорах во время последнего подключения, но текущие параметры посмотреть не получится, как и внести какие-либо изменения.

Выбрав из списка необходимый мультиплексор, нажимаем внизу кнопку NE Explorer и попадаем в интерфейс управления конкретной единицы оборудования. Здесь мы увидим список всех установленных плат и их состояния в окошке слева вверху, а также функции, доступные для выделенной платы, в окошке слева внизу. Если выделить корень дерева оборудования (Рис.3), то получаем список функций, применимый ко всему мультиплексору (функции мультиплексора и его плат не пересекаются).

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.3 Начальный интерфейс программы управления

Общий вид оборудования и наименования установленных плат можно посмотреть непосредственно в интерфейсе управления, нажав на иконку Slot Layout:

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.4 Общий вид и конфигурация мультиплексора OSN150

Типы плат (для мультиплексора Huawei OSN1500):

  1. Модуль вентиляторов FAN.

  2. Платы Q1SL4 – плата линейного интерфейса STM-4. Сюда подключается оптика, которая соединяет оборудование с другим мультиплексором.

  3. Платы ECXL – плата, отвечающая за кросс-коннект (коммутацию).

  4. Платы GSCC – плата управления и мониторинга всем мультиплексором.

  5. Модули питания PIU.

  6. Платы D12S – интерфейсная плата E1-портов (32 порта) с сопротивлением 120 Ом.

  7. Плата AUX – плата вспомогательных интерфейсов (служебный телефон, порт RS-232).

  8. Плата PQ1 – интерфейсная плата портов E1. Позволяет вывести 63 потока E1.

  9. Плата N1EFS4 – интерфейсная плата портов Ethernet. На плате 4 порта.

Типы плат (для мультиплексора Huawei Metro 1000):

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.5 Общий вид и конфигурация мультиплексора OSN1500

  1. Плата OI4 – плата линейного интерфейса STM-4 (для соединения с другим мультиплексором).

  2. Плата EFS – интерфейсная плата портов Ethernet, содержит 4 порта FE 10/100Mb.

  3. Плата SP2D – интерфейсная плата портов E1, может вывести 16 потоков.

  4. Плата PD2T – интерфейсная плата портов E1, выводит 48 потоков.

  5. Плата X42 – модуль кросс-коннекта.

  6. Плата STG – модуль синхронизации и генератора синхросигнала.

  7. Плата SCC – модуль управления и мониторинга всего оборудования.

  8. Плата OHP2 – модуль обработки заголовков.

Если выделить какую-либо плату, подсказка по её функционалу появится внизу окошка общего вида оборудования (показано выше).

Конфигурирование потоков E1

Для того чтобы прописать в оборудовании новый поток уровня E1, откроем один из мультиплексоров, выделим корень дерева оборудования, в дереве функций откроем пункт Configuration и в раскрывшемся списке выберем SDH Service Configuration (Рис.6)

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.6 Окно для конфигурирования потоков OSN 1500

В окне отображается список существующих соединений (кросс-коннекты), а также кнопки с возможными действиями в этом окне.

Описание столбцов списка кросс-коннектов:

Level — уровень кросс-коннекта. Здесь мы можем указать тип виртуального контейнера и, соответственно, пропускную способность, выделенную под данное соединение (а точнее, кратность пропускной способности). Если выбрать уровень VC12, то скорость будет кратна 2 Мбит/с. Если выбрать VC4, то скорость будет кратна 155 Мбит/с (это контейнер уровня STM-1), то есть мы займём целиком 1 STM-1 из 4-трактов STM-4.

Type — тип соединения, обозначен графическим символом, указывающим, что данное соединение является вводом-выводом (например, вывод на интерфейс E1) или проходным (например, с платы линейного интерфейса на плату интерфейсов Ethernet).

Source Slot — слот и плата источника кросс-коннекта.

Source Timeslot/Path — таймслот (порт) источника.

Sink Slot — слот и плата точки назначения кросс-коннекта.

Sink Timeslot/Path — таймслот (порт) точки назначения.

Activation Status — статус активации соединения. При создании соединения оно может быть активировано сразу или позже, после завершения работ по подключению, чтобы избежать появления ложных аварий в системе мониторинга. Также соединение можно активировать/деактивировать по необходимости в данном окне с помощью соответствующих кнопок.

Для создания нового соединения нажмём кнопку Create и увидим следующее окно, в котором задаются все вышеперечисленные параметры:

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.7 Окно создания нового кросс-коннекта (соединения)

В появившемся окошке указываем:

Level — VC12

Direction (направление) — оставляем Bidirectional (то есть, двунаправленное соединение)

Source Slot — плата-источник. Выбираем плату линейного интерфейса, который соединён с мультиплексором на другой стороне

Source VC4 — выбираем один из 4-х контейнеров VC4 в тракте STM-4.

Source Timeslot Range — диапазон таймслотов источника. Здесь оборудование позволяет выбрать несколько таймслотов. Это удобно в случае, если нам необходимо создать одновременно несколько соединений между одними и теми же точками. Например, нам необходимо прокинуть 4 потока E1 между данными мультиплексорами. В таком случае, мы зададим 4 таймслота при создании соединения в каждом мультиплексоре.

Таким же образом задаются слот (плата) и таймслоты пункта назначения.

В некоторых случаях для задания путей источника и назначения удобнее будет воспользоваться графическим типом задания параметров. Для этого в полях Source Slot или Sink Slot нажимаем на кнопку с многоточием (Рис.8):

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.8 Графический способ указания пути источника и назначения кросс-коннекта

В открывшемся окошке мы наглядно можем выбрать плату (2), порт на плате (3), контейнер верхнего уровня, в нашем случае, один из четырех VC4 (4), и ниже — один или несколько виртуальных контейнеров нижнего уровня — VC12. Неактивная кнопка виртуального контейнера означает, что он уже занят.

После выбора и закрытия данного окошка, возвращаемся в окно Create SDH Service, которое мы открыли для создания нового кросс-коннекта.

Осталось задать параметр Activate Immediately. При выборе Yes соединение должно быть сразу активным, иначе его нужно активировать вручную. Следует отметить, что иногда данная настройка не применяется, поэтому после создания соединения рекомендуется проверить значение поля Activation Status и нажать кнопку Activate в окне списка соединений.

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

Некоторые настройки портов E1

Если в дереве оборудования (верхнее левое окошко в главном окне программы управления) выбрать какую-либо плату, то в дереве функций мы получаем доступ к настройкам самой платы. Например, выберем интерфейсную плату портов E1 и откроем её свойства:

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.9 Настройка свойств портов E1

Данное окно позволяет изменять некоторые свойства портов. В частности, в поле Port Name можно указать произвольное название для порта. Это никак не влияет на работу самого порта, однако улучшает читаемость событий и аварий, которые выдаёт порт в общем списке событий.

Ещё одним важным параметром, который облегчает работу при организации или тестировании потоков E1, является Tributary Loopback. Двойной щелчок в этом поле открывает варианты постановки петли или «заворота» на порту: Inloop и Outloop. Один из них — заворот внутрь, а другой — заворот в сторону подключённого внешнего оборудования.

Конфигурирование портов Ethernet

Пропуск портов Ethernet выполняется в несколько этапов.

  1. Выполняем кросс-коннект таймслотов с платы линейных интерфейсов (Q1SL4) на плату интерфейсов Ethernet (N1EFS4).

  2. Выполняем кросс-коннект занятых в предыдущем пункте таймслотов во внутренний интерфейс VCTRUNK# платы N1EFS4 (всего на плате 12 VCTRUNK).

  3. Прописываем на плате N1EFS4 VLAN’ы от VCTRUNK# до физического порта (на плате 4 физических порта).

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.10 Схема кросс-коннекта портов Ethernet

Первый пункт действий выполняется аналогично настройке портов E1, порядок приведён выше.

Кросс-коннект виртуальных контейнеров на внутренние интерфейсы платы N1EFS4

В настройках платы N1EFS4 открываем раздел Configuration – Ethernet Interface Management – Ethernet Interface. В открывшемся окне выбираем Internal port и вкладку Bound Path, здесь нажимаем кнопку Configuration.

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.11 Конфигурация внутренних интерфейсов платы N1EFS4

В появившемся окне выбираем один из внутренних интерфейсов, VCTRUNK, и виртуальные контейнеры, которые будут в него включаться:

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.12 Включение виртуальных контейнеров во внутренний интерфейс VCTRUNK

Нажимаем ОK, и сконфигурированный интерфейс появляется в нашем списке. В графе Bound Paths мы видим задействованные виртуальные контейнеры, а в графе Number of Bound Paths — их общее количество.

На вкладке TAG Attribute списка внутренних интерфейсов настраивается режим порта:

Access — нетегированный порт

Tag Aware — тегированный порт

Hybrid — гибридный порт

Теперь осталось соединить внутренний порт VCTRUNK# с одним из четырёх внешних физических портов, прокинув VLAN между этими портами.

Прописываем на плате N1EFS4 VLAN’ы от VCTRUNK# до физического порта

В настройках платы N1EFS4 открываем раздел Configuration – Ethernet Service – Ethernet Line Service. В открывшемся окне нажимаем кнопку New.

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.13 Создание соединения между внутренним интерфейсом и физическим

В открывшемся окне указываем порт источник, VCTRUNK#, и порт назначения, например, PORT1. А также укажем VLAN-источник и VLAN-назначения (автоматически выставляется один и тот же).

Настройка портов на SDH-мультиплексорах Huawei OSN1500 и Metro1000 IT, Гайд, Huawei, Длиннопост, Скриншот, Картинка с текстом

Рис.14 Создание соединения между внутренним и физическим интерфейсами

В этом же окошке в разделе Port Attributes есть возможность выбрать режимы для обоих портов (тегированный, нетегированный, гибридный).

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

Также в данном окне доступно меню конфигурирования внутренних интерфейсов платы N1EFS4, которое описано в предыдущем подразделе.

На этом конфигурирование портов Ethernet на мультиплексоре Huawei OSN1500/Metro1000 окончено. Следует ещё раз заметить, что на противоположной стороне (на другом мультиплексоре) настройки кросс-коннекта должны быть аналогичны.

Показать полностью 15

Основы работы с телефонной коммутацией

Основы работы с телефонной коммутацией IT, Телекоммуникации, АТС, Huawei, Длиннопост

Проведём небольшой ликбез по работе телефонной коммутации. Полученные знания помогут освоить настройку автоматических телефонных станций (АТС).

Основная задача телефонной станции

Основная задача АТС – соединять абонентов. Абонент А совершает вызов абонента B. Станция должна определить, где находится абонент B, и передать ему вызов. В простейшем случае:

  • А-номер – это телефонный номер вызывающего абонента (инициатора вызова);

  • B-номер – это номер вызываемого абонента (набранный номер).

В зависимости от принадлежности указанных абонентов (номеров) нашей станции, вызовы можно разделить на:

  • внутренний вызов – оба абонента принадлежат одной и той же станции;

  • внешний вызов – один из абонентов принадлежит другой станции;

  • транзитный – ни один из абонентов не принадлежит рассматриваемой станции.

Сигнализация

Процесс телефонного вызова можно разделить на составляющие:

  • Установка соединения – абонент А ищет абонента B и направляет ему вызов. Если абонент B готов этот вызов принять, то абоненты договариваются о технических подробностях и организуют разговорный канал между собой. Это работа сигнализации.

  • Непосредственно разговор – между абонентами передается голос.

  • Завершение вызова – один из абонентов завершает вызов, другой абонент узнает об этом (например, короткие гудки в трубке), и разговорный канал освобождается (или «разбирается»).

Существуют разные виды сигнализаций, которые можно разделить по типу (абонентская, межстанционная) или по среде передачи (SIP, H.323, H.248 для ip; ОКС-7, DSS-1, QSIG)

Сценарии вызовов

Внутренний вызов

Внутренний вызов – это вызов внутри одной станции и одной номерной ёмкости. Как правило, набранный абонентом номер сразу проверяется на принадлежность к внутренней нумерации, и при подтверждении вызов передаётся адресату. Если набранный номер соответствует внутренней номерной ёмкости, то станция будет искать этот номер среди своих абонентов. Если такой номер существует, то сделает на него вызов.

Основы работы с телефонной коммутацией IT, Телекоммуникации, АТС, Huawei, Длиннопост

Внешний вызов

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

Основы работы с телефонной коммутацией IT, Телекоммуникации, АТС, Huawei, Длиннопост

Сценарий транзитного вызова

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

Основы работы с телефонной коммутацией IT, Телекоммуникации, АТС, Huawei, Длиннопост

Участники вызова

Источником и пунктом назначения вызова обычно являются:

  • внутренние абоненты телефонной станции, а также другие интерфейсы АТС, работающие с вызовами, например, автоинформаторы, интерактивные голосовые меню (IVR) и прочие;

  • внешние присоединения, то есть абоненты других станций. Эти присоединения могут иметь различный формат, например, SIP-транки (присоединение по ip), транки ОКС-7 и ISDN (транспорт по E1), или же обычные телефонные линии.

Основы работы с телефонной коммутацией IT, Телекоммуникации, АТС, Huawei, Длиннопост

Параметры вызова

Это информация о вызове и его участниках, на основании которой будет вызов обработан.

К основным параметрам телефонного вызова относятся:

  • А-номер (calling party number, CgPN) – номер вызывающего;

  • B-номер (called party number, CdPN) – вызываемый номер.

Далее рассмотрим ещё несколько параметров вызова, которые несут дополнительную информацию и могут использоваться для обработки вызовов.

Категория абонента – параметр, описывающий тип абонентской линии (квартирный абонент, гостиничный номер, организация, уличный таксофон и т. д.), задающий право пользования платными услугами (междугородная и международная связь, передача данных и факсимильных сообщений и т. д.). В современных условиях этот параметр используется для обозначения, какой оператор междугородней/международной связи используется абонентом.

Тип номера – может использоваться для определения типа вызова (местный, междугородный и прочие) и принимать следующие значения:

  • unknown,

  • subscriber number,

  • national number,

  • international number,

  • network specific

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

Для вызовов с переадресацией добавляются параметры:

  • Original Called Party Number, OCdPN – изначально вызываемый номер. Используется при переадресации;

  • Redirecting Number – переадресующий номер.

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

  • указать, разрешён ли доступ к междугородней связи для данного абонента;

  • разделить абонентов по каким-либо районам или зонам и маршрутизировать их исходящие вызовы по-разному: например, направлять вызов 02 на телефон ближайшего РОВД;

  • с определённого присоединения могут совершаться транзитные вызовы, а со всех остальных – нет.

Такие дополнительные параметры не могут быть переданы по протоколам сигнализации на соседнюю станцию и используются только внутри данного оборудования.

Обработка вызова

Обработка вызова – направление вызова к определённому абоненту (и через определённое направление) в зависимости от определённых условий.

Основы работы с телефонной коммутацией IT, Телекоммуникации, АТС, Huawei, Длиннопост

Это проверка любых из приведённых выше параметров на соответствие конкретным значениям во всевозможных сочетаниях. При совпадении всех условий АТС выполняет соответствующий набор действий и направляет вызов по заданному направлению. К действиям можно отнести преобразование различных параметров вызова (изменить тип номера, категорию абонента и прочее) и даже полную замену всех символов А и B номеров.

Для настройки АТС необходимо определиться:

  • какие группы номеров и присоединения будут в станции;

  • на какие категории их можно разделить;

  • кому и какие привилегии будут доступны;

  • по каким признакам нужно будет различать разные группы и категории.

Тогда общая схема маршрутизации может выглядеть так:

Основы работы с телефонной коммутацией IT, Телекоммуникации, АТС, Huawei, Длиннопост

Схема обработки вызовов внутри станции Huawei SoftX3000 условного оператора связи.

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

Показать полностью 6

Корректировка символов А- и B-номеров на Huawei SoftX3000

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

Все такие посты можно найти в категории «Технические статьи» на нашем сайте.

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

При настройке телефонной маршрутизации возникает необходимость изменить (скорректировать) телефонный номер: как набираемый (B-номер), так и номер инициатора вызова (А-номер, АОН). Например, абоненты нашей станции набирают междугородние/федеральные номера через префикс «8», а вышестоящему оператору связи необходимо передавать номер без префикса, в десятизначном формате. Или вызовы на вашу станцию приходят с кодом зоны, а внутри станции используются номера в 6 или 7 знаков, и лишние символы необходимо удалить. Для корректировки номеров в Huawei SoftX3000 существует множество инструментов, применяемых в зависимости от конкретных случаев. Рассмотрим некоторые из них.

Таблица корректировки символов DNC

Для любых операций с изменением номера используются правила таблицы DNC. Эти правила применяются для непосредственной корректировки символов, а все прочие команды определяют, в отношении какого поля (А-номер или B-номер), на каком направлении (входящее/исходящее) и на какой транк-группе будет применено это правило.

Для добавления правила в эту таблицу используется команда ADD DNC.

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Назначение атрибутов и применение этой команды:

Number change index — порядковый номер правила. Используется для идентификации правила. В обновлённых версиях можно использовать любые текстовые названия.

Number change type — тип преобразования номера, принимает значения:

  • NONE — номер не изменяется. Используется, если нужно изменить только тип номера.

  • MOD — изменение цифр номера.

  • DEL — удаление цифр из номера. Указываем позицию, начиная с которой удаляются цифры (Change location) и количество цифр (Change length).

  • INS — добавление цифр в номер. Указываем позицию, куда вставляем цифры (Change location) и сами цифры (New number).

  • RPL — замена цифр в номере. Указываем позицию, с которой начинаются цифры для замены (Change location) и сами цифры (New number).

Change location — позиция цифр, которые подлежат корректировке. Начальная позиция — 0. Началом номера считается первая набираемая цифра слева направо, то есть в номере 8-905-123-45-67 первой цифрой будет 8.

Nature of address indicator — тип номера, принимает значения:

  • NONE — тип номера не изменяется;

  • IDN — международный номер;

  • NDN — национальный номер;

  • UDN — местный номер;

  • UNN — неизвестный номер;

  • SDN — специальный номер.

New number — добавляемые (изменяемые) цифры.

Для наглядности приведем реальные примеры таких правил:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

В таблице выше:

  • Правило №2 изменяет первый символ в номере (Change location — 0) на цифру 8 (New number).

  • Правило №4 удаляет первые (Change location — 0) 2 символа (Change length — 2) в номере и преобразует тип номера в международный.

  • Правило №9 заменяет первые (Change location — 0) 6 символов (Change length — 6) на номер 29xxxx.

  • В системе можно создать 65535 правил, правило под №0 — системное, изменению не подлежит.

Изменение А- и B-номеров на исходящем направлении

Для корректировки номеров на исходящих направлениях используются 2 таблицы:

  • TGLD: здесь компонуются правила для А- и B-номера.

  • TGLDIDX: указывает транк, для которого применяется правило TGLD, и условия, в которых оно применяется.

При добавлении записи командой ADD TGLD необходимо задать следующие обязательные параметры:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост
  • Bearer index — номер правила по порядку. Этот номер будет использоваться для идентификации в таблице TGLDIDX.

  • Trunk seizure point — минимальная длина набираемого номера.

  • Caller sending change index — правило из таблицы DNC, которое будет применено к А-номеру.

  • Callee sending change index — правило из таблицы DNC, применяемое к B-номеру.

Примеры записей TGLD:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Далее необходимо привязать созданное правило TGLD к транкам. Для этого используем команду ADD TGLDIDX:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Указываем следующие параметры:

  • Trunk group number — номер транка, к которому применяется данное правило.

  • Call source code — callsource источника вызова, по которому срабатывает правило. Если код отличается, правило не применится. Чтобы применить правило ко всем callsrc, необходимо указать wildcard-значение — 65534.

  • Local DN set — код Local DN set, к которому принадлежат номера/транки, совершающие вызов.

  • Call prefix — префикс, при наборе которого срабатывает правило.

  • Bearer index — номер правила из таблицы TGLD, которое было создано предыдущей командой.

Пример:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Рассмотрим правила, применяемые к транку №7 (столбец Trunk group number):

  1. Для вызовов с callsource=5 при наборе «8» будет применено правило TGLD=2.

  2. Для вызовов с любых прочих callsource при наборе 8 будет применено правило TGLD=17.

  3. Для вызовов с любых callsource при наборе 810 будет применено правило TGLD=1.

Изменение А- и B-номеров на входящем направлении

Для изменения атрибутов вызова во входящем направлении применительно ко всем входящим вызовам с определенным callsrc (это может быть группа транков или группа абонентов, объединённых этим параметром) используется таблица PFXPRO. Рассмотрим назначение параметров команды ADD PFXPRO сразу на примере:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Параметры имеют следующее назначение:

  • Call source code = 0 — правило будет применяться к входящим вызовам с callsrc=0 и только к ним.

  • Call prefix = 871229 — правило применяется, если B-номер начинается с этого префикса (871229).

  • Local DN set = 0 — набор номера должен производиться с транка или абонента, привязанного к Local DN set = 0. Следует отметить, что этот префикс (871229) должен присутствовать в таблице CNACLD с любым атрибутом в указанном Local DN set.

  • Called number change flag = true означает, что B-номер подлежит изменению.

  • Called number change index = 1  — B-номер будет изменён по правилу DNC=1, которое для наглядности приведено ниже:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Согласно данному правилу из номера B будут удалены первые 4 символа.

  • Reanalysis = true — после всех изменений вызов снова будет обработан как вновь поступивший и маршрутизирован согласно новым параметрам А- и B- номеров.

Таким образом, вызов, поступивший с атрибутом callsrc=0, в котором B-номер соответствует шаблону 871229хххх, вновь поступит на обработку, но уже с B-номером 29хххх, то есть будет вызван 6-значный номер внутреннего абонента станции.

Таблица PFXPRO также позволяет корректировать и А-номер (поля Caller number change flag и Caller number change index), назначать новое значение источника вызова (New call source code) и изменять некоторые другие поля.

В нашей станции эта таблица используется в нескольких целях:

  • Приведение B-номеров по входящему направлению к виду, который мы можем маршрутизировать. То есть от операторов связи приходит вызов на номер 871229xxxx, но мы используем сокращённую нумерацию 29xxxx. Следовательно, нам нужно отрезать первые 4 символа, чтобы распознать нашего абонента.

  • Номера некоторых экстренных служб имеют общий вид (6-значный городской номер), однако абонент набирает короткий номер службы (01, 02, 03). Нам нужно распознать такой набор и подменить номер на реальный. Также в зависимости от того, в какой местности расположен абонент, номера одной и той же службы могут быть разными. Для того чтобы учесть этот аспект, мы используем атрибут callsrc (назначаем каждому району свой callsrc и в соответствии с ним осуществляем подмену набранного номера).

Изменение атрибутов вызова на входящем направлении на определенном транке

Для корректировки атрибутов вызова на входящем транке используется таблица CLRDSN. Запись CLRDSN привязывается к определённому транку командой ADD TGDSG. В самой команде CLRDSN можно создать несколько правил корректировки, которые будут срабатывать в зависимости от А-номера:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Для добавления правила даём команду ADD CLRDSN:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Здесь заполняем следующие поля:

Discrimination group number — номер правила. По этому номеру выполняется привязка к транку в команде ADD TGDSG (в предыдущем примере мы рассматривали параметры правила №5).

Caller number — номер вызывающего, то есть А-номер. Можем указать конкретный номер или начальный префикс (например, если указать 995, правило будет действовать на все вызовы, которые совершаются с номеров, начинающихся на 995). Можно использовать символ Wildcard, то есть применить к любым возможным номерам. Для этого вводим символ E. Префикс в данном поле должен быть таким же, какой приходит из транка. Например, если установить префикс 906, а из транка будет приходить номер 8906 или 7906, правило не сработает.

Address nature — тип А-номера. Позволяет ограничить применение правила только к А-номерам определённого типа, то есть только для:

  • Unknown — неизвестный;

  • International — международный;

  • National — междугородний;

  • Subscriber — местный; 

  • All — все типы номеров.

Function code — тип действия с вызовом. Выбираем ATT (Modify caller attribute), то есть изменение атрибутов А-номера.

Call source code — если установить значение, код callsource будет изменен. Если оставить пустым, будет установлен callsource = 0.

Number change index — правило DNC, которое будет применено к А-номеру.

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

Как было сказано ранее, привязка правила CLRDSN к транку выполняется командой ADD TGDSG.

Эту функцию можно использовать для нескольких сценариев.

Сценарий 1

Подмена номера от подключённой УПАТС. Например, у нас есть некая УПАТС, которая подключена к нашей станции. Мы выдали им номер из нашей ёмкости, которую они должны использовать в качестве А-номера (29хххх). Однако по какой-то причине в поле А-номера абонент присылает нам внутренние номера своей станции (101, 102 и т.д.):

  • Добавим правило DNC, которое выполнит полную подмену номера на нужный:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост
  • Создадим правило, в котором применим правило DNC=15 (number change index = 15) ко всем входящим вызовам (number = E, Adress nature = All number):

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост
  • Привяжем правило CLRDSN=30 к транку №30 командой ADD TGDSG:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Блокировка нежелательных вызовов с транка (например, спам-звонков). Для блокировки вызовов в станции создан Local DNset с пустой таблицей маршрутизации (в таблице CNACLD нет никаких записей), также создан callsource (callsrc=4), привязанный к этому Local DNset. При совпадении А-номера с нежелательным вызову назначается callsrc=4, тем самым вызов не может быть маршрутизирован и будет отклонён.

Сценарий 3

Фильтрация входящих вызовов с транка. В данном случае изначально присваиваем транку callsrc=4. Теперь по умолчанию все входящие вызовы будут запрещены. Затем создаются правила CLRDSN с определёнными условиями, при соблюдении которых входящий вызов может быть маршрутизирован. При выполнении этих условий код callsrc заменяется на разрешённый, и вызов проходит. Условием для проверки обычно выступает префикс А-номера. Например, при входящих вызовах от сотового оператора все А-номера должны начинаться с символа «9». При входящих вызовах с наших УПАТС А-номер должен начинаться с цифр «29» и т.д.

Изменение атрибутов вызова по B-номеру для внутренних абонентов

Эта функция может использоваться для разных задач. Например, для ограничения исходящих вызовов для определённого абонента на определённый номер. В нашем примере это будут исходящие вызовы на префикс 810, то есть международные вызовы (эту задачу можно решить и другими способами).

Используем команду ADD CNACLR:

Корректировка символов А- и B-номеров на Huawei SoftX3000 IT, Маршрутизация, Huawei, Настройка, Длиннопост

Здесь выделим следующие параметры:

  • Call source code — код callsrc, к которому принадлежит номер.

  • Call prefix — префикс, при наборе которого срабатывает правило.

  • Caller number — номер телефона абонента, к которому применяется правило. Здесь также применимо выражение Wildcard, то есть «применить правило к любому номеру, установив символ E».

  • Function code — тип обработки вызова. В данном случае используем изменение B-номера, выбрав Modify caller attribute.

  • Caller number change index — правило DNC, которое применяется к А-номеру.

  • Called number change index — правило DNC, которое применяется к B-номеру.

  • Reanalysis flag = true — устанавливаем данный флаг для повторной обработки вызова в таблице маршрутизации с новыми параметрами.

Приведённое правило используется в следующем сценарии. В организации приобретён номер 8-800, вызовы на этот номер переадресовываются на локальный номер станции 29хххх. При помощи данного правила мы можем обнаружить набор этого номера 8-800 локальными абонентами и подменить его на локальный номер назначения внутри станции, тем самым избежав тарификации этих вызовов на платформе 8-800, а также снизив внешний трафик.

В этом материале мы рассмотрели некоторые инструменты для корректировки символов А- и B-номеров на станции Huawei SoftX3000 и сценарии их применения. При написании материала использовалась станция Huawei SoftX3000 V300R600, но команды применимы на более свежих версиях, а принцип их применения — примерно такой же.

Показать полностью 15
Отличная работа, все прочитано!