По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Вы чувствуете себя опустошенным и увязшим в рутине? В 2023 году больше половины опрошенных россиян сообщили, что готовы сменить работу, если получат хорошее предложение. Как определить, что пришло время двигаться дальше? Мы собрали несколько признаков, которые вы можете использовать в качестве определяющего фактора. «Красные флаги», которые помогут понять, стоит ли менять работу Вы переросли свою работу. Вы начали работать, чтобы лучше изучить любимую сферу, но теперь уперлись в потолок? Если вы не можете применять весь свой опыт на нынешней работе, то, возможно, пришло время найти должность, где все ваши навыки будут востребованы. Если вы чувствуете, что застряли, и не видите возможности продвинуться по карьерной лестнице, оставаться просто неразумно. Если вы достигли всех целей, которые ставили перед собой при трудоустройстве, то, возможно, пришло время сменить работу. Вы чувствуете нестабильность. Мир сейчас сильно отличается от того, каким он был еще 10 лет назад. Перетекающие из одного в другой кризисы, развитие аутсорса, сокращения — гарантии стабильной занятости действительно ушли в прошлое. Конечно, никто не может быть полностью защищен от потери работы, но есть разница между конкурентным рынком и компанией в шторме. Если людей нанимают и увольняют по прихоти, а вам приходится каждый день мучиться в ожидании, не станете ли вы следующим, избавьте себя от лишней тревоги и начните искать новое место. Зарплата не отражает ваш опыт. Вы можете мириться с низкой зарплатой, если в этом есть какой-то смысл — например, сейчас вы только набираетесь опыта. Но без веских причин оставаться в компании, которая платит вам мало, бессмысленно. Если вы видите, что ваша компания не пытается удержать вас, предлагая деньги, соответствующие вашим навыкам и опыту, то вам следует поискать работодателя, который даст вам то, что вы заслуживаете. Вы чувствуете себя ненужным. Легко подумать, что отсутствие дел на работе — это здорово. Но каждый, кто сталкивался с продолжительным штилем, знает, что должность, на которой вы не встречаете челленджей, может стать настоящим проклятием. Быть востребованным — важнейшее условие для того, чтобы любить свое дело. В противном случае легко почувствовать скуку, беспокойство и непродуктивность. Вас не устраивает рабочая атмосфера. Нездоровая атмосфера — понятие довольно расплывчатое, но при этом вы не перепутаете ее ни с чем другим. Она может проявляться в мелочах — например, коллеги не здороваются друг с другом, начальство поддерживает пассивно-агрессивный тон общения, а сотрудники берут много необъяснимых больничных. На более высоком уровне компания может постоянно требовать от сотрудников неоплачиваемой сверхурочной работы, неуместно общаться с работниками или клиентами. Пробелы в корпоративной этике могут говорить о серьезных проблемах в компании, либо же вы можете просто столкнуться с противоречием между вашей личной этикой и этикой вашей компании. В любом случае, в долгосрочной перспективе это может привести к проблемам в работе. Вы понимаете, что компания находится на грани краха. Есть несколько признаков, указывающих на то, что компания или подразделение терпит крах. Сотрудники теряют работу, менеджеров и директоров смещают или присваивают им новые должности, в офисе сокращают основные расходы («а сотрудники разве всегда покупали кофе за свой счет?»). Если вы видите, что компания тонет, самое время найти новую работу. Если вы видите верные признаки того, что ваша компания движется к беде, разработайте план — и быстро. Нет необходимости идти на дно вместе с кораблем; сделайте стратегический шаг и уходите, пока еще есть возможность. Какие вопросы все-таки можно решить Есть ситуации, в которых можно не решать вопрос радикально. Они могут быть обусловлены временными трудностями, которые можно преодолеть через открытый разговор с руководителем. Приведем несколько примеров: Вы не понимаете, что от вас хотят. Если у вас возникли вопросы относительно того, что от вас ждут рамках текущей роли, поговорите с руководством — скорее всего, это прояснит ситуацию. Скучные проекты. Если вас не устраивают текущие проекты, возможно, стоит обсудить этот вопрос с начальством и предложить альтернативные варианты. У вас есть контроффер. Не спешите молча уходить на новую работу — вполне возможно, что честное обсуждение контроффера с руководителем приведет к тому, что условия вашей работы пересмотрят в сторону подходящих рабочих задач и более высокой оплаты. Конфликты в коллективе: если возникли проблемы с коллегами или руководством, первым шагом может быть обсуждение этих вопросов с HR-отделом и вашим руководителем. Личные трудности: иногда личные проблемы могут временно влиять на работоспособность. В этом случае, обратившись к руководителю, можно попытаться найти временные решения и поддержку. Вы недовольны собой и своей работой. Это сложный вопрос, поскольку он предполагает признание поражения. Худшая ошибка, которую вы можете совершить — решить, что у вас нет таланта и молча уйти. Мы не можем быть хороши во всем, так что попробуйте поговорить с руководителем, попросить его совета касательно роста и обучения. Помните, что открытый диалог и общение с начальством могут помочь решить многие проблемы, и иногда этот подход более эффективен, чем смена работы. Вы решились сменить работу: что делать дальше Смена работы — важный этап, и подготовка к этому требует внимания. Оцените свои цели и мотивации: разработайте четкое представление о том, почему вы хотите сменить работу, определите ваши карьерные цели и ожидания от нового места работы. Обновите свое резюме и профиль на LinkedIn: подчеркните свой опыт, достижения и навыки, поделитесь конкретными результатами и успехами на предыдущих местах работы. Исследуйте рынок труда, подготовьтесь к собеседованиям: узнайте больше о компаниях, которые вас интересуют, подготовьте ответы на типичные вопросы с собеседований. Повышайте свои профессиональные навыки и следите за новыми тенденциями в вашей области. Будьте гибкими и терпеливыми: постарайтесь не ограничиваться определенными компаниями или должностями и будьте готовы к тому, что процесс поиска работы может занять время. Что в итоге? Помните, что любой совет извне не ультимативный, и только вам решать, стоит ли менять работу. Иногда из колеи может выбить то, что со стороны кажется мелочью — и в этом случае смело ищите новую работу. Если вы постоянно миритесь с ситуацией, в которой вам дискомфортно, то рано или поздно это скажется на вашей продуктивности и самочувствии. Будьте смелее! Найдите то, что подходит вам больше, и уже в следующем году вы сможете стать намного счастливее. Если вам нужно подтянуть какие-то знания, а то и полностью сменить сферу деятельности — приходите учиться в Merion Academy.
img
На просторах Интернет можно найти много инструкций по настройке Asterisk с использованием графического интерфейса FreePBX. И они помогают настраивать и управлять АТС в большинстве случаев. Но гораздо больше возможностей дает настройка «чистого» Asterisk. В статье мы сделаем базовую настройку Asterisk через конфигурационные файлы. Предполагается, что у нас уже установлена и первоначально настроена ОС, скачены и установлены модули dahdi, libpri, iax2, необходимые голосовые файлы и кодеки и проинсталлирован Asterisk. Если вы еще не ничего не установили, то посмотрите в нашей статье как установить Asterisk на CentOS 7 А еще вам понадобится установить sngrep для трассировки и отладки SIP-сообщений. Погнали? Теория Итак, приступаем к внедрению Asterisk. Структура используемых Астериском директорий следующая: /usr/lib64/asterisk/modules – тут находятся загружаемые модули; /var/log/asterisk – тут находятся лог-файлы, в том числе и лог звонков (если не настроено другое); /var/spool/asterisk – тут находятся подпапки, в которых находятся бэкапы, записи разговоров, голосовая почта, факсы и так далее; /var/lib/asterisk – тут находятся подпапки, в которых находятся звуковые файлы для музыки на удержании, звуковые файлы для выбранных языков (например для проигрывания голосовых сообщений в IVR), записанные голосовые сообщения для приветствия и так далее. Конфигурационные файлы находятся в папке /etc/asterisk. Для работы каждого модуля Asterisk необходим конфигурационный файл. Эти файлы (с расширением .conf), содержат определения каналов, описывают различные внутренние сервисы, определяют местоположения других модулей, устанавливают связь с диалпланом. Необязательно настраивать все файлы. Требуют настройки только те, которые необходимы для вашей конфигурации. Основные конфигурационные файлы: asterisk.conf – определяет глобальные параметры, директории и опции для запуска Asterisk; cdr.conf – определяет настройки для записи параметров вызовов в файл или базу данных; sip.conf – определяет настройки для использования SIP-протокола (как общие, так и параметры для регистрации провайдеров, внутренних пользователей и так далее); rtp.conf – определяет порты для голоса (RTP); iax.conf – определяет настройки для использования IAX-протокола (как общие, так и параметры для регистрации провайдеров, внутренних пользователей и так далее); extensions.conf – основной файл, в котором описывается весь диалплан, то есть правила обработки всех вызовов; features.conf – описывает дополнительные функции (переадресации, парковка вызова, включение записи по запросу и так далее); logger.conf – определяет тип и детальность сообщений, записываемых в файлы журналов; modules.conf – определяет какие модули будут или наоборот не будут загружаться при запуске Asterisk; musiconhold.conf – используется для конфигурации разных классов музыки, используемых в приложениях музыки во время ожидания, и их местоположений; Напомним, что это только часть конфигурационных файлов. Необходимые файлы можно добавлять в любой момент по мере необходимости. Примеры и содержание таких файлов можно найти в архиве по кнопке ниже: Скачать архив Сразу после установки asterisk, если не была выбрана установка базовой конфигурации, в ней нет ни одного файла. Для подключения к asterisk в режиме командной строки необходимо ввести asterisk –rvvvvv r – подключение к уже запущенному процессу; vvvvv – уровень логирования, то есть вывода информации (от слова verbose - v). Чем больше v выставляем, тем более детальная информация будет выдаваться в командную строку; Создаем и редактируем необходимые файлы Начнем с файла asterisk.conf: [directories](!) – указываем расположение необходимых директорий. Знаком (!) указывается признак шаблона. В шаблоне указываются общие настройки, на которые можно ссылаться дальше. [options] – указываем необходимые опции, одна из необходимых maxcalls указывает на количество одновременных вызовов, разрешенных на Asterisk; transmit_silence_during_record = yes - передавать тишину SLINEAR во время записи канала; languageprefix = yes | no - Должен ли код языка быть последним или первым компонентом имени звукового файла? Если выключен, поиск звуковых файлов ведется в формате // Если включен, поиск ведется в формате //; execincludes = yes | no - Разрешить записи #exec в конфигурационных файлах; hideconnect = yes | no - Показывать сообщение о подключении удаленных консолей; dontwarn = yes | no - Отключить предупреждения (warning messages); debug = no - Отладка: No или значение (1-4); maxcalls = 10 - Максимальное число одновременных вызовов; Приступаем к файлу cdr.conf. Комментарии к опциям в конфиге: [general] enable=yes ; включаем саму возможность логирования звонков unanswered=no ; неотвеченные звонки не логируем safeshutdown=yes ; при выключении сервера будем ждать, пока не допишутся ВСЕ логи [csv] usegmtime=yes ;лог date/time в формате GMT. По умолчанию NO loguniqueid=yes loguserfield=yes Закончили. Теперь файл features.conf: [general] [featuremap] ; тут описываем используемые функции и их параметры blindxfer => ## ; безусловный перевод atxfer => *2 ; условный перевод automon => *1 disconnect => ** parkext => 700 ; парковка parkpos => 710-780 ; диапазон портов для парковки context => parkedcalls ; контекст для обработки запаркованных звонков parkingtime => 180 ; время парковки comebacktoorigin => no ; возвращать звонок на инициатора, когда закончилось время парковки вызова parkedplay => both ; кому играть courtesytone когда вызов снимается с парковки. Опции: callee, caller, both или no(по умолчанию) parkedcalltransfers => caller ; Кто может сделать трансфер припаркованного вызова с помощью DTMF. Опции: callee, caller, both или no(по умолчанию) parkedcallrepark => caller ; Кто может перепарковать, припаркованный вызов с помощью DTMF. Опции: callee, caller, both или no(по умолчанию) parkedcallhangup => no ; Кто может закончить, припаркованный вызов с помощью DTMF Опции: callee, caller, both или no(по умолчанию) parkedcallrecording => no ; Кто может инициировать запись, с помощью DTMF. Опции: callee, caller, both или no(по умолчанию).. parkedmusicclass => default ; Класс музыки ожидания для припаркованного, adsipark => no ; Передавать или нет ADSI инфо о припаркованном вызове тому кто припарковал findslot => first pickupexten => *8 ; перехват звонка [applicationmap] ; тут описываем используемые приложения sendsms => *99,peer/both,Macro,sendsms pitch => *00,self/both,Macro,pitch Теперь конфигурируем RTP в файле rtp.conf [general] rtpstart=36600 rtpend=39999 Музыка на ожидании в здании. Открываем файл musiconhold.conf [default] mode=files directory=/var/lib/asterisk/moh/ Следом открываем файл logger.conf: [general] [logfiles] console => notice,warning,error,dtmf,verbose(5) ; уровень детализации сообщений, выводимых в консоль full => debug,notice,warning,error,verbose(9),dtmf,fax,security ; уровень детализации сообщений, выводимых в лог-файл Для удобства работы рекомендуется ограничивать уровень детализации сообщений, выводимых в консоль, но для вывода в файл выставить максимальный уровень детализации. И напоследок - файл modules.conf. Есть 2 варианта: либо читаем все модули и указываем те, которые не надо читать: [modules] autoload=yes noload => codec_g723-ast110-gcc4-glibc-x86_64-core2-sse4.so Либо указываем конкретные модули, которые необходимо прочитать и запрещаем чтение всех. В этом случае для удобства лучше поделить модули на секции. Ниже приведена часть такого варианта: [modules] autoload = no ; Applications load = app_bridgewait.so load = app_dial.so load = app_playback.so ; Bridging load = bridge_builtin_features.so load = bridge_builtin_interval_features.so load = bridge_holding.so ; Call Detail Records load = cdr_custom.so ; Channel Drivers load = chan_bridge_media.so load = chan_sip.so ; Codecs load = codec_gsm.so load = codec_ulaw.so load = codec_alaw.so load = codec_g722.so ; Formats load = format_gsm.so load = format_pcm.so load = format_wav_gsm.so load = format_wav.so ; Functions load = func_callerid.so load = func_cdr.so load = func_pjsip_endpoint.so ; Core/PBX load = pbx_config.so ; Resources load = res_musiconhold.so load = res_pjproject.so load = res_pjsip_acl.so В данной статье мы используем первый вариант. На этом с настройкой основных файлов закончим. В дальнейшем по мере необходимости в них можно вносить изменения. Все последующие настройки мы будем вносить в файлы sip.conf и extensions.conf. Погнали к созданию и регистрации внутренних абонентов. Создание и регистрация внутренних абонентов В sip.conf указываем сначала общие параметры SIP для Asterisk: [general] bindaddr=0.0.0.0 ; указываем IP-адрес и порт, на котором будет приниматься bindport=5060 ; SIP-трафик language=ru ; используемый язык для голосовых сообщений alwaysauthreject=yes allowguest=no ; запрещаем принимать «гостевые» звонки, то есть вызовы от незарегистрированных пользователей Так же в этой секции можно указать поддерживается ли видео, время регистрации, перечислить локальные сети, указываем внешний IP-адрес в случае использования NAT и так далее. В случае, когда у нас есть разные группы абонентов (например, есть несколько отделов, подразделений либо другие какие-то признаки группировки абонентов или абонентов большое количество), рекомендуется использовать шаблоны, в которые можно выносить обобщенные настройки. Имя шаблона берется в скобки [ ] и следом указывается (!). В шаблоне можно указать контекст для этих абонентов, используемые кодеки, разрешенные/запрещенные сети для регистрации этих абонентов, использование NAT и так далее. Пример шаблона приведен ниже: [office](!) type=friend deny=0.0.0.0/0.0.0.0 permit=192.168.10.0/255.255.255.0 host=dynamic context=from-internal nat=no qualify=yes directmedia=no disallow=all allow=alaw allow=ulaw dtmfmode=info И таких шаблонов можно может быть несколько. Теперь для создания записи для регистрации абонентов нам достаточно указать только отличительные параметры, такие как внутренний номер, имя абонента, пароль для регистрации и так далее. [НОМЕР](ШАБЛОН) callerid=ИМЯ secret=ПАРОЛЬ callgroup=5 ; номер группы вызова pickupgroup=1,2,3,4,5 ; номера групп перехвата вызовов Пример настройки: В результате, по команде sip show peers мы видим зарегистрированных пользователей Абоненты зарегистрировались, но позвонить даже между собой они пока не могут. Для того, чтобы они могли совершать и принимать звонки необходимо настроить маршрутизацию (или диалплан). Делать это мы будем в файле extensions.conf, там тоже есть своя структура. И тут мы снова немного погружаемся в теорию: Диалплан состоит из следующих основных элементов: контексты; добавочные номера; приоритеты; приложения; Контекст – часть (раздел) диалплана, описывающая алгоритм обработки вызова и изолированная от остального диалплана. Содержит дополнительные номера (extension). Дополнительные номера, определенные в одном контексте, полностью изолированы от добавочных номеров в другом контексте, если это не разрешено специально. Так же с помощью контекстов можно ограничивать доступ к различным функциям (например к междугородним или международным звонкам). Имя контекста заключается в квадратные скобки []. Рекомендуется создавать разные контексты для внутренних абонентов и для транков. В начале диалплана находятся два специальных контекста, [general] и [globals] [general] – содержит список общих настроек диалплана; [globals] – содержит глобальные переменные; Эти два контекста являются специальными. Контекст является одним из обязательных параметров как для абонента, так и для транка. Asterisk определяет контекст для обработки по тому принципу откуда пришел вызов, а не куда он пришел, то есть если пришел вызов на мобильный номер от абонента, то применяться будет тот контекст, который прописан у конкретного абонента, а не указанный в транке. Добавочные номера – это широкое понятие, которое определяет уникальные последовательности шагов (каждый шаг включает приложение), которые Asterisk будет применять к вызову по этой линии. В каждом контексте может быть задано столько добавочных номеров, сколько требуется. При вызове конкретного добавочного номера (входящим или внутренним звонком) Asterisk будет выполнять шаги, определенные для этого добавочного номера. Поэтому именно добавочные номера определяют, что происходит со звонками при их обработке соответственно диалплану. Полный добавочный номер состоит из трех компонентов: Имени (или номера). В качестве имени может быть использованы любые комбинации цифр и букв; Приоритета (каждый добавочный номер может включать множество шагов; порядковый номер шага называется его приоритетом); Приложения (или команды), которое выполняет некоторое действие над вызовом; Эти три компонента разделяются запятыми: exten => имя,приоритет,приложение() Есть ещё зарезервированные добавочные номера: s - когда в контекст поступают вызовы, для которых не указан конкретный добавочный номер, они передаются на добавочный номер s. (s - сокращение от start (начало), поскольку именно здесь начнется обработка вызова, если не передана информация о добавочном номере.; i - когда абонент нажимает не ту кнопку (не существующий добавочный номер), вызов направляется на добавочный номер i; t - если абонент слишком долго не нажимает кнопку после запуска приложения WaitExten(), вызовы направляются на добавочный номер t (время ожидания по умолчанию - 10 с); h - экстеншен обрабатываемый при завершении вызова. После того как медиаканал закрылся; Иногда можно встретить использование same вместо exten. Это применяют в основном с автоматическим выставлением приоритета, то есть same => n и означает «тоже самое, продолжение предыдущего» Приоритеты – последовательность выполнения приложений. Каждый приоритет пронумерован последовательно, начиная с 1, и выполняет одно определенное приложение. В Asterisk есть еще приоритет n, что означает «следующий». Каждый раз, когда Asterisk встречает приоритет n, она берет номер предыдущего приоритета и добавляет 1. Это упрощает внесение изменений в диалплан, поскольку теперь не надо изменять номера всех шагов. Приложения – выполняет определенное действие в конкретном дополнительном номере (например воспроизведение звука, прием тонального ввода, вызов канала, разрыв соединения и так далее). Для выполнения некоторых приложений, таких как Answer() и Hangup(), не требуется никаких дополнительных инструкций. Некоторым приложениям необходима дополнительная информация. Эти данные, называемые аргументами, могут передаваться в приложения, чтобы оказывать влияние на то, как они выполняют свои действия. Чтобы передать аргументы в приложение их указывают через запятую в круглых скобках, следующих за именем приложения. Для внесения комментариев в файл extensions.conf используют ; - вы уже могли об этом догадаться, судя по нашим комментариям прямо в конфигах :) Таким образом можно как делать пометки для себя, так и делать невыполнимыми строки конфигурации (например, во время отладки) Теперь давайте вернемся к нашим созданным абонентам. Создадим контекст, который указан у абонентов (context=from-internal) В нем мы прописали что при наборе номера (ИМЯ), с приоритетом 1 выполнить приложение Dial c параметрами ПРОТОКОЛ/НОМЕР. Когда номеров немного, то можно конечно и так описывать. Но более правильно и красиво сделать тоже самое, но с использованием «маски»: То есть при наборе любого номера из диапазона 10хх (шаблон показан нижним подчеркиванием) выполнить вызов с приоритетом 1 через приложение Dial с параметрами ПРОТОКОЛ/НАБРАННЫЙ_НОМЕР, время вызова 60 секунд и можно использовать перевод звонка (transfer). Шаблон номера - это уникальный набор цифр, который определяет использование этого номера. Если набранный номер соответствует этому шаблону, то последующие номера не рассматриваются. Формат заполнения шаблона: X - совпадение любой цифры от 0 - 9; Z - любая цифра от 1 до 9; N - совпадение любой цифры от 2 - 9; [1237-9] - соответствует любым цифрам или буквам и скобках (в этом примере,1,2,3,7,8,9); Перечитываем диалплан в консоли Asterisk командой dialplan reload и видим выполнение вызова. Таким образом мы можем придумать и реализовать практически любой диалплан. Например для запрета вызовов на международную связь достаточно прописать 3 строчки: То есть при наборе 810 будет проиграно сообщение destination-closed (если оно было загружено в Asterisk) и будет отправлен сигнал отбоя. Создание и регистрация транков Ну, начнем с того, что IP-транки, используемые в Asterisk, бывают 2-х видов – SIP и IAX. SIP-транки в основном используются для подключения провайдеров, а IAX-транки для подключения других Asterisk. Транки могут быть с регистрацией (то есть когда провайдер выдает логин, пароль и адрес или домен для регистрации у него) и без регистрации (то есть когда подключение идет по IP-адресу без логина и пароля). В случае с регистрацией в файле sip.conf необходимо сразу после секции [general] указать строку регистрации в формате: register => ЛОГИН:ПАРОЛЬ@SIP-ПРОВАЙДЕР/НОМЕР Тут: SIP-ПРОВАЙДЕР - указывается или IP-адрес провайдера или его домен; ЛОГИН:ПАРОЛЬ - выдаются провайдером для подключения; НОМЕР - указывается городской номер, выданный провайдером для совершения звонков; Рассмотрим создание SIP-транка с регистрацией. Опять же если у нас несколько (до 3-5) таких транков, то можно их описать каждый отдельно. А если из больше или в дальнейшем планируется увеличить их количество, то можно использовать шаблон для подключения к оператору. [voip-provider](!) ; имя шаблона type=peer ; тип подключения context=from-trunk ; используемый контекст для обработки вызовов disallow=all ; выключаем все кодеки allow=alaw ; указываем используемые кодеки allow=ulaw insecure=invite,port ; не запрашивать авторизацию на входящие звонки qualify=yes ; проверка доступности directmedia=no ; запрещаем установление прямых соединений для передач голоса dtmfmode=rfc2833 ; указываем используемый тип DTMF дальше достаточно описать конкретные настройки для конкретного оператора и указать какой шаблон использовать [ОПЕРАТОР-1](voip-provider) defaultuser=ЛОГИН-1 fromuser=ЛОГИН-1 secret=ПАРОЛЬ-1 host=ДОМЕН1- ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ fromdomain= ДОМЕН-1 ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ [ОПЕРАТОР-2](voip-provider) defaultuser=ЛОГИН-2 fromuser=ЛОГИН-2 secret=ПАРОЛЬ-2 host=ДОМЕН-2 ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ fromdomain= ДОМЕН ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ Дальше указываем строки для регистрации у данных операторов: register => ЛОГИН-1:ПАРОЛЬ-1@ДОМЕН-1/НОМЕР-1 register => ЛОГИН-2:ПАРОЛЬ-2@ДОМЕН-2/НОМЕР-2 Перечитываем файл sip.conf и проверяем регистрации: В случае подключения транка без регистрации можно использовать тот же шаблон, а в настройках транка указать изменяемые параметры [AST10SIP](voip-provider) type=friend ; для транка без регистрации указываем friend (то есть мы доверяем этому подключению) port=5060 ; указываем порт для подключения insecure=port,invite host=IP-АДРЕС_ПРОВАЙДЕРА context=from-trunk-sip-AST10SIP ; если обработки вызовов через этот транк используется другой контекст, то указываем его тут. Перечитываем файл sip.conf и проверяем регистрации: Теперь рассмотрим создание IAX-транка. Для настройки IAX-транков используется файл iax.conf, который содержит всю информацию, необходимую Asterisk для создания и управления каналами, работающими по протоколу IAX. Структура его примерно такая же, как и у sip.conf: [general] ; указываем глобальные параметры для протокола IAX bindaddr=0.0.0.0 bindport=4569 ; по-умолчанию IAX-протокол использует порт 4569 можно оставить его, а можно и переопределить language=ru ; указываем строки для регистрации транков register => msk-spb:SuperPASS@10.10.10.10 [msk-spb] username = msk-spb ; логин для регистрации на удаленной стороне type = friend trunk = yes secret = SuperPASS ; пароль для регистрации qualify = yes host = 10.10.10.10 ; IP-адрес удаленной стороны disallow= all context = from-iax ; контекст для обработки вызовов, поступающих через этот транк allow = alaw allow = ulaw Сохраняем файл iax.conf, перечитываем и проверяем регистрацию командой iax2 show peers: Если есть абоненты, работающие по протоколу IAX, то их регистрацию описываем тоже в этом же файле аналогично SIP-регистрации. Итак, сейчас мы имеем зарегистрированных абонентов, которые могут звонить друг другу, и зарегистрированные транки. Внутренних абонентов мы можем группировать по отделам: exten => 500,1,Playback(it-otdel) ; проигрывается сообщение it-otdel exten => 500,1,Dial(SIP/1001,5),Tt ; 5 секунд вызов идет на номер 1001 exten => 500,n,Dial(SIP/1002&SIP/1003) ; потом вызов идет одновременно на 1002 и 1003 Можем настраивать различные функции, запускать различные команды (в том числе и для выполнения через ОС), настраивать запись и прослушивание разговоров и так далее: ; ответить, подождать 2 секунды и положить трубку exten => 060,1,Answer() same => n,Wait(2) same => n,Hangup() ; ответить, проиграть сообщение hello-world и положить трубку exten => 061,1,Answer() same => n,Playback(hello-world) same => n,Hangup() ; записать сообщение в файл somefile.gsm и потом его проиграть exten => 067,1,Record(/tmp/somefile.gsm,3,30) same => n,Playback(/tmp/somefile) Для совершения звонков через созданные и зарегистрированные транки SIP и IAX: Допустим через транк IAX у нас подключен другой Asterisk с внутренней нумерацией, начинающейся с 1, 2, 3. И для вызова этих абонентов мы будем использовать префикс (код выхода на маршрут) 2. Тогда строки настройки будут следующие: exten => _2[1-3].,1,Dial(IAX2/msk-spb/${EXTEN:1},30,r) exten => _2.,2,Hangup() То есть при наборе, начинающемся с 21-23, будет осуществлен вызов через транк msk-spb по протоколу IAX набранного номера, предварительно «отрезав» 1 (первую) набранную цифру. Если в течение 30 секунд не будет получен ответ, то вызов будет прекращен. Для выхода в город мы используем транк с оператором-1 и префикс выхода будем использовать 9 exten => _9849[589]XXXXXXX,1,Dial(SIP/ОПЕРАТОР-1/${EXTEN:1}) ;то есть при наборе, начинающемся с 9, будет осуществлен вызов через транк ОПЕРАТОР-1 по протоколу SIP набранного номера, предварительно «отрезав» 1 (первую) набранную цифру Тут важно понимать, что все, что мы реализовываем для внутренних абонентов, должно быть описано в соответствующем контексте. Теперь перейдем к транкам и входящим звонкам. Соответственно для того, чтобы принимать входящие вызовы, необходимо прописать маршрутизацию уже в контексте транка (context=from-trunk или context = from-iax) Для возможности через транк осуществлять вызов нашего внутреннего абонента (например через транк со встречной АТС) необходимо в контекст транка вставить exten => _10XX,1,Dial(SIP/${EXTEN},60,tTm) Давайте рассмотрим реализацию обработки входящего вызова от оператора (вызов на городской номер) через создание меню IVR и реализуем ещё определение рабочего и нерабочего времени. Схема обработки входящего вызова следующая: Рабочее время у нас определено с 9:00 до 19:00 и с понедельника по пятницу. При поступлении звонка в нерабочее время после сообщения с приветствием (01-hello) проигрывается сообщение с указанием рабочего времени (07-working-hours). При поступлении звонка в рабочее время (проверка осуществляется в строке GoToIfTime(09:00-19:00,mon-fri)) после приветствия осуществляется переход в другой контекст ([working-time]), где предлагается выбрать необходимый пункт меню (0 – вызов секретаря, 1 – вызов на группу тех. поддержки, 2 – переход в другое меню выбора (GoTo(ivr-2,s,1)), в котором по такому же принципу осуществляется выбор. В каждом меню реализован донабор внутренних номеров (exten => _1xхx,1,NoOp), обработка неправильного набора номера (exten => i,1,NoOp), обработка в случае, что если ничего не выбрали (exten => t,1,NoOp), вызов переводится на секретаря. Естественно необходимо загрузить все используемые голосовые файлы в /var/lib/asterisk/sound/ru в случае использования русского языка. Тут давайте немного по-подробнее. Как мы уже указывали выше в системе мы определили какой основной язык у нас будет использоваться для голосовых файлов (в файле sip.conf параметр language = ru). Это значит, что Asterisk будет искать имена файлов, которые мы указываем, например, в меню ivr в папке /var/lib/asterisk/sound/ru (смотрим обозначения директорий при запуске asterisk в начале статьи). Если бы мы использовали в качестве основного языка английский, то папка была бы /var/lib/asterisk/sound/en. В каждой из этих папок находятся голосовые файлы выбранных языков и в выбранных форматах, указанных при компилировании asterisk. Если мы хотим записать свои сообщения (персональные приветствия, необходимые объявления, произносимые в создаваемых меню ivr и так далее), нам необходимо положить эти файлы в папку с соответствующим языком. Сами файлы при этом можно записать любой звукозаписывающей программой (хоть программой Звукозапись, входящей в стандартный дистрибутив любой версии Windows) и сохранить в формате wav (несжатый голос, 8кГц, 16 Бит, Моно) Тут главное не перепутать имена файлов, находящихся в папке с голосовыми сообщениями, с именами, указанными в ivr меню. при этом в ivr меню имена указываются без расширения. Сам листинг приведен ниже. [from-trunk] exten => _X.,1,NoOp(Проверка времени: Если попали в диапазон - переходим в контекст working-time, если нет - продолжаем выполнение) same => n,Answer() same => n,Playback(01-hello) same => n,GoToIfTime(09:00-19:00,mon-fri,*,*?working-time,s,1) same => n,Playback(07-working-hours) same => n,Hangup() [working-time] exten => s,1,Answer() same => n,Background(01-ivr1) same => n,StartMusicOnHold() same => n,WaitExten(5) ; exten => 0,1,NoOp(Если нажали "0" - звоним секретарю) same => n,Playbacr(ostavaites-na-linii) same => n,Dial(SIP/1005,30,mtT) same => n,Hangup() ; exten => 1,1,NoOp(Если нажали "1" - звоним на группу вызова: 1001+1002) same => n,Playback(it-otdel) same => n,Dial(SIP/1001&SIP/1002,30,mtT) same => n,Hangup() ; exten => 2,1,NoOp(Если нажали "2" - перенаправляем на ivr-2) same => n,GoTo(ivr-2,s,1) ; exten => _1xхx,1,NoOp(Прямой набор внутренних номеров) same => n,Playback(ostavaites-na-linii) same => n,Dial(SIP/${EXTEN}15,mtT) same => n,Hangup() ; exten => i,1,NoOp(Обработка ошибочного набора:i=illegal) same => n,Playback(oshibka) same => n,Dial(SIP/1005,30,r) ; exten => t,1,NoOp(В случае, если не дождались нажатия) same => n,Playback(ostavaites-na-linii) same => n,Dial(SIP/1005,30,m) ; [ivr-2] exten => s,1,Background(02-ivr2) same => n,StartMusicOnHold() same => n,WaitExten(5) ; exten => 1,1,NoOp(Если нажали "1" - звоним на 1001) same => n,Dial(SIP/1001,30,mtT) same => n,Hangup() ; exten => 2,1,NoOp(Если нажали "2" - звоним на 1002) same => n,Dial(SIP/1002,30,mtT) same => n,Hangup() ; exten => _1xхx,1,NoOp(Прямой набор внутренних номеров) same => n,Dial(SIP/${EXTEN}15,mtT) same => n,Hangup() ; exten => i,1,NoOp(Обработка ошибочного набора:i=illegal) same => n,Playback(oshibka) same => n,Dial(SIP/1005,30,r) ; После сохранения файла extensions.conf перечитываем диалплан в консоли (dialplan reload) и проверяем. На этом закончим с примерами. Конфигурируя Asterisk через конфигурационные файлы, мы получаем возможность реализовать практически любую логику работы, проводить интеграции со сторонними сервисами, запускать и выполнять скрипты на уровне ОС и так далее.
img
С чего начинается Linux? LPI (Linux Professional Institute) считает, что изучение необходимо начинать с темы “Обнаружение и настройка комплектующих”. Это работа с “железом”, работа с комплектующими, вся аппаратная часть, то что мы видим и настраиваем. На сайте LPI (www.lpi.org) мы можем найти, что должен знать обучающийся Linux. Включение и отключение встроенного “железа” Настройка системы с помощью или без помощи внешних устройств. Разница между устройствами хранения информации Разница между устройствами, поддерживающими “Горячую замену” Выделение аппаратных ресурсов для устройств Инструменты и утилиты для просмотра списка оборудования Инструменты и утилиты для работы с USB Разбор понятий sysfs, udev, dbus. Далее возьмем для простоты Ubuntu 20.04. Директория /sys – тут содержится вся информация о подключенных устройствах. В данную директорию монтируется файловая система sysfs. Sysfs — виртуальная файловая система в операционной системе Linux. Экспортирует в пространство пользователя информацию ядра Linux о присутствующих в системе устройствах и драйверах. В данной директории есть определенных набор основных папок: devices/ - все устройства ядра bus/ - перечень шин зарегистрированных в ядре. Шина - это общий путь, по которому информация передается от одного компонента к другому drivers/ - каталог драйверов block/ - каталог блочных устройств. В данном случае под устройством понимается совокупность физического устройства и драйвера. То есть, если при подключении USB-драйва некоторое новое устройство в /sys/devices/ появится всегда (можно говорить о наличии физического устройства), то появление каталога /sys/block/sda зависит ещё и от наличия в памяти необходимых драйверов (usb-storage, sd_mod и т.д. - включая все драйвера, необходимые для поддержки usb) class/ - группировка устройств по классам Навигацию по папкам осуществляем с помощью команды cd. Учитывая вложенность папок переход на уровень вверх, т.е в родительскую папку используем cd .., где двоеточие обозначает родительский каталог. А также переход в любую папку, например, cd /sys/bus. Чтобы посмотреть все что находится в каталоге используем команду ls Следующий момент, если мы зайдем в папку с устройствами, то мы можем увидеть, как ОС наша видит устройства. Не очень удобно. Чтобы удобнее было работать с устройствами, используется udev. Это менеджер устройств, который позволяет ОС предоставлять устройства в удобно используемом виде, чтобы было понятно нам. Далее папка /proc - она находится в корне нашей ОС и содержит информацию о всех запущенных процессах. Она создается в оперативной памяти при загрузке ПК. Количество файлов зависит от конфигурации данной системы. Для работы с файлами необходимы права суперпользователя. Внесенные изменения сохраняются только до конца сеанса. Cеанс - это каждая терминальная оболочка, запущенная процессами пользователя В данную папку монтируется виртуальная система procfs. В ней находится информация о состоянии ядра и вообще операционной системе в целом. Термин виртуальная система - это некая абстракция, которая позволяет философии Linux говорить, что “все является файлом”, а вообще если рассматривать понятие файловая система - это иерархическое хранилище данных, которые собраны в соответствии с определенной структурой. Вот так выглядит данная папка. Мы можем посмотреть всю информацию, которая нам известна о процессоре. Данная информация содержится в файле cpuinfo. Для вывода информации содержащейся в файле используем команду cat [имя_файла]. Результат работы команды cat cpuinfo ниже. Есть еще интересный файл mounts. Он показывает все смонтированные файловые системы. Результат вывода будет примерно такой. Можно увидеть, когда мы просматриваем содержимое каталога командой ls, то файлы подсвечиваются белым цветом, а каталоги синим. Переходим немного глубже по дереву каталогов файловой системы cd /prox/sys в данной папке все о настройках и процессах, происходящих с нашей текущей файловой системой. В данной директории есть несколько подпапок. И зайдем в подпапку, относящуюся к файловой системе fs. Посмотрим например file-max в данном файле информация о том сколько файлов одновременно может открыть пользователь. В последней версии число таких фалов увеличилось. До версии 20.04, число файлов было по умолчанию 204394. Можно изменить число или данные, например, с помощью команды echo 10000000000 > file-max Все изменения, которые мы делаем в данной директории они сохраняются только до перезагрузки. Это надо учитывать. Еще одна основная папка в корневой директории папка /dev – она в себе содержит интерфейсы работы с драйверами ядра. /dev/sd [буква] - жесткий диск (в системах на ядре Linux) /dev/sd [буква][номер] – раздел диска /dev/sr [номер] (/dev/scd [номер]) – CD-ROM /dev/eth [номер] – cетевой интерфейс Ethernet /dev/wlan [номер] – cетевой интерфейс Wireless /dev/lp [номер] – принтер /dev/video [номер] - устройство изображений, камеры, фотоаппараты /dev/bus/usb/001/[номер] – устройство номер на шине USB /dev/dsp – звуковой вывод Набор оборудования, команды вывода перечня устройств. Lsmod – информация о модуле ядра Lspci - информация об устройствах PCI Lspcmcia - информация об устройствах PCMCIA Lsusb - информация о шине USB Lshw – детальная информация о комплектующих. Команда Lsmod – утилита которая показывает нам модули ядра. Модуль ядра — это объект, который содержит код позволяющий расширить функционал ядра. Вот так выглядит ее вывод. По сути, если проводить аналогию с ОС Windows это драйвера. Вывод команды lshw Данная команда сканирует все устройства и выводит подробную информацию по ним и достаточно детально. Утилиты для работы с модулем ядра или утилиты управления модулями ядра. Lsmod – информация о модулях ядра Modinfo - информация о конкретном модуле Rmmod - удаление модуля ядра Insmod – установка модуля ядра Modprobe – деликатное удаление или добавление модуля ядра Фактически эти команды используются для добавления и удаления “драйверов” устройств в Linux системе. В большинстве случаев ОС самостоятельно подключит устройство, но бывает такое, что устройство не стандартное и требуется добавить модель, для того чтобы ядро ОС, корректно работало с данным устройством. Rmmod и insmod - команды грубые и не умеют работать с зависимостями, поэтому необходимо использовать Modprobe с различными ключами. Взаимодействие с CPU, основные понятия: IRQ - механизм прерываний IO адреса – обмен информацией между устройствами и CPU DMA – обращение к ОЗУ минуя CPU Выделение ресурсов. IRQ - механизм прерываний это система которая сообщает центральному процессору о наступлении какого либо события, на которое процессор должен отреагировать. Есть определенные адреса прерываний, их можно увидеть в биосе ПК. Есть стандартные номера прерываний. Ранее была необходимость при конфликте устройств назначать в ручном режиме данные прерывания, в настоящее время с появлением технологии Plug and Play, данная потребность исчезла. IO адреса – это область памяти в которой процессор считывает информацию об устройствах и туда же ее записывает. Это выделенный диапазон. Вообще она бывает в памяти и адресация по портам. DMA - технология появилась относительно недавно и позволяет устройствам обращаться к памяти минуя процессор. Существенно повышает быстродействие. Все технологии настраиваются автоматически. Устройства хранения: PATA – параллельный интерфейс SATA - последовательный интерфейс SCSI - стандарт передачи данных SAS – замена SCSI Современные SATA, SAS нужно понимать есть устройства поддерживающие горячую замену и устройства не поддерживающие горячую замену. Устройства, которые можно выдернуть из ПК, безболезненно, и это не обрушит систему, причем ОС не подвиснет, не перезагрузится, это устройства поддерживающие горячую замену, например, USB. Устройство, которое не поддерживает горячую замену, например, оперативная память. Если мы ее выдернем из материнской платы, ОС однозначно обрушится. Команда blkid показывает какие устройства у нас смонтированы. Нужно отметить, что у каждого устройства есть уникальный UUID (универсальный уникальный идентификатор), что udev умеет читать UUID, и он монтирует в понятном виде нам.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59