<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=Asterisk_%2B</id>
	<title>Asterisk + - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=Asterisk_%2B"/>
	<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=Asterisk_%2B&amp;action=history"/>
	<updated>2026-04-03T18:40:33Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.1</generator>
	<entry>
		<id>https://support.qbpro.ru/index.php?title=Asterisk_%2B&amp;diff=3071&amp;oldid=prev</id>
		<title>imported&gt;Vix: Новая страница: «В этот статье я опишу простую настройку IP телефонии в небольшом офисе. Мы объединим неск...»</title>
		<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=Asterisk_%2B&amp;diff=3071&amp;oldid=prev"/>
		<updated>2020-07-23T15:04:39Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «В этот статье я опишу простую настройку IP телефонии в небольшом офисе. Мы объединим неск...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;В этот статье я опишу простую настройку IP телефонии в небольшом офисе. Мы объединим несколько отделов в одну сеть, сделаем доступной статистику разговоров через web-интерфейс, а также организуем запись внешних звонков. Надеюсь, эта статья поможет администраторам, начинающему работать с Asterisk Communications Framework. В сети вроде бы полно подобных статей, но я не встретил подробного описания рабочего решения.&lt;br /&gt;
&lt;br /&gt;
Нам понадобится сервер с Ubuntu, IP телефоны (или софтофоны) на рабочих местах и данные от провайдера для подключения к внешним линиям (транкам).&lt;br /&gt;
Список задач следующий:&lt;br /&gt;
&lt;br /&gt;
    Настройка сервера и установка Asterisk.&lt;br /&gt;
    Базовая настройка Asterisk, диалплан (маршрутизация звонков), добавление внутренних номеров, очереди звонков.&lt;br /&gt;
    Настройка Asterisk CDR Viewer для удобного отображения статистики разговоров&lt;br /&gt;
&lt;br /&gt;
Настройка сервера:&lt;br /&gt;
&lt;br /&gt;
Для сервера телефонии мы будет использовать простой компьютер с 2 сетевыми картами. Одна карта (eth1) подключена в нашу локальную сеть (192.168.0.0/24), другая (eth2) в подсеть провайдера (192.168.168.0/30), через которую он предоставляет доступ к своему серверу телефонии. Будем считать, что вы справились с сетевыми настройками самостоятельно (описали настройку сетевых карт в /etc/network/interfaces). В нашем случае адрес SIP сервера провайдера 10.222.2.10, он не принадлежит к выделенной подсети, поэтому мы добавили маршрут через шлюз подсети провайдера с помощью команды:&lt;br /&gt;
&lt;br /&gt;
route add -host 10.222.2.10 gw 192.168.168.1 eth2&lt;br /&gt;
&lt;br /&gt;
Добавим в конец /etc/network/interfaces правило для поднятия маршрута при перезагрузке:&lt;br /&gt;
&lt;br /&gt;
# Маршрут для телефонии&lt;br /&gt;
post-up route add -host 10.222.2.10 gw 192.168.168.1 eth2&lt;br /&gt;
&lt;br /&gt;
Устанавливаем Астериск:&lt;br /&gt;
Ставить будем чистый астериск без web интерфейса. Во-первых, если настраивать через браузер в конфигурационных файлах получается каша и в сложных ситуациях с ошибками разобраться в ней становиться трудно. Во вторых, астериск настроенный руками через конфиги работает стабильнее. Для установки более новой версии, вы можете собрать астериск из исходников, но для наших задач достаточно версии из репозитория.&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install asterisk&lt;br /&gt;
&lt;br /&gt;
Базовая настройка Asterisk&lt;br /&gt;
После установки открываем:&lt;br /&gt;
&lt;br /&gt;
nano /etc/asterisk/sip.conf&lt;br /&gt;
&lt;br /&gt;
Этот файл служит для базовой настройки астериска и конфигурации SIP каналов - пиров (peers). Мы внесем туда данные для авторизации внутренних пользователей и внешних номеров. Сразу после установки астериск будет работать с этим файлом без внесения изменений, но мы подправим его под свои нужды. Комментарии в файле обозначаются знаком ; Вот листинг файла:&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
realm = callcenter ; используется для аутентификации в SIP, задайте полное доменное имя вашего сервера&lt;br /&gt;
context = default ; контекст обработки входящих вызовов в extensions.conf.&lt;br /&gt;
allowguest = no ; запрещает гостевые (без аутентификации) подключения&lt;br /&gt;
allowoverlap = no ; выключить набор по одной цифре (каждая набранная цифра не будет сразу отправляться в канал)&lt;br /&gt;
udpbindaddr = 0.0.0.0 ; адрес на котором Asterisk слушает udp подключения&lt;br /&gt;
tcpenable = no ; выключить поддержку TCP транспорта chan_sip Asterisk (нам не нужна)&lt;br /&gt;
tcpbindaddr = 0.0.0.0 ; адрес на котором Asterisk слушает TCP подключения&lt;br /&gt;
transport = udp ; транспорт по умолчанию&lt;br /&gt;
srvlookup = yes ; включаем возможность принимать SIP вызовы на основании доменных имен&lt;br /&gt;
pedantic = yes ; включить медленную, педантичную проверку полей Call-ID и всех строк в многострочном заголовке SIP сообщения и кодированных URI заголовков&lt;br /&gt;
disallow = all ; запретить использование всех кодеков, чтобы затем разрешить определенные&lt;br /&gt;
allow = alaw&lt;br /&gt;
allow = ulaw&lt;br /&gt;
allow = h263&lt;br /&gt;
allow = h263p&lt;br /&gt;
language = ru ; код языка, которые определены в файле indications.conf — где определяется язык приветствий и специфичные для каждой страны настройки сигналов телефонов&lt;br /&gt;
tonezone = ru&lt;br /&gt;
relaxdtmf = yes ; если плохо распознаются DTMF сигналы, включите данную опцию&lt;br /&gt;
compactheaders = yes ; использовать компактные SIP заголовки&lt;br /&gt;
videosupport = no ; выключаем поддержку видео&lt;br /&gt;
callevents = yes ; для генерации информации о SIP событиях в AMI (asterisk manager interface)&lt;br /&gt;
authfailureevents = yes ; устанавливает статус пира если не может авторизироваться&lt;br /&gt;
alwaysauthreject = yes ; если запрос аутентификации был отклонен, то в ответе НЕ будет написано, что юзер введен неверно, помогает защитится от атаки перебора имен пользователей&lt;br /&gt;
sendrpid = yes ; отправлять Remote-Party-ID header&lt;br /&gt;
autokill = yes ; при недоступности хоста любое новое соединение будет разорвано при отсутствии подтверждения ACK в течение 2000 мс&lt;br /&gt;
rtcachefriends = yes ; кэшируем friends (реалтайм пиры), которые приходят из realtime engine, так же, как если бы они сконфигурированы в sip.conf&lt;br /&gt;
rtsavesysname = yes ; сохраняем SystemName в базе данных в режиме реального времени во время регистрации&lt;br /&gt;
rtupdate = yes ; обновлять IP-адрес, порт и период регистрации пиров при регистрации&lt;br /&gt;
rtautoclear = yes ; завершать регистрацию соединений типа friend созданных на лету до следующей регистрации&lt;br /&gt;
rtpkeepalive = 5 ; раз в 5 сек asterisk будет посылать сообщения проверки активности установленного соединения в RTP-потоке&lt;br /&gt;
ignoreregexpire = yes ; пир не удаляется из памяти, после истечения регистрации&lt;br /&gt;
dtmfmode = rfc2833 ; как клиент обрабатывает сигнализацию DMTF, ставим рекомендуемое значение&lt;br /&gt;
canreinvite = no ; не соединять медиа потоки peer-to-peer в обход сервера&lt;br /&gt;
limitonpeers = yes ; использовать call-limit только для type=peer&lt;br /&gt;
qualifyfreq = 60 ; как часто проверять доступность хоста (в секундах)&lt;br /&gt;
qualify = yes ; посылать SIP запросы OPTIONS для проверки доступности устройства (если сами хосты не проверяют регистрацию)&lt;br /&gt;
transfer = yes ; при необходимости выполнять переадресацию вызова с целью сократить путь пакета между двумя конечными точками&lt;br /&gt;
allowtransfers = yes ; разрешаем любые трансферы, если не переопределено в настройках пира&lt;br /&gt;
&lt;br /&gt;
; далее авторизация у провайдера по 3 телефонным номерам. Это нужно для того, чтобы&lt;br /&gt;
; сервер провайдера знал куда отправлять вызовы для нас. То есть, входящие звонки на наши&lt;br /&gt;
; номера провайдер будет перенаправлять на IP адрес нашего сервера благодаря этой&lt;br /&gt;
; регистрации. При авторизации по IP эти строчки не нужны!&lt;br /&gt;
register = 111111:password1@10.222.2.10/1000&lt;br /&gt;
register = 222222:password2@10.222.2.10/2000&lt;br /&gt;
register = 333333:password3@10.222.2.10/3000&lt;br /&gt;
&lt;br /&gt;
[authentication]&lt;br /&gt;
&lt;br /&gt;
[custom](!)&lt;br /&gt;
; в этой секции мы настраиваем шаблон для внутренних номеров&lt;br /&gt;
; в дальнейшем мы будем указывать его, чтобы не повторять список настроек&lt;br /&gt;
deny=0.0.0.0/0.0.0.0 ; запретить доступ из всех подсетей&lt;br /&gt;
permit=192.168.0.0/255.255.255.0 ; разрешаем доступ только из нашей подсети&lt;br /&gt;
type=friend ; разрешаем совершать и принимать звонки&lt;br /&gt;
qualify=yes ; опрашивать телефон каждые 2 секунды&lt;br /&gt;
port=5060 ; порт sip сервера&lt;br /&gt;
nat=no ; клиенты НЕ находятся за NATом&lt;br /&gt;
host=dynamic ; регистрировать клиента по имени, а не IP адресу для входящего звонка&lt;br /&gt;
dtmfmode=rfc2833 ; способ передачи dtmf сигналов, чаще всего rfc2833&lt;br /&gt;
; Сначала запрещаем все кодеки&lt;br /&gt;
; Потом указываем допустимые кодеки,&lt;br /&gt;
; перечисляя их построчно сверху вниз в порядке приоритете&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw&lt;br /&gt;
allow=alaw&lt;br /&gt;
allow=g729&lt;br /&gt;
allow=g723&lt;br /&gt;
allow=g726&lt;br /&gt;
allow=h261&lt;br /&gt;
allow=h263&lt;br /&gt;
allow=h264&lt;br /&gt;
allow=h263p&lt;br /&gt;
canreinvite=no ; отключаем re-invite ввиду ненадобности а большинстве случаев&lt;br /&gt;
&lt;br /&gt;
; Далее перечисляем внутренние номера&lt;br /&gt;
[100](custom)&lt;br /&gt;
defaultuser=100&lt;br /&gt;
secret=pass100&lt;br /&gt;
callerid=Директор &amp;lt;100&amp;gt;&lt;br /&gt;
pickupgroup=1&lt;br /&gt;
context=sip&lt;br /&gt;
callgroup=1&lt;br /&gt;
&lt;br /&gt;
[101](custom)&lt;br /&gt;
defaultuser=101&lt;br /&gt;
secret=pass101&lt;br /&gt;
callerid=Сотрудник 1 &amp;lt;101&amp;gt;&lt;br /&gt;
pickupgroup=2&lt;br /&gt;
&lt;br /&gt;
[102](custom)&lt;br /&gt;
defaultuser=102&lt;br /&gt;
secret=pass102&lt;br /&gt;
callerid=Склад &amp;lt;102&amp;gt;&lt;br /&gt;
pickupgroup=1&lt;br /&gt;
context=sklad&lt;br /&gt;
callgroup=1&lt;br /&gt;
&lt;br /&gt;
В секции [general] мы описали основные настройки программы: запретили гостевые вызовы не авторизованным пользователям, задали контекст по умолчанию, ввели данные для авторизации к транкам провайдера, и т.д. Далее, в секции [authentication] мы создали шаблон для номеров [custom](!) в котором прописали настройки для всех клиентов, которые будем в дальнейшем тиражировать. Далее мы создали 3 внутренних номера (sip аккаунта), задав номер, пароль, имя, контекст и внутреннюю группу вызова (для возможности перехвата звонка внутри этой группы, по умолчанию клавишами *8). Остальные настройки для каждого внутреннего номера подхватились из секции [custom](!). Подробнее ознакомиться со значениями параметром можно здесь.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подключение к транкам провайдера подробнее:&lt;br /&gt;
&lt;br /&gt;
register = 111111:password1@10.222.2.10/1000&lt;br /&gt;
&lt;br /&gt;
В этой строчке 111111 - это номер телефона предоставленный провайдером, password1 - пароль, 10.222.2.10 - IP адрес сервера провайдера и /1000 - внутренний номер с нашей стороны назначенный для этого транка. При авторизации по IP (когда провайдер не дает имя и пароль для подключения, а только сообщает IP адрес сервера), вместо этой строчки для регистрации номера внутри астериска мы добавляем секции для авторизации ниже строчки [authentication] для каждого номера, примерно таки образом:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[111111]&lt;br /&gt;
host=10.222.2.10&lt;br /&gt;
port=5060&lt;br /&gt;
fromuser=111111&lt;br /&gt;
fromdomain=10.222.2.10&lt;br /&gt;
type=peer&lt;br /&gt;
context=work-in&lt;br /&gt;
insecure=port,invite&lt;br /&gt;
qualify=yes&lt;br /&gt;
nat=no&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw,alaw&lt;br /&gt;
dtmfmode=rfc2833&lt;br /&gt;
defaultuser=111111&lt;br /&gt;
outboundproxy=10.222.2.10&lt;br /&gt;
&lt;br /&gt;
Следующий файл для правки: /etc/asterisk/extensions.conf. В нем мы опишем диалплан, то есть маршрутизацию и обработку входящих и исходящих звонков. Открываем /etc/asterisk/extensions.conf и наполняем примерно таким содержимым:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
static=yes&lt;br /&gt;
writeprotect=no&lt;br /&gt;
clearglobalvars=no&lt;br /&gt;
&lt;br /&gt;
;экстеншн по умолчанию, его принято закрывать в целях безопасности и удобства&lt;br /&gt;
[default]&lt;br /&gt;
exten =&amp;gt; _X.,1,NoOp()&lt;br /&gt;
same =&amp;gt; n,Busy()&lt;br /&gt;
same =&amp;gt; n,HangUp()&lt;br /&gt;
&lt;br /&gt;
;экстеншн для IP телефонов, включает в себя 3 других: для внутренних звонков, входящие и исходящие&lt;br /&gt;
[sip]&lt;br /&gt;
include =&amp;gt; local&lt;br /&gt;
include =&amp;gt; work-out&lt;br /&gt;
include =&amp;gt; work-in&lt;br /&gt;
&lt;br /&gt;
;экстеншн для IP телефона на складе с отдельным номером, включает внутренние звонки и входящие, исходящие звонки проходят по отдельному выделенному номеру 222222&lt;br /&gt;
[sklad]&lt;br /&gt;
include =&amp;gt; local&lt;br /&gt;
include =&amp;gt; work-in&lt;br /&gt;
exten =&amp;gt; _NXX.,1,NoOp()&lt;br /&gt;
same =&amp;gt; n,Macro(recording,${CALLERID(num)},${EXTEN})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/222222/${EXTEN})&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
;экстеншн для локальных звонков внутри офиса для 3х значных номеров начинающихся с цифры 1&lt;br /&gt;
[local]&lt;br /&gt;
exten =&amp;gt; _1XX,1,NoOp()&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/${EXTEN},,Tt)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
;экстеншн для исходящих звонков в город&lt;br /&gt;
[work-out]&lt;br /&gt;
exten =&amp;gt; _NXX.,1,NoOp()&lt;br /&gt;
same =&amp;gt; n,ChanIsAvail(SIP/111111&amp;amp;SIP/222222&amp;amp;SIP/333333)&lt;br /&gt;
same =&amp;gt; n,NoOp(Availchan is ${AVAILCHAN})&lt;br /&gt;
same =&amp;gt; n,NoOp(Availstatus is ${AVAILSTATUS})&lt;br /&gt;
same =&amp;gt; n,Macro(recording,${CALLERID(num)},${EXTEN})&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/111111/${EXTEN},,Tt)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
;экстеншн для входящих звонков в офис, на каждый номер свои правила&lt;br /&gt;
[work-in]&lt;br /&gt;
exten =&amp;gt; 111111,1,Macro(recording,${CALLERID(num)},${EXTEN})&lt;br /&gt;
same =&amp;gt; n,NoOp(Incoming Call on 111111)&lt;br /&gt;
same =&amp;gt; n,Queue(sale,Tt)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; 222222,1,Macro(recording,${CALLERID(num)},${EXTEN})&lt;br /&gt;
same =&amp;gt; n,NoOp(Incoming Call on 222222)&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/102,,Tt)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; 333333,1,Macro(recording,${CALLERID(num)},${EXTEN})&lt;br /&gt;
same =&amp;gt; n,NoOp(Incoming Call on 333333)&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/104,15,Tt)&lt;br /&gt;
same =&amp;gt; n,Dial(SIP/100,15,Tt)&lt;br /&gt;
same =&amp;gt; n,Hangup()&lt;br /&gt;
&lt;br /&gt;
; MixMonitor - макрос для записи звонков&lt;br /&gt;
[macro-recording]&lt;br /&gt;
exten =&amp;gt; s,1,GoToIf($[&amp;quot;${RECORDING}&amp;quot; = &amp;quot;1&amp;quot;]?yes:no)&lt;br /&gt;
exten =&amp;gt; s,n(yes),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});&lt;br /&gt;
exten =&amp;gt; s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent &amp;quot;${DIR_RECORDS}${fname}.wav&amp;quot;  &amp;quot;${DIR_RECORDS}${fname}.mp3&amp;quot; &amp;amp;&amp;amp; rm -f &amp;quot;${DIR_RECORDS}${fname}.wav&amp;quot; &amp;amp;&amp;amp; chmod o+r &amp;quot;${DIR_RECORDS}${fname}.mp3&amp;quot;);&lt;br /&gt;
exten =&amp;gt; s,n,Set(CDR(filename)=${fname}.mp3);&lt;br /&gt;
exten =&amp;gt; s,n,Set(CDR(realdst)=${ARG2});&lt;br /&gt;
exten =&amp;gt; s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});&lt;br /&gt;
exten =&amp;gt; s,n(no),Verbose(Exit record);&lt;br /&gt;
&lt;br /&gt;
Шаблоны номеров начинаются с символа _&lt;br /&gt;
Dial - это команда совершения вызова, параметрами к этой команде указываются канал и номер транка на который переводить звонок, также я добавил параметр Tt - для возможности перевода звонков. Подробнее про команду тут, там же можно найти описания других команд.&lt;br /&gt;
NoOp - команда для вывода сообщения в консоль, чтобы проще было отлаживать в случае ошибок, параметром передается строка сообщения или необходимые переменные.&lt;br /&gt;
Queue - команда переводящая вызов в очередь (имя задается в скобках), дальнейшая логика работы указанной очереди описывается в файле /etc/asterisk/queues.conf&lt;br /&gt;
Hangup - команда используется для завершения вызова в конце разговора.&lt;br /&gt;
Помимо основных команд мы используем макрос [macro-recording] для записи разговора. Сам макрос описан ниже, взяли мы его из мануала к CDR Viewer.&lt;br /&gt;
&lt;br /&gt;
Регистрируем телефонные аппараты (или софтофоны) пользователей. Указываем в настройках адрес SIP сервера (внутренний IP нашего астериска), трехзначное имя и пароль из файла sip.conf.&lt;br /&gt;
&lt;br /&gt;
Осталось описать очередь, в которую попадает позвонивший на номер 111111. Открываем файл /etc/asterisk/queues.conf и вносим примерно следующее:&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
autofill=yes&lt;br /&gt;
shared_lastcall=yes&lt;br /&gt;
updatecdr=yes&lt;br /&gt;
timeout=15&lt;br /&gt;
&lt;br /&gt;
; название очереди&lt;br /&gt;
[sale]&lt;br /&gt;
; далее просто раскоментируйте строчу в зависимости от того, какой вариант вам подойдет&lt;br /&gt;
; перенаправить звонок на канал который самое долгое время не отвечал на звонки&lt;br /&gt;
;strategy=leastrecent&lt;br /&gt;
; перенаправить звонок на канал следующий после канала который отвечал на прошлый звонок&lt;br /&gt;
;strategy=rrmemory&lt;br /&gt;
; звонить по каналу который ответил на наименьшее количество звонков из очереди&lt;br /&gt;
;strategy=fewestcalls&lt;br /&gt;
; звонить по всем доступным каналам пока один не ответит&lt;br /&gt;
strategy=ringall&lt;br /&gt;
&lt;br /&gt;
announce-frequency=30 ;сообщать клиенту позицию и/или приблизительное время ожидания обработки его вызова&lt;br /&gt;
announce-holdtime=yes ; анонс приблизительное время ожидания обработки вызова абонента (если время более минуты)&lt;br /&gt;
setinterfacevar=yes ; включает значение переменной MEMBERINTERFACE, которая хранит номер члена очереди, поднявшего трубку&lt;br /&gt;
joinempty=no ; не включать абонентов в очередь если в ней не зарегистрировано ни одного оператора&lt;br /&gt;
leavewhenempty=yes ; покинуть очередь если нет доступных операторов&lt;br /&gt;
ringinuse=no ; не звенеть оператору если статус InUse.&lt;br /&gt;
&lt;br /&gt;
; тут мы перечисляем номера, которые участвуют в очереди&lt;br /&gt;
member =&amp;gt; SIP/101&lt;br /&gt;
member =&amp;gt; SIP/103&lt;br /&gt;
member =&amp;gt; SIP/105&lt;br /&gt;
&lt;br /&gt;
Подробнее про очереди можете прочитать, например, здесь.&lt;br /&gt;
Базовая настройка астериска закончена. Перейдем к статистике.&lt;br /&gt;
&lt;br /&gt;
Статистика и запись звонков&lt;br /&gt;
&lt;br /&gt;
Для сбора статистики нам нужно будет настроить выгрузку логов в mysql. Потом установить&lt;br /&gt;
Asterisk CDR Viewer и подцепить к той же базе. Устанавливаем поддержку mysql:&lt;br /&gt;
&lt;br /&gt;
apt-get install asterisk-mysql&lt;br /&gt;
&lt;br /&gt;
Далее логинимся в mysql и создаем базу для звонков примерно так:&lt;br /&gt;
&lt;br /&gt;
mysql -uroot -ppassword&lt;br /&gt;
&lt;br /&gt;
создаем базу:&lt;br /&gt;
&lt;br /&gt;
CREATE DATABASE `voip` CHARACTER SET utf8 COLLATE utf8_general_ci;&lt;br /&gt;
&lt;br /&gt;
создаем пользователя:&lt;br /&gt;
&lt;br /&gt;
CREATE USER 'voip'@'localhost' IDENTIFIED BY 'password';&lt;br /&gt;
&lt;br /&gt;
даем ему полный доступ до базы:&lt;br /&gt;
&lt;br /&gt;
GRANT ALL PRIVILEGES ON voip.* TO 'voip'@'localhost';&lt;br /&gt;
&lt;br /&gt;
обновляем права:&lt;br /&gt;
&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
Далее описываем структуру базы как-то так:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
USE voip;&lt;br /&gt;
CREATE TABLE cdr (&lt;br /&gt;
calldate datetime NOT NULL default '0000-00-00 00:00:00',&lt;br /&gt;
clid varchar(80) NOT NULL default '',&lt;br /&gt;
src varchar(80) NOT NULL default '',&lt;br /&gt;
dst varchar(80) NOT NULL default '',&lt;br /&gt;
dcontext varchar(80) NOT NULL default '',&lt;br /&gt;
channel varchar(80) NOT NULL default '',&lt;br /&gt;
dstchannel varchar(80) NOT NULL default '',&lt;br /&gt;
lastapp varchar(80) NOT NULL default '',&lt;br /&gt;
lastdata varchar(80) NOT NULL default '',&lt;br /&gt;
duration int(11) NOT NULL default '0',&lt;br /&gt;
billsec int(11) NOT NULL default '0',&lt;br /&gt;
disposition varchar(45) NOT NULL default '',&lt;br /&gt;
amaflags int(11) NOT NULL default '0',&lt;br /&gt;
accountcode varchar(20) NOT NULL default '',&lt;br /&gt;
uniqueid varchar(32) NOT NULL default '',&lt;br /&gt;
userfield varchar(255) NOT NULL default '',&lt;br /&gt;
did varchar(50) NOT NULL default '',&lt;br /&gt;
recordingfile varchar(255) NOT NULL default '',&lt;br /&gt;
filename varchar(255) NOT NULL default '',&lt;br /&gt;
KEY `calldate` (`calldate`),&lt;br /&gt;
KEY `dst` (`dst`),&lt;br /&gt;
KEY `accountcode` (`accountcode`),&lt;br /&gt;
KEY `uniqueid` (`uniqueid`) &lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE cdr ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY;&lt;br /&gt;
EXIT;&lt;br /&gt;
&lt;br /&gt;
Но лучше импортировать в базу файл mysql_cdr.sql из папки docs архива Asterisk-CDR-Viewer-Mod. Там всегда свежая структура и необходимые триггеры в базе.&lt;br /&gt;
&lt;br /&gt;
Подключать астер к mysql мы будет черед драйвер ODBC. Для этого устанавливаем:&lt;br /&gt;
&lt;br /&gt;
apt-get install unixODBC unixODBC-dev libmyodbc&lt;br /&gt;
&lt;br /&gt;
Смотрим где лежат конфигурационные файлики для ODBC командой:&lt;br /&gt;
&lt;br /&gt;
odbcinst -j&lt;br /&gt;
&lt;br /&gt;
Видим, что конфигурация для MySQL ODBC драйвера выполняется в файле /etc/odbcinst.ini&lt;br /&gt;
смотрим updatedb&lt;br /&gt;
Ищем, где располагаются файлы:&lt;br /&gt;
&lt;br /&gt;
locate libmyodbc.so&lt;br /&gt;
locate libodbcmyS.so&lt;br /&gt;
либо так: find / -name 'lib*odbc*.so'&lt;br /&gt;
&lt;br /&gt;
У меня они лежали в /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so и /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so&lt;br /&gt;
Соответственно меняем пути в файле /etc/odbcinst.ini&lt;br /&gt;
&lt;br /&gt;
[MySQL]&lt;br /&gt;
Description  = ODBC for MySQL&lt;br /&gt;
Driver          = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so&lt;br /&gt;
Setup           = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so&lt;br /&gt;
&lt;br /&gt;
Далее проверяем, включена ли в asterisk поддержка odbc. Если ставили из исходников -должны были собрать с поддержкой, если через apt-get она и так включена. Заходим в астер:&lt;br /&gt;
&lt;br /&gt;
asterisk -rvvv&lt;br /&gt;
&lt;br /&gt;
и выполняем:&lt;br /&gt;
&lt;br /&gt;
odbc show&lt;br /&gt;
&lt;br /&gt;
Следующим шагом будет конфигурация файла /etc/odbc.ini, который используется для создания идентификатора, который Asterisk будет использовать для ссылки на эту конфигурацию, если в будущем решите сменить БД, то следует переконфигурировать это файл. Как-то так:&lt;br /&gt;
&lt;br /&gt;
[MySQL-asterisk]&lt;br /&gt;
Driver           = MySQL&lt;br /&gt;
Description   = MySQL Connector for Asterisk&lt;br /&gt;
Server           = localhost&lt;br /&gt;
Port               = 3306&lt;br /&gt;
Database       = voip&lt;br /&gt;
username      = voip&lt;br /&gt;
;password     = password&lt;br /&gt;
Option          = 3&lt;br /&gt;
Socket          = /var/run/mysqld/mysqld.sock&lt;br /&gt;
Charset         = utf8 &lt;br /&gt;
&lt;br /&gt;
проверим:&lt;br /&gt;
&lt;br /&gt;
odbcinst -s -q  &lt;br /&gt;
&lt;br /&gt;
Теперь сконфигурируем Asterisk для работы с БД через ODBC, для этого служит файл /etc/asterisk/res_odbc.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
nano /etc/asterisk/res_odbc.conf&lt;br /&gt;
[ENV]&lt;br /&gt;
[asterisk]&lt;br /&gt;
enabled =&amp;gt; yes&lt;br /&gt;
dsn =&amp;gt; MySQL-asterisk&lt;br /&gt;
username =&amp;gt; voip&lt;br /&gt;
password =&amp;gt; password&lt;br /&gt;
pooling =&amp;gt; no&lt;br /&gt;
pre-connect =&amp;gt; yes&lt;br /&gt;
&lt;br /&gt;
Теперь перезапускаем астериск:&lt;br /&gt;
&lt;br /&gt;
service asterisk restart&lt;br /&gt;
&lt;br /&gt;
Заходим в астер и проверяем связь - смотрим и анализируем вывод:&lt;br /&gt;
&lt;br /&gt;
asterisk -rvvvv&lt;br /&gt;
cdr show status&lt;br /&gt;
odbc show all&lt;br /&gt;
&lt;br /&gt;
Теперь Настраиваем CDR устанавливаем программу для конвертации разговоров в mp3:&lt;br /&gt;
&lt;br /&gt;
apt-get install lame&lt;br /&gt;
&lt;br /&gt;
Далее скачиваем CDR Viewer, распаковываем например, в папку /var/www/html/stat , в файле config.inc.php прописываем доступ к mysql и имя базы (voip) и имя таблицы (cdr), путь до папки с записями разговоров и т.д. . Даем права на папку:&lt;br /&gt;
&lt;br /&gt;
chown www-data:www-data -R /var/www/html/stat&lt;br /&gt;
&lt;br /&gt;
Трудностей там не должно возникнуть. Далее открываем CDR через браузер как-то так:&lt;br /&gt;
http://ip-addres-astera/stat&lt;br /&gt;
После этого все должно работать. Если что-то не получилось - пишите в комментариях)&lt;br /&gt;
&lt;br /&gt;
UPD 19.06.2019&lt;br /&gt;
В статье используется довольно старая версия фреймворка Астериск, для установки последней LTS версии следует ставить программу из исходников по этой статье. Если нужна более актуальная и обширная статья по настройке, или вам необходима помощь с внедрением - пишите в комментариях.&lt;/div&gt;</summary>
		<author><name>imported&gt;Vix</name></author>
	</entry>
</feed>