Asterisk сообщение перед соединением

Обновлено: 05.07.2024

ActionID - [необязательный] Идентификатор, который может использоваться для опознавания ответа на эту команду.

AgentLogoff

Отменяет регистрацию указанного агента в системе очереди вызовов.

ActionID [необязательный] - Идентификатор, который может использоваться для опознавания ответа на эту команду.

Agents

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

ActionID [необязательный] - Идентификатор, который может использоваться для опознавания ответа на эту команду.

Add an AGI command to the execute queue of the channel in Async AGI.

Atxfer

Условный (сопровождаемый) перевод звонка

Bridge

Соединяет 2 канала вместе.

ChangeMonitor

Меняет имя файла для записи разговора по каналу.

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

Command

Выполняет CLI-команду Asterisk так, как если бы она выполнялась из CLI.

ConfbridgeKick

Kick a Confbridge user.

ConfbridgeList

Lists all users in a particular ConfBridge conference. ConfbridgeList will follow as separate events, followed by a final event called ConfbridgeListComplete.

ConfbridgeListRooms

Список данных о всех активных конференциях.

ConfbridgeLock

ConfbridgeMute

Отключение звука пользователю Confbridge.

ConfbridgeSetSingleVideoSrc

Установить пользователя конференции в качестве единственного источника видео для распространения среди всех других участников.

ConfbridgeStartRecord

Старт записи конференции. Если запись уже присутствует будет возвращена ошибка. Если RecordFile не предусмотрен, будет использован файл записи по умолчанию, указанный в профиле конференции. Если нет ни того, ни другого, тогда файл будет сгенерирован автоматически в каталоге monitor

ConfbridgeStopRecord

Останавливает запись в конференции

ConfbridgeUnlock

Описание Разблокировать конференцию

ConfbridgeUnmute

Описание Включить звук пользователю конференции

CoreSettings

Описание Запрос информации о настройках PBX (версия и т.д.)

CoreShowChannels

Описание Список текущих активных каналов и информация о них

Каждый элемент списка выводится отдельно.

Событие начала списка:

Событие окончания списка:

CoreStatus

Описание Запрос переменных статуса ядра PBX.

CreateConfig

Создает пустой файл в конфигурационном каталоге. Вызывается перед UpdateConfig.

DAHDIDialOffhook

Dial over DAHDI channel while offhook.

Generate DTMF control frames to the bridged peer.

DAHDIDNDoff

DAHDIDNDon

DAHDIHangup

Описание Подожить трубку DAHDI-канала

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

DAHDIRestart

Полный рестарт канала DAHDI (звонки завершаются).

DAHDIShowChannels

Show status of DAHDI channels.

DAHDITransfer

Описание Перевод DAHDI-канала

Simulate a flash hook event by the user connected to the channel.

DataGet

Retrieve the data api tree.

DBGet

Описание Извлекает значение из базы данных AstDB.

Привилегии system, all

DBPut

Задает значение ключа в базе данных AstDB.

Привилегии system, all

Events

Описание Управляет потоком событий. Активирует или отключает отправку событий на это соединение интерфейса Manager

EventMask [обязательный] - Задайте значение on, если должны отправляться все события, off, если события не должны передаваться, или system, call, log…, чтобы выбрать тип событий, который должен отправляться на это соединение интерфейса Manager.

ExtensionState

Cообщает о состоянии заданного добавочного номера. Если добавочный номер имеет подсказку, эта команда обеспечит передачу состояния устройства, соединенного с данным добавочным номером.

Возможные состояния добавочного номера:

GetConfig

Извлекает данные из конфигурационного файла Asterisk.

GetConfigJSON

GetVar

Возвращает значение локальной переменной канала или глобальной переменной.

Hangup

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

Channel [необязательный] Имя канала, разъединение которого должно быть выполнено. Может использоваться регулярное выражение, например, /^SIP/provider-.*$/

IAXNetstats

Представляет сводку статистки сетевой активности драйвера IAX2-канала.

IAXpeerlist

Список всех IAX пиров.

IAXpeers

Список IAX пиров. Каждый элемент выводится отдельно в виде события Event: PeerEntry

Примечание Asterisk Manager ответит списком элементов, который начинается с события:

Заканчивается список событием:

IAXregistry

Каждый элемент списка регистраций выводится отдельно событием Event: Registry.

Событие начала списка:

Событие окончания списка:

JabberSend

ListCategories

Список категорий в конфигурационном файле

ListCommands

Создает список всех команд интерфейса Asterisk Manager с указанием имени команды и краткого описания каждой из них

LocalOptimizeAway

Описание Optimize away a local channel when possible.

Login

Описание Залогиниться в Asterisk Manager

Logoff

Завершает сеанс интерфейса Manager

MailboxCount

MailboxStatus

Проверяет статус заданного ящика голосовой почты.

MeetmeList

Список всех пользователей в конкретной конференции. Каждый элементы списка выводится отдельно.

Событие начала списка: MeetmeList will follow
Событие окончания списка: MeetmeListComplete

MeetmeListRooms

Спискок активных конференций. Каждый элементы списка выводится отдельно.

Событие начала списка: MeetmeListRooms will follow
Событие окончания списка: MeetmeListRoomsComplete

MeetmeMute

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

Привилегии
call, all

MeetmeUnmute

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

MessageSend

Specifying a prefix of sip: will send the message as a SIP MESSAGE request.

Specifying a prefix of xmpp: will send the message as an XMPP chat message.

Specifying a prefix of xmpp: will specify the account defined in xmpp.conf to send the message from. Note that this field is required for XMPP messages.

Body - The message body text. This must not contain any newlines as that conflicts with the AMI protocol.

Base64Body - Text bodies requiring the use of newlines have to be base64 encoded in this field. Base64Body will be decoded before being sent out. Base64Body takes precedence over Body.

Variable - Message variable to set, multiple Variable: headers are allowed. The header value is a comma separated list of name=value pairs.

MixMonitor

Записывает разговор и микширует аудио в процессе записи

File - Is the name of the file created in the monitor spool directory. Defaults to the same name as the channel (with slashes replaced with dashes). This argument is optional if you specify to record unidirectional audio with either the r(filename) or t(filename) options in the options field. If neither MIXMONITOR_FILENAME or this parameter is set, the mixed stream won't be recorded.

options - Options that apply to the MixMonitor in the same way as they would apply if invoked from the MixMonitor application. For a list of available options, see the documentation for the mixmonitor application

MixMonitorMute

Включение / Отключение записи через Mixmonitor

Direction - Для какой части записи изменяется режим : read, write или оба (из канала, к каналу или оба канала).

ModuleCheck

Проверка загружен ли модуль. Возвращает Success или Failure .
В случае успеха возвращает номер ревизии модуля.

ModuleLoad

Описание Module management.
Загрузка, выгрузка, перезагрузка модуля Asterisk.

LoadType - Операция, выполняемая над модулем. Подсистемы с идентификаторами выше могут быть только перезагружены

Если для модуля не указан reload loadtype выполняется reload.

Monitor

Записывает аудиоданные, передаваемые по каналу, в заданный файл.

File [необязательный] Имя файла, в который производится запись разговора по каналу. По умолчанию запись ведется в папку очереди для записи разговоров Asterisk, которой обычно является /var/spool/asterisk/monitor. Если имя файла не задано, в качестве него используется имя канала, при этом символы слэша заменяются на тире.

Format [необязательный] Аудиоформат, в котором производится запись канала. По умолчанию используется wav.

Mix [необязательный] Логический флаг, определяющий, должна ли Asterisk объединять входящий и исходящий аудиопотоки канала в один файл

MuteAudio

Отключает входящий или исходящий аудиопоток на канале

Originate

Формирует исходящий вызов из Asterisk и соединяет канал с контекстом/добавочным номером/приоритетом или приложением диалплана.

Channel [обязательный] Имя канала, которому адресован вызов. Как только вызываемый канал отвечает на вызов, управление вызовом передается в заданные Exten/Context/Priority или Application.

Exten [необязательный] Используемый добавочный номер (должны быть заданы значения Context и Priority).

Data [необязательный] Данные, которые должны быть переданы как параметры приложения (должно быть задано значение Application).

CallerID [необязательный] Идентификатор вызывающего абонента, который должен быть задан для исходящего канала.

Variable [необязательный] Переменная канала, которая должна быть задана. Допускается множество переменных в заголовке.

Async [необязательный] Задайте значение true, чтобы выполнять асинхронные вызовы. Асинхронное формирование вызовов позволяет создавать один или более вызовов, не ожидая немедленного ответа.

Привилегии
call, all

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

Channel2 [обязательный] Канал, которому должна быть предоставлена информация о парковке (и возвращен звонок, если допустимое время парковки истекло).

Привилегии
call, all

ParkedCalls

Создает список всех вызовов, припаркованных в слоте парковки вызовов.

Parkinglots

Получает список парковочных слотов в виде серии событий AMI.

PauseMonitor

Приостанавливает отслеживание (запись) канала, для которого производится запись разговоров.

Привилегии
call, all

PlayDTMF

Передает DTMF-код в заданный канал.

Привилегии
call, all

PresenceState

Check Presence State. Report the presence state for the given presence provider.

Will return a Presence State message. The response will include the presence state and, if set, a presence subtype and custom message.

PRIShowSpans

QueueAdd

Добавляет участника обработки очереди вызовов.

Interface [обязательный] Имя участника, который должен быть добавлен в очередь. Это будет технология или ресурс, например SIP/Jane или Local/203@lab/n. Также с помощью синтаксиса Agent/1234 могут быть добавлены агенты (описанные в файле agents.conf).

Penalty [необязательный] Числовой приоритет, применяемый к данному участнику обработки очереди. Asterisk сначала пытается распределить вызовы между участниками с более низкими значениями приоритетов, а затем переходит к участникам с более высокими приоритетами.

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

Всем привет!
Решил поделиться собственным опытом в некоторых особенностях работы Dialplan'а.

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

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

exten => s,n,Set(LIMIT_PLAYAUDIO_CALLER=yes) — Воспроизводить вызывающему
exten => s,n,Set(LIMIT_PLAYAUDIO_CALLEE=no) — Воспроизводить вызываемому
exten => s,n,Set(LIMIT_CONNECT_FILE=/var/lib/asterisk/sounds/beep) — Путь к файлу, который нужно будет воспроизвести.

Так же, можно заменить тишину для абонента А на гудки КПВ. Для этого нужно изменить строки:

Так же, можно добавить к Dial() ключ r — генерация системного КПВ, но то будет выбираться именно из системных звуков и будет (чаще всего) сильно отличаться от классического звука контроля посылки вызова.

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

Попробовал в follow me добавить Announcement.

Отлично проигрывает и лишь затем соединяет.

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

Ок, сделаем через очередь.

Создаем очередь, ставим max callers one (чтобы линии не съедали).
И включаем Announcement при join queue.

Как бы это обойти, чтобы третьему+ сразу hangup был?

dial с опцией L и установленной LIMIT_CONNECT_FILE

А что делать, если штатный вариант про announcement в follow me так глючно работает?

Попробовал через L

exten => 180,1,Set(LIMIT_CONNECT_FILE=demo-congrats);
exten => 180,n,Dial(SIP/180,15,L(10000));

В консоль честно пишет

Executing [180@from-internal:1] Set("SIP/181-000000e5", "LIMIT_CONNECT_FILE=demo-congrats") in new stack
-- Executing [180@from-internal:2] Dial("SIP/181-000000e5", "SIP/180,15,L(10000)") in new stack
> Limit Data for this call:
> timelimit = 10000 ms (10.000 s)
> play_warning = 0 ms (0.000 s)
> play_to_caller = yes
> play_to_callee = no
> warning_freq = 0 ms (0.000 s)
> start_sound = demo-congrats
> warning_sound = timeleft
> end_sound =
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called SIP/180
-- SIP/180-000000e6 is ringing

Но demo-congrats не проигрывается. Через playback нормально играет.


> Limit Data for this call:
> timelimit = 10000 ms (10.000 s)
> play_warning = 0 ms (0.000 s)
> play_to_caller = yes
> play_to_callee = yes
> warning_freq = 0 ms (0.000 s)
> start_sound = demo-congrats
> warning_sound = timeleft
> end_sound = demo-congrats
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called SIP/180
-- SIP/180-000000f5 is ringing
-- SIP/180-000000f5 answered SIP/101-000000f4
-- Locally bridging SIP/101-000000f4 and SIP/180-000000f5
-- Locally bridging SIP/101-000000f4 and SIP/180-000000f5
-- Locally bridging SIP/101-000000f4 and SIP/180-000000f5
-- Locally bridging SIP/101-000000f4 and SIP/180-000000f5
-- Locally bridging SIP/101-000000f4 and SIP/180-000000f5
-- Locally bridging SIP/101-000000f4 and SIP/180-000000f5
-- Locally bridging SIP/101-000000f4 and SIP/180-000000f5
-- Locally bridging SIP/101-000000f4 and SIP/180-000000f5
-- Playing 'demo-congrats.gsm' (language 'en')
-- Playing 'demo-congrats.gsm' (language 'en')

Как видите, файлы проигрывает только в конце разговора.

exten => 180,n,Dial(SIP/180,15,L(10000 ,10000 ));
x=y
или
exten => 180,n,Dial(SIP/180,15,L(10000 ,8000 ));
через 2 секунды после соединения

y - разве это не время предупреждения?

То есть относящийся к LIMIT_WARNING_FILE, мол до конца разговора минута, пошевеливайтесь.

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

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

А то в больницу много психов звонит и зачастую матом кроют.

так вам только звонящему нужно проговорить?
не проще Playback до Dial или Queue?

ЗЫ: y - это время до лимита, при котором нужно предупредить

Проблема в том, что используется готовый дистрибутив exlastix с freepbx в качестве веб морды.

Предположим что у нас есть небольшая организация, где работает около 50 сотрудников. Все они используют Asterisk для связи внутри компании и звонков наружу. Все настройки буду проводить на свежей Asterisk 18. В своей предыдущей статье я рассмотрел процесс установки Asterisk 18 на Centos 8. Давайте рассмотрим как происходит настройка Asterisk с нуля.

Учитывая тот факт что библиотека chan_sip не актуальна, будем рассматривать настройку через PJSIP. Старую библиотеку необходимо отключить (если включена) для исключения конфликтов.

Отключение chan_sip

В файле /etc/asterisk/modules.conf необходимо найти и убрать ; перед строкой noload => chan_sip.so


noload chan_sip

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

Структура Asterisk

Настройка Asterisk происходит путем редактирования конфигурационных файлов. Располагаются они в директории /etc/asterisk/ . Перечислю основные файлы которые нам потребуются для начальной настройки.

  • pjsip.conf — файл настройки мультимедийной библиотеки PJSIP. В нем содержатся настройки регистрации, транков, пользователей
  • extensions.conf — в данном файле происходит настройка диалплана. Все параметры обработки вызова, переадресация, мелодии на удержании, настройка автосекретаря и многое другое.
  • asterisk.conf — основной конфигурационный файл, тут указаны пути к используемым папкам, параметры запуска Asterisk и т.д. Подробный разбор параметров данного файла есть тут
  • sip.conf — файл настройки устарелой библиотеки chan_sip. В работе его использовать не будем
  • cdr.conf — основные настройки ведения отчета о звонках Call Detail Record
  • rtp.conf — в данном файле определены настройки касательно протокола RTP (порты, поддержка ICE и т.д.)
  • features.conf — указываются параметры перехвата и парковки вызова, максимальное время набора и переадресации, DTMF коды абонентских функций
  • modules.conf — в данном файле содержится информация о модулях которые необходимо загружать при старте Asterisk, либо отключить их загрузку.
  • musiconhold.conf — настройка параметров конфигурации музыки на удержании
  • iax.conf — используется для настройки соединений по протоколу IAX. Данный протокол как правило используется для объединения между собой двух и более АТС
  • voicemail.conf — детальная настройка параметров голосовой почты
  • logger.conf — указаны детальные параметры журналирования работы Asterisk

Я перечислил лишь основные конфигурационные файлы Asterisk. Но их значительно больше. В повседневной жизни используется только два файла exntensions.conf и pjsip.conf

Часть функций а также повторная загрузка данных из конфигурационных файлов происходит с помощью консоли Asterisk. Зайти в консоль можно так:

Для более детального вывода данных в консоль можно использовать ключ -v (я обычно использую -vvvvvv). Чем больше букв v указано, тем детальнее будет вывод информации в консоль. Запуск в режиме повышенной детализации:

Полный список консольных команд с описанием можно прочитать в моей статье

Подключение пользователей

Добавление новых пользователей происходит в файле pjsip.conf. Конфигурационный файл pjsip.conf состоит из секций. Имена секций указываются в квадратных скобках. Название секций может быть произвольным, кроме имен ENDPOINT и AOR которые должны быть одинаковые с заголовком SIP URI.

Перечислю возможные типы секций:

В каждой секции есть опция type содержащая назначение секции в общей конфигурации.

Создание первого пользователя

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

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

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

[tr-udp] — является транспортной секцией. На это указывает запись type=transport

  • protocol — тип используемого протокола клиента
  • bind — IP адрес клиента. Можно указать конкретный IP чтобы с других адресов никто не мог использовать данную запись. Если необходимо можно задать и порт.
  • allow_reload — разрешить перенастройки транспортного уровня без перезагрузки Asterisk. По умолчанию без указания данного пункта с параметром true после изменения настроек необходимо рестартовать Asterisk

[1000] — это секция ENDPOINT. Как я писал выше название секции ENDPOINT соответствует названию секции AOR.

  • type — тип секции. В данном случае ENDPOINT
  • context — контекст диалплана. Данный параметр указывает куда будут направлены звонки приходящие на данный ENDPOINT
  • disallow — указывает какие кодеки необходимо запретить. В данном случае all — все кодеки
  • allow — кодеки разрешенные для использования. Строкой выше мы запретили все кодеки, текущей строкой разрешили только alaw
  • transport — указывает какую конфигурация использовать для траспорта. В нашем случае tr-udp что мы создали выше.
  • auth — объект аутентификации относящийся к данному ENDPOINT. В нашем случае это auth1000 дальше по файлу будет его описание
  • aors — объек AOR для этого ENDPOINT

[auth1000] — секция аутентификации

  • type — тип используемой секции
  • auth_type — тип используемой аутентификации. У меня используется логин и пароль
  • password — пароль от учетной записи
  • username — логин учетной записи

[1000] — AOR секция

  • type — тип секции
  • max_contacts — максимальное количество контактов которые могут использоваться с данной AOR

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

И введем команду повторной загрузки настроек из файла pjsip.conf

Теперь запустим SIP телефон и настроем учетную запись 1000 на нём. В работе я использую софтфон MicroSIP. Он мне нравится за свою компактность и возможность работы в portable режиме.


Добавление пользователя 1000


Microsip user 1000 OnLine

Как видно на изображении выше мы удачно подключились к АТС. Но что делать если нам необходимо добавить не одного, а 50 пользователей? Если писать такой конфиг по каждому пользователю, потом очень сложно будет что-то найти. Для таких случаев есть шаблоны. Разберемся как они работают.

Создание шаблона

Использование шаблонов также полезно для разделения сотрудников из разных отделов с разным уровнем доступа. Название шаблона указывается в квадратных скобках [] затем идет (!)

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

Применение шаблона

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

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


pjsip show aors


pjsip show auths


pjsip show endpoints

Маршрутизация вызовов

Однако, на данном этапе мы пока не можем совершать звонки. При попытке набрать любой номер будет ошибка. Для совершения звонков нам необходимо внести изменения в файл extensions.conf — основной рабочий файл. В нем настраивается маршрутизация вызовов Asterisk. В понимании телефонии и Asterisk не исключение это называется DIALPLAN.

Структура файла extensions.conf

Файл имеет две обязательные секции general и globals. Секции также указываются в квадратных кавычках. После двух обязательных секции идут секции вашего диалплана.

Рассмотрим параметры секции [general]

Перейдем к параметрам секции [globals]

В Asterisk могут использоваться как глобальные переменные так и переменные канала. Есть еще переменные окружения, они обеспечивают доступ из Asterisk к переменным окружения unix.

Глобальные переменные могут быть определены в секции [globals] либо с помощью команды SetGlobalVar в плане набора номера. Глобальная переменная отличается тем, что работает для всего файла exntensions.conf. Переменные канала используются в том диалплане в котором они определены.

В глобальных переменных удобно хранить длинные добавочные номера, время работы (при использовании автосекретаря) и другие часто используемые переменные. Пример секции [globals]

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

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

Я написал контекст с названием from-internal далее указал что при звонке на добавочный 1000 будет происходить дозвон номера 1000 через интерфейс PJSIP. При создании пользователя Asterisk в файле pjsip.conf в разделе настройки endpoint мы указываем поле context=from-internal. Это означает что совершая вызов данный пользователь будет руководствоваться правилами указанными в контексте [from-internal] файла extensions.conf

Процесс вызова

Совершая вызов абонент будет искать в своем контексте правила набора указанного номера. В каждом контексте может быть большое количество добавочных номеров. К набираемому добавочному номеру правила применяются последовательно.

Формат записи такой: exten = имя,приоритет,приложение(параметры)

Расширим наш диалплан, добавив дополнительные пункты. И не забудьте, что при изменений файла extensions.conf необходимо чтобы Asterisk перечитал его. Для этого заходим в консоль и вводим команду dialplan reload

Как вы уже заметили, комментарии можно писать сразу после ;

При звонке на 1000 мы поднимаем трубку, проигрываем приветствие и последним действием будет звонок на добавочный 1000. Можно написать и так:

Приоритет можно заменить буквой n но первый приоритет указывать необходимо обязательно. Можно еще немного оптимизировать наш диалплан.

Используя same вместо exten можно не писать в каждой строке добавочный 1000. Но как и в случае с n в первой строке указывать exten обязательно.

Системные добавочные номера

  • s — при поступлении вызова в контекст, без указанного добавочного номера используют номер s (от слова start)
  • i — в случае когда абонент набирает не существующий добавочный номер вызов переходит на добавочный номер i
  • t — когда абонент долго не нажимает кнопку после запуска приложения WaitExten() вызов переходит на добавочный номер t. Время ожидания по умолчанию — 10 секунд
  • h — добавочный используемый при завершении вызова, когда уже закрылся медиаканал

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

Шаблоны номеров

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

Шаблон для звонков внутри организации по всем добавочным из 4 цифр будет выглядеть так:

Где _XXXX — любые 4 цифры, $ — переменная передающая набранный добавочный номер

Вложение контекстов

Есть одна особенность, Asterisk сначала сортирует добавочные (exten) и затем ищет первое совпадение. Чтобы при совпадении шаблонов заставить Asterisk звонить по нужному будем использовать вложенные контексты.

В контексте from-internal сначала будет обрабатываться шаблон _XXXX затем вложенный контекст include=long

Увидеть в какой последовательности Asterisk обрабатывает диалплан можно введя в консоли команду dialplan show


dialplan show

Благодаря созданному диалплану все 4-х значные номера будут идти на локальных пользователей. Остальные номера пойдут через внешнего провайдера SIPNET. И чтобы все внешние звонки действительно пошли через SIPNET давайте его настроим в pjsip.conf

Настройка внешнего провайдера

Для проверки входящей и исходящей связи я буду использовать тестовый транк с регистрацией от SIPNET. Я настрою сам транк в файле pjsip.conf и правила маршрутизации звонков в extensions.conf

Открываем файл pjsip.conf

Добавляем в конец файла регистрацию транка провайдера

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

После добавления новых данных в файл не забываем зайти в консоль asterisk и перечитать конфиги

Настроим входящую маршрутизацию

Добавляем настройки маршрутизации входящей связи при звонке снаружи на наш номер SIPNET

Вставим следующий текс в конец файла

Можно добавить обработку входящего вызова по времени.

В зависимости от текущего времени и дня недели если вызов совершен во временной промежуток указанный в GotoifTime будет переход на метку work. Все вызовы не попадающие под временной интервал будут отправляться на метку outwork.

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

Считаю настройку для небольшой организации достаточной. Мы разобрали как происходит настройка Asterisk с нуля.

Смотрите видео по настройке

Asterisk Manager Interface (AMI) — это интерфейс системного мониторинга и управления системой, предоставляемый Asterisk. Он позволяет осуществлять живой мониторинг событий, происходящих в системе, а также разрешать запросам к Asterisk выполнять некоторые действия. Доступные действия широко распространены и включают такие вещи, как возврат информации о статусе и появлении новых вызовов. Многие интересные приложения были разработаны поверх Asterisk и используют AMI в качестве основного интерфейса для Asterisk.

Эта глава также включает документацию по использованию файлов вызовов. Файлы вызовов Asterisk — это простой способ инициировать несколько вызовов. Как только объем вызовов увеличивается или ваши потребности становятся более серьезными, вы можете перейти к использованию AMI. Подробности можно найти в разделе “Файлы вызовов”.

Быстрый старт

Этот раздел предназначен для того, чтобы испачкать руки с помощью AMI как можно быстрее. Сначала поместите следующую конфигурацию в /etc/asterisk/manager.conf:

; Включите AMI и попросите его принимать соединения только с localhost.

read = all ; Получать все типы событий

write = all ; Разрешить этому пользователю выполнять все действия.


Эта типовая конфигурация настроена так, чтобы разрешать только локальные подключения к AMI. Если вы намерены сделать этот интерфейс доступным по сети, настоятельно рекомендуется использовать его только с помощью TLS. Использование TLS обсуждается более подробно далее в этой главе.

AMI через TCP

Существует несколько способов подключения к AMI, но наиболее распространенным является TCP-сокет. Мы будем использовать telnet для демонстрации подключения AMI. В этом примере показаны следующие шаги:

  • Подключитесь к AMI через сокет TCP на порт 5038.
  • Войдите в систему, используя действие Login.
  • Выполните действие Ping.
  • Выйдите из системы, используя действие Logoff.

Вот как AMI отвечает на эти действия:

$ telnet localhost 5038

Connected to localhost.

Escape character is ‘^]’.

Asterisk Call Manager/1.1

Action: Login

Username: hello

Secret: world

Message: Authentication accepted

Action: Ping

Action: Logoff

Message: Thanks for all the fish.

Connection closed by foreign host.

После того, как вы это сделаете, вы убедитесь, что AMI принимает соединения через TCP-соединение.


Resolving localhost… 127.0.0.1

Connecting to localhost|127.0.0.1|:8088… connected.

Saving to: `STDOUT’

Message: Authentication accepted

Resolving localhost… 127.0.0.1

Connecting to localhost|127.0.0.1|:8088… connected.

Saving to: `STDOUT’

Resolving localhost… 127.0.0.1

Connecting to localhost|127.0.0.1|:8088… connected.

Saving to: `STDOUT’

Message: Thanks for all the fish.

Конфигурация

manager.conf

Основным конфигурационным файлом для AMI является /etc/asterisk/manager.conf. Раздел [general] содержит параметры (перечисленные в Таблице 20-1), которые контролируют общую работу AMI. Любые другие разделы в файле manager.conf будут определять учетные записи для входа в систему и использования AMI.

Таблица 20-1. Опции в разделе manager.conf [general]

b Пакет разработки OpenSSL должен быть установлен для того, чтобы Asterisk использовал шифрование. На Ubuntu, пакет libssl-dev. На RHEL пакет называется openssl-devel.

Файл конфигурации manager.conf также содержит конфигурацию учетных записей пользователей AMI. Учетная запись создается путем добавления раздела с именем пользователя в квадратных скобках. В каждом разделе [username] есть опции, которые можно установить и они будут применяться только к этой учетной записи. В Таблице 20-2 перечислены параметры, доступные в разделе [username].

Таблица 20-2. Параметры для разделов [username]

Параметр Значение/Пример Описание
secret password Устанавливает пароль, используемый для аутентификации. Он должен быть установлен.
deny 0.0.0.0/0.0.0.0 Задает список управления доступом IP-адресов (ACL), которым должно быть отказано в аутентификации от этого пользователя. По умолчанию этот параметр не установлен.
permit 192.168.1.0/255.255.255.0 Задает ACL для IP-адресов, которым разрешена аутентификация пользователя. Как и deny, по умолчанию не установлен. Без этих параметров любой IP-адрес, который может подключиться к AMI, сможет аутентифицироваться как этот пользователь.
writetimeout 100 Устанавливает тайм-аут, используемый Asterisk при записи данных в AMI-соединение для этого пользователя. Эта опция указывается в миллисекундах. Значение по умолчанию равно 100.
displayconnects yes Также доступен в разделе [general] (см. Таблицу 20-1), но может определяться отдельно для каждого пользователя.
read system, call[, …] Определяет какие события AMI этот пользователь будет получать. По умолчанию пользователь не получает никаких событий. Таблица 20-3 охватывает доступные типы разрешений для параметров read и write.
write system, call[, …] Определяет какие события AMI этот пользователь сможет выполнять. По умолчанию пользователь не может выполнять никаких событий. Таблица 20-3 охватывает доступные типы разрешений для параметров read и write.
eventfilter !Channel: DAHDI* Используется для фильтрации событий AMI в белом или черном списке перед их доставкой в клиентское приложение AMI. Фильтры задаются с помощью регулярного выражения. Указанный фильтр является фильтром белого списка, если ему не предшествует восклицательный знак. a

a Если фильтры не заданы — будут доставлены все события, разрешенные на основе параметра read. Если указаны только фильтры белого списка — будут доставлены только события, соответствующие одному из фильтров. Если есть только фильтры в стиле черного списка, будут доставлены все события, которые не соответствуют ни одному из фильтров. Наконец, если существует сочетание фильтров в стиле белого и черного списка, сначала будут обработаны фильтры белого списка, а затем фильтры черного списка.

Как обсуждалось в Таблице 20-2, параметры read и write задают какие действия и события AMI доступны определенному пользователю. Таблица 20-3 показывает доступные значения разрешений, которые могут быть указаны для этих параметров.


Обратите особое внимание на разрешения system, command и originate. Эти разрешения предоставляют значительные возможности внешнему приложению. Предоставьте эти разрешения только тем приложениям, над которыми у вас есть полный контроль.

Таблица 20-3. Доступные значения для параметров read/write учетной записи пользователя AMI

a Этот уровень определен, но в настоящее время не используется нигде в Asterisk.

b Этот уровень определен, но в настоящее время не используется нигде в Asterisk.

d События DTMF не будут генерироваться в мостовом вызове между двумя каналами, если не используется универсальное мостовое соединение в ядре Asterisk. Например, если DTMF передается с потоком мультимедиа, а поток мультимедиа течет непосредственно между двумя конечными точками, Asterisk не сможет сообщить о событиях DTMF.


Доступные параметры перечислены в Таблице 20-4.

a Чтобы Asterisk мог использовать шифрование — необходимо установить пакет разработки OpenSSL. Для Ubuntu пакет libssl-dev. На RHEL пакет называется openssl-devel.

Обзор протокола


Рисунок 20-1. Диспетчер событий

Диспетчер действий — это запросы от клиента, у которого есть связанные ответы, приходящие обратно от Asterisk. То есть, действие диспетчера может быть запросом к Asterisk на выполнение какого-либо действия и возврат результата. Например, есть действие AMI для инициирования нового вызова. См. Рисунок 20-2. для графического представления клиента, отправляющего действия диспетчеру и получающего ответы.


Рисунок 20-2. Диспетчер действий


Рисунок 20-3. Действия диспетчера, возвращающие список данных.

Header1: Это первый заголовок

Header2: Это второй заголовок

События

События диспетчера всегда имеют заголовок Event и заголовок Privilege. Заголовок Event дает имя события, в то время как заголовок Privilege перечисляет уровни разрешений, связанные с событием. Любые другие заголовки, включенные в событие, зависят от типа события. Вот пример:

CallerIDName: Russell Bryant

Cause-txt: Normal Clearing

Asterisk 11 представила команды CLI manager show events и manager show event . Выполните эти команды в CLI Asterisk, чтобы получить список событий или узнать подробности конкретного события.


Обратите внимание, что документация диспетчера событий доступна только из CLI Asterisk, если Asterisk был собран с помощью команды make full, а не просто make.

Действия

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

Чтобы получить список заголовков, связанных с определенным действием диспетчера, введите в командной строке Asterisk команду manager show command . Чтобы получить полный список действий диспетчера, поддерживаемых используемой версией Asterisk — введите команду manager show commands в CLI Asterisk.

Action: Login

Username: russell

Secret: russell

Message: Authentication accepted

Аутентификация и обработка сеанса

После успешной аутентификации Asterisk предоставит файл cookie, который идентифицирует аутентифицированный сеанс. Вот пример ответа на действие Login, который включает cookie сеанса от Asterisk:

* Trying 127.0.0.1… connected

> User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7

OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15

Читайте также: