пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ bgp
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Коммуникационная платформа Elastix обладает богатым функционалом и привлекательным интерфейсом. В сегодняшней статье мы пошагово разберем процесс настройки внутренних номеров (Extensions) на Elastix версии 4.0 и зарегистрируем программный «open – source» телефон MicroSIP
Настройка на Elastix
Переходим в web – интерфейс Elastix. Для этого введите IP – адрес АТС в браузере. Откроется окно авторизации. Введите логин и пароль администратора и нажмите Submit:
Попадаем в интерфейс администратора IP – АТС. В левом меню навигации переходим в раздел PBX → PBX Configuration, где выбираем раздел настройке Extension, как показано на рисунке ниже (выделено красным):
Мы будем подключать софтфон по протоколу SIP, поэтому, выбираем Generic SIP Device и нажимаем Submit:
Для работы телефона достаточно создать только 3 реквизита, а именно:
User Extension - внутренний номер абонента
Display Name - отображаемое имя для абонента
secret - пароль. Создается автоматически
После заполнения данных полей, нажмите Submit, а затем Apply Config. Этого достаточно для работы софтфона, и если вы хотите сразу перейти к настройке самого программного телефона, нажмите на ссылку ниже, а мы пока рассмотрим все возможные опции в разделе Extensions:
Настройка MicroSIP
Разберем каждую опцию подробно. Начнем с раздела опций внутреннего номера (Extension Options):
CID Num Alias - CallerID, который будет отражаться на телефонах вызываемых абонентов, в качестве определяемого номера. Эта опция может быть полезна в следующей ситуации: например, существует общий номер для сотрудников бухгалтерии (ринг группа). При звонках со своих внутренних номеров на другие экстеншены, у вызываемого абонента будет отражаться привычный номер ринг – группы, на который он обычно звонит для связи с Бухгалтерией.
SIP Alias - используется при прямых SIP – звонках. Например, staff@merionet.ru.
Outbound CID - исходящий CallerID (как правило, при внешних звонка через транк, провайдер так или иначе будет перекрывать CID).
Asterisk Dial Options - перечень опций, передаваемых через команду Dial(). В нашем примере мы имеем значение tr. Здесь «t» означает возможность трансфера звонка вызываемым абонентом, а опция «r», генерирует гудок вызывающему абоненту при звонке.
Ring Time - время звонка в секундах, перед отправкой вызова на голосовую почту.
Call Forward Ring Time - время звонка в секундах, перед отправкой вызова на указанное направление недоступностей вида «не ответ» или «недоступность».
Outbound Concurrency Limit - максимальное количество одновременных исходящих от пользователя вызовов.
Call Waiting - данная опция позволяет получать параллельный во время разговора вызов по тому же каналу.
Internal Auto Answer - если данное значение выставлено на Intercom, то будет происходить автоматический ответ на входящий вызов.
Call Waiting - при включении данной опции, звонящему, будет предложено проговорить свое имя, после чего, звонок продолжится. Вызываемый абонент возьмет трубку и ему будет озвучено имя звонящего, и так же система спросит, ответить ли на этот звонок или нет.
Pinless Dialing - если на исходящих маршрутах существует пин – код, то при включении этой опции, пользователю не потребуется его вводить.
Emergency CID - при звонках через маршрут, который обозначен как «Аварийный» (Emergency Route), данный CallerID будет передаваться в сторону SIP – провайдеру превалируя над всеми правилами по изменению CID.
Queue State Detection - если данный внутренний номер состоит в одной из очередей, то при опциях Use State и Ignore State (использовать или игнорировать состояние соответственно), данный номер будет вызваниваться в зависимости от состояния доступности, или нет.
Перейдем к небольшому разделу Assigned DID/CID:
DID Description - описание для DID (Direct Inward Dialing). По факту, DID это набранный внешним абонентом номер, при вызове которого звонок будет маршрутизирован на конкретный внутренний номер. Например, вы можете написать «Support»
Add Inbound DID - входящий DID для этого внутреннего номера. При звонках на него вызов пробросится сразу на экстеншен.
Add Inbound CID - CallerID, вызовы с которого, будут маршрутизироваться на внутренний номер .
Теперь рассмотрим служебные опции настройки подключаемого устройства:
dtmfmode - метод передачи DTMF сигналов. Как правило, это RFC 2833
canreinvite - при включении данной опции будут поддерживаться re-invite по протоколу SIP
context - контекст обработки вызова. Советуем здесь оставить from-internal, если вы не создаете кастомные контексты.
host - здесь можно указать IP – адрес, с которого будет подключаться устройство. Советуем оставить dynamic.
- метод передачи DTMF сигналов. Как правило, это RFC 2833
trustrpid - доверять ли идентификатору RPID (Remote-Party-ID)
sendrpid - должен ли Asterisk отправлять RPID на это устройство
type - выберите тип устройства. Как правило, для конечных телефонных аппаратов используется friend
nat - выберите опцию трансляции сетевых адресов. Рекомендуем оставить RFC 3581
port - оставьте стандартный SIP – порт 5060
qualify - при включенной данной опции, Asterisk посылает сообщения, в которых опрашивает состояние устройства
qualifyfreq - частоты отправки сообщений qualify. Указывается в секундах.
transport - транспортный протокол для передачи данных.
avpf - видео/аудио профиль для передачи данных WebRTC
icesupport - включить или выключить поддержку ICE (Interactive Connectivity Establishment), который позволяет корректную работу пользователей, находящихся за фаерволом.
dtlsenable - использовать ли для этого устройства безопасный транспортный протокол DTLS (Datagram Transport Layer Security)
dtlsverify - совершать ли проверку сертификата DTLS у данного устройства
dtlssetup - на каких направлениях вызова использовать DTLS – входящих, исходящих или сразу обоих.
encryption - использовать ли шифрование по протокол SRTP
dial - как вызвать это устройство. В нашей примере, это SIP/111, то есть набор через SIP канал номера 111.
mailbox - ящик голосовой почты для устройства
deny - подсеть, с которой запрещен доступ к данному устройству
permit - подсеть, с которой разрешен доступ к данному устройству
Теперь давайте рассмотрим раздел Recording Optoins:
Inbound External Calls - записывать ли входящие из города на этот внутренний номер
Outbound External Calls - записывать ли исходящие в города с этого внутреннего номера
Inbound Internal Calls - записывать ли входящие с других внутренних номеров на этот номер
Outbound Internal Calls - записывать ли исходящие звонки с этого внутреннего номера на другие внутренние номера
On Demand Recording - разрешить ли запись по требованию на этом телефоне. Запись сохраняется, если пользователь произведет набор сервисного кода *1
Record Priority Policy - приоритет записи разговоров. Например, если произошел разговор между двумя внутренними телефонными аппаратами, и у одного из них параметр, равен 20, а у другого 10, тот, у которого параметр выше сможет сохранить запись разговора, а тот, у которого ниже – нет.
Теперь разберемся с голосовой почтой:
Status - включить или выключить голосовую почту.
Voicemail Password - пароль доступа к голосовой почте. Пароль должен содержать только цифры
Email Address - адрес электронной почты, куда будут отправляться голосовые сообщения.
Email Attachment - отправлять ли аудио голосовой почты в формате вложения в электронном письме
Play CID -озвучивать ли абоненту, который собирается прослушать голосовую почту, номер звонящего.
Play Envelope - озвучивать ли абоненту при прослушивании голосовой почты дату и время звонка
Delete Voicemail - удалять ли звуковой файл с сервера после отправки его по электронной почте.
И наконец, разберем важный пункт, который называется Optional Destinations, который отвечает за маршрутизацию вызова при таких обстоятельствах как «не ответ», «занято» и «недоступен»:
No Answer - куда отправлять вызов, если абонент не ответил на звонок
Busy - куда отправлять вызов, если абонент занят разговором
Not Reachable - куда отправлять вызов, если телефонный аппарат абонента недоступен
Настройка MicroSIP
Итак, после того, как мы создали учетную запись для внутреннего номера, перейдем к настройке программного телефона. Переходим по пути Меню → Добавить аккаунт
SIP сервер - IP – адрес Elastix
Пользователь - внутренний номер созданного абонента
Домен - так же указываем IP Эластикса
Логин - еще раз указываем внутренний номер абонента
Пароль - копируем пароль из поля secret
Нажимаем «Сохранить». Как видим, наш софтфон зарегистрировался и находится в статусе «Онлайн»:
Сегодня бы хотелось рассказать об IVR (Interactive Voice Response).
IVR – автоматическая система обслуживания клиентского обращения. С его помощью, повышается качество и скорость обслуживания клиентов, следовательно, растет лояльность по отношению к компании. IVR позволяет сегментировать клиентские обращения, тем самым, оптимизирует работу операторов и уменьшает время решения клиентского запроса.
Безусловно, IVR – системы бывают разные. В крупном бизнесе, дорогие IVR - системы имеют возможность в реальном времени синтезировать речь (ASR), проговаривать текст (TTS), имеют интерфейсы к базам данных (DB), через которые «парсят» запрашиваемую информацию. Такие решения предлагают крупные игроки рынка контактных центров, такие как Cisco Systems, Genesys и Avaya. IVR – системы в таких случаях состоят из сложных скриптов, созданных в специальных графических редакторах.
В малом и среднем бизнесе, зачастую, потребности в сложных системах нет. В большинстве случаев, голосовое приветствие с предложением нажать одну из кнопок на телефоне, чтобы соединиться с отделом, или ввести номер для соединения с конкретным сотрудником – является самым оптимальном в соотношение стоимости к результативности.
Давайте рассмотрим технологию VXML (Voice eXtensible Markup Language). Язык программирования XML является гибким инструментом для решения ряда задач. Благодаря не сложному синтаксису, нашел повсеместное применение. VXML – это адаптация XML для голосовых приложений.
Давайте взглянем на схему ниже.
Этот пример реализован на базе технологий Cisco. На базе шлюза, функционирует телефонная платформа CME (Call Manager Express). Предположим, к нам приходит звонок из ТфОП c номера +7-495-2234567 (Телефонная сеть общего пользования), я входящий Dial-Peer видит совпадение.
gateway#configure terminal
gateway(config)#dial-peer voice 100 pots
gateway(config-dial-peer)#description VXML-IVR-TEST
gateway(config-dial-peer)#incoming called-number 74952234567
gateway(config-dial-peer)#service VXML-IVR
Как только dial-peer совпал, шлюз обращается к flash памяти и запускает выполнение скрипта с названием VXML-IVR. При нажатии кнопок телефона события обрабатываются по DTMF.
Ниже показан простейший пример:
<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" xml:lang="ru-RU">
<form id=" Greeting">
<block>
<prompt>
Здравствуйте! Вы позвонили в компанию…
</prompt>
</block>
</form>
</vxml>
Логика обработки входящего звонка диктуется только заказчиком. Стоимость такого решения гораздо ниже, чем серьезные голосовые платформы специально разработанные вендорами.
IVR позволяет массово информировать клиентов о каких-либо изменениях, сокращает время обслуживания, повышает лояльность клиента.
Мы с радостью поможем создать для Вашего бизнеса голосовое меню, составить техническое задание, написать VXML скрипты.
Сегодня в статье рассказываем про плагин kubectl, который использует tmux, чтобы быстрее устранить неполадки Kubernetes.
Kubernetes - это процветающая платформа для взаимодействия контейнеров с открытым исходным кодом, которая обеспечивает масштабируемость, высокую доступность, надежность и отказоустойчивость приложений. Одной из его многочисленных функций является поддержка запуска пользовательских сценариев или двоичных файлов через основной двоичный файл клиента, kubectl. Kubectl очень мощный, и позволяет пользователям делать с ним все, что они могли бы сделать непосредственно в кластере Kubernetes.
Устранение неполадок с псевдонимами Kubernetes
Каждый, кто использует Kubernetes для управления контейнерами, знает о его особенностях - а также о сложности, причиной которого является его дизайн. Например, существует острая необходимость упростить поиск и устранение неисправностей в Kubernetes с помощью чего-то более быстрого и практически не требующего ручного вмешательства (за исключением критических ситуаций).
Существует много сценариев, которые следует учитывать при устранении неполадок. В одном сценарии вы знаете, что нужно запускать, но синтаксис команды - даже если она может выполняться как одна команда - чрезмерно сложен, или для работы может потребоваться один-два входа.
Например, если часто требуется перейти в запущенный контейнер в пространстве имен System, вы можете неоднократно писать:
kubectl --namespace=kube-system exec -i -t <your-pod-name>
Для упрощения поиска и устранения неисправностей можно использовать псевдонимы этих команд в командной строке. Например, можно добавить следующие файлы dotfiles (.bashrc или .zshrc):
alias ksysex='kubectl --namespace=kube-system exec -i -t'
Это один из многих примеров из хранилища общих псевдонимов Kubernetes, который показывает один из способов упрощения функций в kubectl. Для чего-то простого, подобного этому сценарию, достаточно псевдонима.
Переключение на подключаемый модуль kubectl
Более сложный сценарий устранения неполадок включает в себя выполнение множества команд, одной за другой, для исследования среды и выведения заключения. Одних псевдонимов недостаточно для этого варианта использования; необходима воспроизведение логического узла и корреляция между многими частями развертывания Kubernetes. На самом деле вам нужна автоматизация для получения нужного результата за меньшее время.
Рассмотрим пространства имен от 10 до 20 или даже от 50 до 100, содержащие различные микросервисы в вашем кластере. Что поможет вам начать устранение неполадок в этом сценарии?
Вам потребуется что-то, что может быстро определить, какой модуль в каком пространстве имен вызывает ошибки.
Вам понадобится что-то, что сможет просматривать журналы всех модулей в пространстве имен.
Также может потребоваться просмотр журналов определенных модулей в определенном пространстве имен, в котором были обнаружены ошибки.
Любое решение, охватывающее эти вопросы, было бы очень полезно при изучении производственных проблем, а также в ходе циклов разработки и тестирования.
Чтобы создать нечто более мощное, чем простой псевдоним, можно использовать плагины kubectl. Плагины подобны автономным сценариям, написанным на любом языке сценариев, но предназначены для расширения функциональных возможностей главной команды при работе в качестве администратора Kubernetes.
Чтобы создать плагин, необходимо использовать правильный синтаксис kubectl- < имя-плагина > для того, чтобы скопировать сценарий в один из экспортированных путей в $PATH и предоставить ему исполняемые разрешения chmod+x.
После создания плагина и перемещения его в свой путь, вы можете немедленно запустить его. Например, у меня на пути есть kubectl-krwl и kubectl-kmux:
$ kubectl plugin list
The following compatible plugins are available:
/usr/local/bin/kubectl-krawl
/usr/local/bin/kubectl-kmux
$ kubectl kmux
Теперь давайте изучим, как выглядит обеспечение работы Kubernetes с tmux.
Использование силы tmux
Tmux - очень мощный инструмент, на который полагаются многие команды для устранения проблем, связанных с упрощением работы - от разделения окон на панели для выполнения параллельной отладки на нескольких машинах до мониторинга журналов. Одним из основных его преимуществ является то, что его можно использовать в командной строке или в сценариях автоматизации.
Я создал плагин kubectl, который использует tmux, чтобы сделать поиск и устранение неисправностей гораздо проще. Я буду использовать аннотации, чтобы пройти через логику за плагином (и оставить его для вас, чтобы пройти через полный код плагина):
#NAMESPACE is namespace to monitor.
#POD is pod name
#Containers is container names
# initialize a counter n to count the number of loop counts, later be used by tmux to split panes.
n=0;
# start a loop on a list of pod and containers
while IFS=' ' read -r POD CONTAINERS
do
# tmux create the new window for each pod
tmux neww $COMMAND -n $POD 2>/dev/null
# start a loop for all containers inside a running pod
for CONTAINER in ${CONTAINERS//,/ }
do
if [ x$POD = x -o x$CONTAINER = x ]; then
# if any of the values is null, exit.
warn "Looks like there is a problem getting pods data."
break
fi
# set the command to execute
COMMAND=”kubectl logs -f $POD -c $CONTAINER -n $NAMESPACE”
# check tmux session
if tmux has-session -t <session name> 2>/dev/null;
then
<set session exists>
else
<create session>
fi
# split planes in the current window for each containers
tmux selectp -t $n ;
splitw $COMMAND ;
select-layout tiled ;
# end loop for containers
done
# rename the window to identify by pod name
tmux renamew $POD 2>/dev/null
# increment the counter
((n+=1))
# end loop for pods
done< <(<fetch list of pod and containers from kubernetes cluster>)
# finally select the window and attach session
tmux selectw -t <session name>:1 ;
attach-session -t <session name>;
После запуска скрипта плагина он будет выдавать выходные данные, аналогичные изображению ниже. Каждый модуль имеет собственное окно, и каждый контейнер (если их несколько) разделяется панелями в окне модуля в потоковые журналы по мере их поступления. Преимущество tmux можно увидеть ниже; При правильной конфигурации можно даже увидеть, какое окно активно (см. белые вкладки).
Заключение
Псевдонимы всегда полезны для простого устранения неполадок в средах Kubernetes. Когда среда становится более сложной, плагин kubectl является мощным вариантом для использования более продвинутых сценариев. Ограничения в выборе языка программирования, который можно использовать для записи плагинов kubectl, нет. Единственное требование состоит в том, чтобы соглашение об именовании в пути являлось исполняемым и не имело того же имени, что и существующая команда kubectl.
Прочитать полный код или попробовать плагины можно тут
