Рейтинг
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 - выводит истор