Asterisk Phonebook - телефонная книга

Общая телефонная книга, основанная на CMS/LAMP и используемая Asterisk PBX, имя и номер заносятся в базу MySQL и выводятся, например, в XML-браузере IP телефона или браузере. Click to Dial из браузера.

phonebook

Требуются следующие приложения

  • Apache Webserver 2.x +
  • php 4.2 - 5.3 (в 5.4 без register_globals = On не работает) php 5.4 register_globals

register_globals fix

register_globals fix

foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $_SG) {
    foreach ($$_SG as $_SGK => $_SGV) {
        $$_SGK = $_SGV;
    }
}

Добавить в начала исполняемого php скрипта.


  • Asterisk 1.4 - Asterisk 12
  • MySQL 4.1 +
  • FreePBX (опционально)
  # cd /var/www/html

Скачайте исходник

phonebook_asterisk.tar.gz

Распакуйте архив

  # 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
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
Укажите в настройках номер своего екстеншена и префикс выхода на внешние линии (если требуется) и сохраните ссылку. phonebook setup

Уже существующие телефоны отображаются справа. Кликните на требуемый номер.

phonebook call

Дополнительно

Если вам требуется ограничить доступ к телефонной книге используйте .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

Павел, 2017/03/12, 2017/03/12

Здравствуйте, в php 5.5.9 будет работать?

Павел Колпак, 2017/02/07

подскажите мы в существующую базу данных asterisk добавляем новые таблицы и поля?

Zvezdo4kin, 2017/02/07, 2017/02/07

Если вы о БД создаваемой при установке FreePBX, то как минимум, существует таблица users.

MariaDB [asterisk]> desc users;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| extension        | varchar(20)  | NO   |     |         |       |
| password         | varchar(20)  | YES  |     | NULL    |       |
| name             | varchar(50)  | YES  |     | NULL    |       |
| voicemail        | varchar(50)  | YES  |     | NULL    |       |
| ringtimer        | int(3)       | YES  |     | NULL    |       |
| noanswer         | varchar(100) | YES  |     | NULL    |       |
| recording        | varchar(50)  | YES  |     | NULL    |       |
| outboundcid      | varchar(50)  | YES  |     | NULL    |       |
| sipname          | varchar(50)  | YES  |     | NULL    |       |
| noanswer_cid     | varchar(20)  | NO   |     |         |       |
| busy_cid         | varchar(20)  | NO   |     |         |       |
| chanunavail_cid  | varchar(20)  | NO   |     |         |       |
| noanswer_dest    | varchar(255) | NO   |     |         |       |
| busy_dest        | varchar(255) | NO   |     |         |       |
| chanunavail_dest | varchar(255) | NO   |     |         |       |
| mohclass         | varchar(80)  | YES  |     | default |       |
+------------------+--------------+------+-----+---------+-------+
16 rows in set (0.00 sec)

Так что для книги в этом случае будет лучше, создать базу данных с другим именем,
а asteriskcdrdb использовать существующую.

Только авторизованные участники могут оставлять комментарии.
  • artikle/asterisk_phonebook.txt
  • Последние изменения: 2018/06/19