Рейтинг
0.00

Asterisk

5 читателей, 34 топика

Снять дамп разговора asterisk

Если нужно записать трафик, сделать полный дамп разговора для дальнейшего анализа например в wireshark, самый простой способ это tcpdump
tcpdump -i eth0 udp port 5060 or udp portrange 10000-20000 -s 0 -w shiffer.cap

Если нужен только sip траффик, можно так
tcpdump -i eth0 udp port 5060 -s 0 -w shiffer.cap

FreePBX / Elastix / Asterisk проблема при исходящих звонках

  • Asterisk
Проблема при большом количестве правил в исходящей маршрутизации, больше 100 правил в outbound routes, и появляется ошибка в логах ошибка:
Auto fallthrough, channel 'SIP/300-00000007' status is UNKNOWN
Maximum PBX stack exceeded

По умолчанию AST_PBX_MAX_STACK выставлен в 128, но можно его увеличить и пересобрать asterisk. Находим параметр в файлах:
./include/asterisk/extconf.h
./include/asterisk/pbx.h

Делаем
make
make install

Уведомления о пропущенных вызовах FreePBX 13

  • Asterisk
В интернете есть много примеров как сделать уведомления о пропущенных вызовах, но только для внешних вызовов и только для очередей. Мне же потребовалось сделать это для всех вызовов, только я убрал звонки юзер-юзер, только группы и очереди, внутренние или внешние без разницы. Так же без разницы кто положил трубку.
[macro-hangupcall]
include => macro-hangupcall-custom
exten => s,1(start),NoOp("------------------------")
exten => s,n,Set(chan=${CUT(CHANNEL,/,1)})
exten => s,n,NoOp(${chan})
exten => s,n,GotoIf($["${NODEST}" = ""]?nosip)
exten => s,n,GotoIf($[${chan} != SIP]?nosip)
exten => s,n,ExecIf($["${CDR(disposition)}"="NO ANSWER"]?System(/usr/bin/php -q /var/lib/asterisk/agi-bin/sendemail.php "Пропущен звонок q${NODEST} от ${CALLERID(name)}  Время ${CDR(billsec)}" ))
exten => s,n(nosip),GotoIf($["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]?theend)

exten => s,n(delrgi),Noop(Deleting: RG/${RINGGROUP_INDEX}/${CHANNEL} ${DB_DELETE(RG/${RINGGROUP_INDEX}/${CHANNEL})})
exten => s,n(theend),ExecIf($["${ONETOUCH_RECFILE}"!="" & "${CDR(recordingfile)}"=""]?Set(CDR(recordingfile)=${ONETOUCH_RECFILE}))
exten => s,n,Hangup
exten => s,n,MacroExit()

Asterisk/FreePBX возврат при переводе вызова

  • Asterisk
Часто требуется функция возврата звонка при переводе, если абонент не взял трубку.

globals_custom.conf:
TRANSFER_CONTEXT = custom-test_transfer

extensions_custom.conf:
[custom-test_transfer]
exten => _X.,1,NoOp(Entering custom-test_transfer)
exten => _X.,n,Set(timeoutd=25) ; set timeout in seconds
exten => _X.,n,Set(extLeng=${LEN(${EXTEN})})
exten => _X.,n,NoOp(The extenlength is ${extLeng})
exten => _X.,n,Dial(Local/${EXTEN}@from-internal,${timeoutd})
exten => _X.,n,Set(CALLERID(name)=RB:${CALLERID(name)})
exten => _X.,n,Dial(Local/${BLINDTRANSFER:4:${extLeng}}@from-internal)
exten => _X.,n,Hangup()

Адресная книга для телефонов Grandstream из FreePBX 13

Адресная книга удобная опция, которую часто спрашивают заказчики, поэтому разберемся как прописать ее для телефонов Grandstream

Сначала нам нужен скрипт который выгрузит номера и их Caller ID (он же поле «Имя») из настроек внутренних номеров FreePBX. Я делал на версии FreePBX 13, возможно будет работать и на более ранних.
<?php
$config = include("db/config.php");

$db = new PDO($config["db"], $config["username"], $config["password"], $config["options"]);

$sql = "SELECT extension, name from users";   // Делаем выборку записей книги
$q = $db->prepare($sql);
$q->execute();
$rows = $q->fetchAll();

unlink($config["pb_file_gs"]);  // Удалим старый файл

$fp = fopen($config["pb_file_gs"],"w+");
fputs($fp, '<?xml version="1.0" encoding="UTF-8"?><AddressBook>');

foreach($rows as $row) {         // Пробежим по всем записям, подготовив XML файл нужного вида
    	fputs($fp, '<Contact>
                        <FirstName>'.$row['name'].'</FirstName>
                        <LastName></LastName>
                        <Phone>
                                   <phonenumber>'.$row['extension'].'</phonenumber>
                                   <accountindex>1</accountindex>
                                   <downloaded>1</downloaded>
                        </Phone>
                        <Groups>
                                   <groupid>4</groupid>
                        </Groups>
            </Contact>
	'); 
}
fputs($fp, '<Group id="4">Server</Group> </AddressBook>');
fclose($fp);
?>


Файл «db/config.php»
<?php
return array(
    "db" => "mysql:host=localhost;dbname=asterisk",
    "pb_file_gs" => "/var/www/html/phonebook/phonebook.xml",
    "username" => "freepbxuser",     //Mysql login
    "password" => "123456", //Mysql password
    "options" => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')
);


Потом заходим в телефон «Phonebook -> Phonebook Management»

Enable Phonebook XML Download -> Enabled, HTTP
Phonebook XML Server Path -> http://serverpbx/phonebook/
Phonebook -> Phonebook Management
Phonebook Download Interval -> 60
Remove Manually-edited Entries on Download -> No

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

FreePBX 13 не применяет изменения в конфигурации

FreePBX 13 в Centos 7 выдал ошибку:
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
Exception: Unable to connect to Asterisk through the CLI in file /var/lib/asterisk/bin/retrieve_conf on line 30
Stack trace:
1. Exception->() /var/lib/asterisk/bin/retrieve_conf:30

А дело в том, что изменились права на какой-то папке и нужно обновить права, запустим для этого скрипт
/usr/sbin/fwconsole start

Можете добавить его в запуск при загрузке в файл /etc/rc.d/rc.local

Asterisk GUI

Начал писать свой веб-интерфейс для asterisk, на php + js + html + ajax
Проект opensource. Пока еще на начальной стадии, но уже кое что умеет.
Из того, чего не видел у других — отображение очередей с статусами агентов и с кем они разговаривают (с привязкой к очереди), видно не отвеченные вызовы и нагрузку на очереди. Да, похожее есть в FOP2, но во-первых платно, во-вторых не совсем так.

Ссылка на github.com

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

Скриншот

Как добавить в очередь внешнего абонента

  • Asterisk
Нашел на форумах, возможно пригодится:

Вы можете добавить в очередь любой канал, в том числе внешний номер:

member => Local/12345@default

Где [default] наш контекст.

И так же можно использовать такую конструкцию:
member => SIP/12345@yourprovider

Команды AMI

  • Asterisk
Список команд AMI asterisk версии 11, вывод команды manager show commands
AbsoluteTimeout: Set absolute timeout.  (Priv: system,call,all)
AgentLogoff: Sets an agent as no longer logged in.  (Priv: agent,all)
Agents: Lists agents and their status.  (Priv: agent,all)
Atxfer: Attended transfer.  (Priv: call,all)
Bridge: Bridge two channels already in the PBX.  (Priv: call,all)
Challenge: Generate Challenge for MD5 Auth.  (Priv: <none>)
ChangeMonitor: Change monitoring filename of a channel.  (Priv: call,all)
Command: Execute Asterisk CLI Command.  (Priv: command,all)
ConfbridgeKick: Kick a Confbridge user.  (Priv: call,all)
ConfbridgeList: List participants in a conference.  (Priv: reporting,all)
ConfbridgeListRooms: List active conferences.  (Priv: reporting,all)
ConfbridgeLock: Lock a Confbridge conference.  (Priv: call,all)
ConfbridgeMute: Mute a Confbridge user.  (Priv: call,all)
ConfbridgeSetSingleVideoSrc: Set a conference user as the single video source distributed to all other participants.  (Priv: call,all)
ConfbridgeStartRecord: Start recording a Confbridge conference.  (Priv: system,all)
ConfbridgeStopRecord: Stop recording a Confbridge conference.  (Priv: call,all)
ConfbridgeUnlock: Unlock a Confbridge conference.  (Priv: call,all)
ConfbridgeUnmute: Unmute a Confbridge user.  (Priv: call,all)
CoreSettings: Show PBX core settings (version etc).  (Priv: system,reporting,all)
CoreShowChannels: List currently active channels.  (Priv: system,reporting,all)
CoreStatus: Show PBX core status variables.  (Priv: system,reporting,all)
CreateConfig: Creates an empty file in the configuration directory.  (Priv: config,all)
DAHDIDialOffhook: Dial over DAHDI channel while offhook.  (Priv: <none>)
DAHDIDNDoff: Toggle DAHDI channel Do Not Disturb status OFF.  (Priv: <none>)
DAHDIDNDon: Toggle DAHDI channel Do Not Disturb status ON.  (Priv: <none>)
DAHDIHangup: Hangup DAHDI Channel.  (Priv: <none>)
DAHDIRestart: Fully Restart DAHDI channels (terminates calls).  (Priv: <none>)
DAHDIShowChannels: Show status of DAHDI channels.  (Priv: <none>)
DAHDITransfer: Transfer DAHDI Channel.  (Priv: <none>)
DataGet: Retrieve the data api tree.  (Priv: <none>)
DBDel: Delete DB entry.  (Priv: system,all)
DBDelTree: Delete DB Tree.  (Priv: system,all)
DBGet: Get DB Entry.  (Priv: system,reporting,all)
DBPut: Put DB entry.  (Priv: system,all)
Events: Control Event Flow.  (Priv: <none>)
ExtensionState: Check Extension Status.  (Priv: call,reporting,all)
Filter: Dynamically add filters for the current manager session.  (Priv: system,all)
GetConfig: Retrieve configuration.  (Priv: system,config,all)
GetConfigJSON: Retrieve configuration (JSON format).  (Priv: system,config,all)
Getvar: Gets a channel variable or function value.  (Priv: call,reporting,all)
Hangup: Hangup channel.  (Priv: system,call,all)
IAXnetstats: Show IAX Netstats.  (Priv: system,reporting,all)
IAXpeerlist: List IAX Peers.  (Priv: system,reporting,all)
IAXpeers: List IAX peers.  (Priv: system,reporting,all)
IAXregistry: Show IAX registrations.  (Priv: system,reporting,all)
ListCategories: List categories in configuration file.  (Priv: config,all)
ListCommands: List available manager commands.  (Priv: <none>)
LocalOptimizeAway: Optimize away a local channel when possible.  (Priv: system,call,all)
Login: Login Manager.  (Priv: <none>)
Logoff: Logoff Manager.  (Priv: <none>)
MailboxCount: Check Mailbox Message Count.  (Priv: call,reporting,all)
MailboxStatus: Check mailbox.  (Priv: call,reporting,all)
MixMonitor: Record a call and mix the audio during the recording.  Use of StopMixMonitor is required to guarantee the audio file is available for processing during dialplan execution.  (Priv: system,all)
MixMonitorMute: Mute / unMute a Mixmonitor recording.  (Priv: system,call,all)
ModuleCheck: Check if module is loaded.  (Priv: system,all)
ModuleLoad: Module management.  (Priv: system,all)
Monitor: Monitor a channel.  (Priv: call,all)
MuteAudio: Mute an audio stream.  (Priv: system,all)
Originate: Originate a call.  (Priv: originate,all)
Park: Park a channel.  (Priv: call,all)
ParkedCalls: List parked calls.  (Priv: <none>)
Parkinglots: Get a list of parking lots  (Priv: <none>)
PauseMonitor: Pause monitoring of a channel.  (Priv: call,all)
Ping: Keepalive command.  (Priv: <none>)
PlayDTMF: Play DTMF signal on a specific channel.  (Priv: call,all)
PresenceState: Check Presence State  (Priv: call,reporting,all)
QueueAdd: Add interface to queue.  (Priv: agent,all)
QueueLog: Adds custom entry in queue_log.  (Priv: agent,all)
QueueMemberRingInUse: Set the ringinuse value for a queue member.  (Priv: agent,all)
QueuePause: Makes a queue member temporarily unavailable.  (Priv: agent,all)
QueuePenalty: Set the penalty for a queue member.  (Priv: agent,all)
QueueReload: Reload a queue, queues, or any sub-section of a queue or queues.  (Priv: <none>)
QueueRemove: Remove interface from queue.  (Priv: agent,all)
QueueReset: Reset queue statistics.  (Priv: <none>)
QueueRule: Queue Rules.  (Priv: <none>)
Queues: Queues.  (Priv: <none>)
QueueStatus: Show queue status.  (Priv: <none>)
QueueSummary: Show queue summary.  (Priv: <none>)
Redirect: Redirect (transfer) a call.  (Priv: call,all)
Reload: Send a reload event.  (Priv: system,config,all)
SendText: Send text message to channel.  (Priv: call,all)
Setvar: Sets a channel variable or function value.  (Priv: call,all)
ShowDialPlan: Show dialplan contexts and extensions  (Priv: config,reporting,all)
SIPnotify: Send a SIP notify.  (Priv: system,all)
SIPpeers: List SIP peers (text format).  (Priv: system,reporting,all)
SIPpeerstatus: Show the status of one or all of the sip peers.  (Priv: system,all)
SIPqualifypeer: Qualify SIP peers.  (Priv: system,reporting,all)
SIPshowpeer: show SIP peer (text format).  (Priv: system,reporting,all)
SIPshowregistry: Show SIP registrations (text format).  (Priv: system,reporting,all)
Status: List channel status.  (Priv: system,call,reporting,all)
StopMixMonitor: Stop recording a call through MixMonitor, and free the recording's file handle.  (Priv: system,call,all)
StopMonitor: Stop monitoring a channel.  (Priv: call,all)
UnpauseMonitor: Unpause monitoring of a channel.  (Priv: call,all)
UpdateConfig: Update basic configuration.  (Priv: config,all)
UserEvent: Send an arbitrary event.  (Priv: user,all)
VoicemailUsersList: List All Voicemail User Information.  (Priv: call,reporting,all)
WaitEvent: Wait for an event to occur.  (Priv: <none>)

Команды CLI Asterisk

  • Asterisk
В этой статье мы расскажем как пользоваться Asterisk CLI (Command Line Interface), или проще говоря командной строкой Asterisk. CLI необходима для дебага ошибок и управления самим Asterisk.

1) Для входа в Asterisk CLI необходимо ввести следующие команды:
# rasterisk

или
# asterisk -rvvvvv

Ключ -rvvvvv отвечает за уровень отображения дебага.

Для выполнения команд из консоли Linux можно воспользоваться следующим синтексом:
asterisk -rx "sip show peers"

В кавычках вы указываете какую команду хотите применить.

Для выхода из консоли необходимо ввести «quit» или «exit».

Приведем список существующих команд Asterisk CLI:

logger show channels - выводит список лог файлов
logger set level {DEBUG|NOTICE|WARNING|ERROR|VERBOSE|DTMF} {on|off} - включение/отключение определенного уровня логирования
logger rotate - ротация и новое открытие файлов логирования
logger remove channel - удаляет канал из логирования
logger reload - перезагружает логирование
logger mute - установка паузы на вывод информации в CLI Asterisk (т.е. в консоль не будет сыпаться никакая информация). Отключается это повторным вводом команды.
logger add channel - добавление нового канала для логирования
local show channels - выводит список локальных каналов АТС (внутренние вызовы)
keys show - выводит список ключей RSA
keys init - установка пароля для ключа RSA
indication show - выводит список индикаторов и стран
indication remove - удаление индикатора страны
indication add - установка индикатора для страны
iax2 unregister - снять регистрацию (принудительно) с IAX2 пира
iax2 test losspct - устанавливает % потерянных пакетов для тестирования работоспособности IAX2
iax2 show users [like] - выводит список пользователей IAX
iax2 show threads - выводит список вспомогательных потоков IAX
iax2 show stats - выводит статистику IAX пиров
iax2 show registry - выводит статус регистраций IAX пиров
iax2 show provisioning - выводит список шаблонов IAX для автонастройки
iax2 show peers - выводит информацию об IAX пирах
iax2 show peer - выводит информацию о IAX пире
iax2 show netstats - выводит сетевую статистику о IAX каналах
iax2 show firmware - выводит список доступных прошивок под IAX пользователей
iax2 show channels - выводит активные каналы IAX
iax2 show callnumber usage - выводит текущие записи в таблице IP
iax2 show cache - выводит кэш диалплана IAX
iax2 set mtu - устанавливает размер MTU IAX сообщений
iax2 set debug trunk {on|off} - включение/отключение дебага IAX каналов
iax2 set debug jb {on|off} - включение/отключение дебага джиттер-буфера IAX
iax2 set debug {on|off|peer} - включение/отключение дебага IAX
iax2 reload - перечитать конфигурационные файлы IAX
iax2 prune realtime - очищает кэш realtime
iax2 provision - производит автонастройку IAX пира
http show status - вывести статус HTTP сервера
group show channels - выводит список активных каналов с указанием групп
file convert - конвертация формата аудиофайла
features show - выводит список настроенных коротких кодов
fax show version - показываем версию факсового модуля
fax show stats - выводит историю передачи факсов
fax show settings - показывать глобальные настройки факсов
fax show sessions - показывает статус всех существующих факсовых сессий
fax show session - показывает статус конкретной факсовой сессии
fax show capabilities - показывает информацию о используемых факсовых модулях
fax set debug {on|off} - включение/отключения дебага факсов
dnsmgr status - показывает статус DNS Manager
dnsmgr reload - перезагружает конфигурацию DNS Manager
dnsmgr refresh - выполняет немедленное обновление DNS
dialplan show - выводит подробный список диалпланов
dialplan show globals - показывает глобальные переменные диалплана
dialplan show chanvar - показывает используемые переменные на канале
dialplan set global - установить глобальную переменную в диалплан
dialplan set extenpatternmatchnew true - использовать новый алгоритм набора номеров
dialplan set extenpatternmatchnew false - использовать старый алгоритм набора номеров
dialplan set chanvar -установить переменную на канал
dialplan save - сохранить диалплан в файл
dialplan remove include - удалить "include" из контекста
dialplan remove ignorepat - удалить указанный черный список из контекста
dialplan remove extension - удалить указанный внутренний номер
dialplan remove context - удалить указанный контекст
dialplan reload - перечитать extensions.conf
dialplan debug - включение дебага диалплана
dialplan add include - включить один контекст в другой контекст
dialplan add ignorepat - добавить новый шаблон в черный список
dialplan add extension - добавление внутреннего номера в контекст
devstate list - выводит список состояний устройств
devstate change -  изменить состояние внутреннего номера (доступные значения: UNKNOWN | NOT_INUSE | INUSE | BUSY | INVALID | UNAVAILABLE | RINGING | RINGINUSE | ONHOLD)
database showkey - выводит данные из БД Asterisk по определенному ключу
database show - выводит данные из БД Asterisk
database query - запустить специальный запрос к astdb
database put - добавить/обновить значение в базе данных
database get - получить из базы данных данные
database deltree - удаление из базы данных дерева ключей/значений
database del - удаление из базы данных ключа/значения
data show providers - выводит доступную для получения, по запросу data get, информацию
data get - запрос на получение данных API
dahdi show version - выводит версию модуля Dahdi
dahdi show status - выводит статус интерфейсных плат Dahdi
dahdi show channel - выводит информацию о конкретном канале
dahdi show channels [group|context] - выводит список активных DAHDI каналов
dahdi show cadences - выводит список каденций
dahdi set swgain {rx|tx} - установить коэффициент усиления звука на канале софтверно
dahdi set hwgain {rx|tx} - установить коэффициент усиления звука на канале хардварно
dahdi set dnd - установить/снять статус DND (Do Not Disturb) на канале
dahdi restart - полный рестарт каналов Dahdi
dahdi destroy channels - разрушить канал Dahdi
dahdi create channels - создать канал Dahdi
core waitfullybooted - ждать полной загрузки Asterisk
core stop when convenient - выключение Asterisk, после того когда закончатся текущие вызовы
core stop now - немедленное выключение Asterisk
core stop gracefully - "теплое" выключение Asterisk
core show warranty - выводит информацию о гарантии на Asterisk
core show version - выводит версию Asterisk
core show uptime [seconds] - выводит информацию о продолжительности работы Asterisk и ОС
core show translation - выводит информацию (матрицу) о перекодировании аудиокодеков
core show threads - выводит информацию о запущенных приложениях Asterisk
core show taskprocessors - выводит информацию о запущенных процессах Asterisk
core show sysinfo - выводит информацию об операционной системе
core show switches - выводит альтернативные маршруты
core show sound - выводит информацию по конкретны