Asterisk Phonebook - телефонная книга
Общая телефонная книга, основанная на CMS/LAMP и используемая Asterisk PBX, имя и номер заносятся в базу MySQL и выводятся, например, в XML-браузере IP телефона или браузере. Click to Dial из браузера.
Установка Asterisk Phonebook
Требуются следующие приложения
- Apache Webserver 2.x +
- php 4.2 - 5.3 (в 5.4 без register_globals = On не работает) php 5.4 register_globals
- Asterisk 1.4 - Asterisk 12
- MySQL 4.1 +
- FreePBX (опционально)
# cd /var/www/html
Скачайте исходник
Распакуйте архив
# tar -xzvf phonebook_asterisk.tar.gz
Создайте директорию ~/phonebook/upload и установите права на неё rwxrwxrwx
# mkdir phonebook_asterisk/upload \\ # chmod 777 /var/www/html/phonebook_asterisk/upload
Отредактируйте php.ini
register_globals = On
Создание базы данных MySQL
CREATE DATABASE IF NOT EXISTS `asterisk_phonebook` ; CREATE TABLE `pbook` ( `id` int(11) NOT NULL auto_increment, `calld` varchar(50) NOT NULL, `name` varchar(50) NOT NULL, `bemerkung` text NOT NULL, `Diverses` int(1) NOT NULL default '0', KEY `id` (`id`), KEY `calld` (`calld`), KEY `name` (`name`) ) ; CREATE TABLE `pbook_directory` ( `id` int(9) NOT NULL, `tel` varchar(20) NOT NULL, `name` varchar(50) NOT NULL, `strasse` varchar(50) NOT NULL, `ort` varchar(50) NOT NULL, KEY `tel` (`tel`), KEY `name` (`name`) ) ; CREATE TABLE IF NOT EXISTS `users` ( `extension` varchar(20) NOT NULL default '', `password` varchar(20) default NULL, `name` varchar(50) default NULL, `voicemail` varchar(50) default NULL, `ringtimer` int(3) default NULL, `noanswer` varchar(100) default NULL, `recording` varchar(50) default NULL, `outboundcid` varchar(50) default NULL, `directdid` varchar(50) default NULL, `didalert` varchar(50) default NULL, `faxexten` varchar(20) default NULL, `faxemail` varchar(50) default NULL, `answer` tinyint(1) default NULL, `wait` int(2) default NULL, `privacyman` tinyint(1) default NULL ) ; CREATE TABLE IF NOT EXISTS `events` ( `id` int(10) unsigned NOT NULL auto_increment, `timestamp` datetime NOT NULL default '0000-00-00 00:00:00', `event` longtext, `uxtime` int(11) NOT NULL, `DEST` varchar(20) NOT NULL, `SRC` varchar(20) NOT NULL, `UID` varchar(20) NOT NULL, `CID` varchar(20) NOT NULL, `CIDNAME` varchar(50) NOT NULL, `IDdest` varchar(20) NOT NULL, `IDsrc` varchar(20) NOT NULL, `EVNT` varchar(20) NOT NULL, PRIMARY KEY (`id`) ); ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CREATE DATABASE IF NOT EXISTS `asteriskcdrdb` ; CREATE TABLE IF NOT EXISTS `cdr` ( `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default '', `src` varchar(80) NOT NULL default '', `dst` varchar(80) NOT NULL default '', `dcontext` varchar(80) NOT NULL default '', `channel` varchar(80) NOT NULL default '', `dstchannel` varchar(80) NOT NULL default '', `lastapp` varchar(80) NOT NULL default '', `lastdata` varchar(80) NOT NULL default '', `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default '', `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default '', `uniqueid` varchar(32) NOT NULL default '', `userfield` varchar(255) NOT NULL default '' ) ;
Смотри также Команды mysql
Настройки Phonebook
Внесите изменения в файл config.php
Для MySQL
$mysql_host="localhost"; // eg, localhost - хост MySQL $mysql_user="root"; // пользователь базы данных mysql $mysql_password="********"; // пароль к базе данных mysql $mysql_db_book="asterisk_phonebook"; // mysql settings DB asteriskcdrdb for cdr tables $cdr_mysql_host="localhost"; // eg, localhost - should not be empty for productive servers $cdr_mysql_user="root"; // mysql db user, if you not shure prefer root $cdr_mysql_password="********"; // insert your password $cdr_mysql_db_book="asteriskcdrdb"; // should be well
Общие настройки
// Language $language="en"; // A-Z register $anz_numbers=40; // количество записей // диапазон внутенних номеров asterisk: $local_from=1; // range begin $local_to=1000; // range end $local_list="100,209"; // дополнительные номера через запятую $local_freepbx=1; // внутренние номера freepbx, если freepbx нет: $local_freepbx=0 ; // отображаемая длина номера $clidlen=25; // мониторинг событий // пример : $sip_monitoring="100,101,111,112,113"; // 100 = ваш номер $sip_monitoring="100,101,111,112,113"; // 1 = show all report entries | 0 = only the local phone number $report_show_all=1;
Для Asterisk
/// Asterisk //////////////////////////////////// // Location of Asterisk LOGFILE $logfile = "/var/log/asterisk/cdr-csv/Master.csv"; // Настройки для Asterisk API в 'manager.conf' // [phonebook] // secret = 1234 // deny=0.0.0.0/0.0.0.0 // permit=127.0.0.1/255.255.255.0 // read = system,call,log,verbose,command,agent,user // write = system,call,log,verbose,command,agent,user $UserName="phonebook"; $Secret="1234"; // контекст из которого будет производится набор в extensions.conf $context="from-internal"; //// end of config.php //////////////////////////
Включить поиск по CID для FreePBX
Отредактируйте /etc/asterisk/extensions.conf
# ;; найдите следующий контекст [macro-user-callerid] ;;;; вместо этой строки exten => s,1,Noop(user-callerid: ${CALLERID(name)} ${CALLERID(number)}) ;;;; вставьте следующие две exten => s,n,DBGet(name=cidname/${CALLERIDNUM}) exten => s,n,SetCIDName(${name}) ;;;; дальше отставить код exten => s,n,GotoIf($["${CHANNEL:0:5}" = "Local"]?report) exten => s,n,GotoIf($["${REALCALLERIDNUM:1:2}" != ""]?start) exten => s,n,Set(REALCALLERIDNUM=${CALLERID(number)})
Перезапустите Asterisk
CLI>core reload
Использование Phonebook
Откройте в браузере http://your_pbx/phonebook_asterisk/book.php
Укажите в настройках номер своего екстеншена и префикс выхода на внешние линии (если требуется) и сохраните ссылку.
Уже существующие телефоны отображаются справа. Кликните на требуемый номер.
Дополнительно
Если вам требуется ограничить доступ к телефонной книге используйте .htaccess.
<Limit GET> Order deny,allow Allow from localhost Allow from 192.168.1. Deny from all Satisfy any </Limit>
troubleshooting
При попытке набора в консоли Asterisk CLI возникает ошибка:
ERROR[]: utils.c: ast_careful_fwrite: fwrite() returned error: Broken pipe
Отредактируйте файл, добавив sleep(1);
nano ../phonebook_asterisk/manager.php
$timeout = 10; $asterisk_ip = "127.0.0.1"; $socket = fsockopen($asterisk_ip,"5038", $errno, $errstr, $timeout); fputs($socket, "Action: Login\r\n"); fputs($socket, "UserName: $UserName\r\n"); fputs($socket, "Secret: $Secret\r\n\r\n"); fputs($socket, "Action: Originate\r\n" ); fputs($socket, "Channel: SIP/$ext\r\n" ); fputs($socket, "Exten: $num\r\n" ); fputs($socket, "Callerid: $ext to $call <$ext>\r\n"); fputs($socket, "Timeout: 15000\r\n" ); fputs($socket, "Context: $context\r\n" ); fputs($socket, "Priority: 1\r\n" ); fputs($socket, "Async: yes\r\n\r\n" ); fputs($socket, "Action: Logoff\r\n\r\n"); sleep (1); $wrets=fgets($socket,128);
http://highsecurity.blogspot.ru/2011/03/cisco-sip-ip-phone-corporate-directory.html
Обсуждение
Здравствуйте, в php 5.5.9 будет работать?
подскажите мы в существующую базу данных asterisk добавляем новые таблицы и поля?
Если вы о БД создаваемой при установке FreePBX, то как минимум, существует таблица users.
Так что для книги в этом случае будет лучше, создать базу данных с другим именем,
а asteriskcdrdb использовать существующую.