AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Voicemail + a2billing

Биллинг 8 сообщений -
#1

Voicemail + a2billing


Есть у кого-то удачная история прикручивания сабжа?

Опишите пожалуйста...
#2

Для меня этот вопрос так же стал актуальным.
Смотрел по разным ссылкам. В частности http://allvoipsolutions.org/mydrupal/node/211 и http://www.csrdu.org/nauman/2011/02/08/e ... a2billing/

Но посмотрев код в текущей последней версии а2б нашел какие то наработки по войсмейлу. В вебе и в базе данных не нашел ни одного упоминания. Подскажите, может кто знает где активируется войсмейл.
Интересует в частности DID -> voicemail -> email.
#3

в общем разобрался.
По ссылкам, указанным выше, можно найти ответ на данный вопрос
#4

Набросайте плиз своё решение (патчи, инструкцию и т.п.) по итогам этих двух статей.
_________________
https://github.com/nixonch/a2billing
#5

Пожалуйста.
Так же использована статья http://www.voip-info.org/wiki/view/Aster ... +Voicemail).
Соответственно нужно использовать realtime архитектуру астериска.

Настройка voicemail.conf
Код:

[general]
searchcontexts=yes


Настройка extconfig.conf
Код:
voicemail => mysql,a2billing_db,voicemail_users


Создание таблицы voicemail_users в базе данных a2billing_db

Базовый вариант:

Код:
CREATE TABLE `voicemail_users` (
`uniqueid` int(11) NOT NULL auto_increment,
`customer_id` varchar(10) collate utf8_bin default NULL,
`context` varchar(10) collate utf8_bin NOT NULL,
`mailbox` varchar(15) collate utf8_bin NOT NULL,
`password` int(4) NOT NULL,
`fullname` varchar(150) collate utf8_bin default NULL,
`email` varchar(50) collate utf8_bin default NULL,
`pager` varchar(50) collate utf8_bin default NULL,
`stamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`uniqueid`),
KEY `mailbox_context` (`mailbox`,`context`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1;


Расширенный вариант:

Код:
CREATE TABLE IF NOT EXISTS `voicemail_users` (
`uniqueid` int(4) NOT NULL auto_increment,
`customer_id` varchar(10) collate utf8_bin default NULL,
`context` varchar(10) collate utf8_bin NOT NULL,
`mailbox` varchar(15) collate utf8_bin NOT NULL,
`password` int(4) NOT NULL,
`fullname` varchar(150) collate utf8_bin default NULL,
`email` varchar(50) collate utf8_bin default NULL,
`pager` varchar(50) collate utf8_bin default NULL,
`tz` varchar(10) collate utf8_bin default 'central',
`attach` enum('yes','no') collate utf8_bin NOT NULL default 'yes',
`saycid` enum('yes','no') collate utf8_bin NOT NULL default 'yes',
`dialout` varchar(10) collate utf8_bin default NULL,
`callback` varchar(10) collate utf8_bin default NULL,
`review` enum('yes','no') collate utf8_bin NOT NULL default 'no',
`operator` enum('yes','no') collate utf8_bin NOT NULL default 'no',
`envelope` enum('yes','no') collate utf8_bin NOT NULL default 'no',
`sayduration` enum('yes','no') collate utf8_bin NOT NULL default 'no',
`saydurationm` tinyint(4) NOT NULL default '1',
`sendvoicemail` enum('yes','no') collate utf8_bin NOT NULL default 'no',
`delete` enum('yes','no') collate utf8_bin NOT NULL default 'no',
`nextaftercmd` enum('yes','no') collate utf8_bin NOT NULL default 'yes',
`forcename` enum('yes','no') collate utf8_bin NOT NULL default 'no',
`forcegreetings` enum('yes','no') collate utf8_bin NOT NULL default 'no',
`hidefromdir` enum('yes','no') collate utf8_bin NOT NULL default 'yes',
`stamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`uniqueid`),
KEY `mailbox_context` (`mailbox`,`context`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1;


Изменение common/lib/common.defines.php
Код:
-- define ("ACT_VOICEMAIL", false);
++ define ("ACT_VOICEMAIL", true);

После этого в админке a2b в разделе Customers появляются поля PERMITTED VOICEMAIL и ACTIVE VOICEMAIL SERVICE, с соответствующими значениями Yes и No

Изменение common/lib/Class.A2Billing.php
Делаю изменения в функции call_did (при необходимости можно поправить и call_sip_iax_buddy)
(У меня начинается с строки 1508)
Код:
if ($this->voicemail) {
if (($dialstatus =="CHANUNAVAIL") || ($dialstatus == "CONGESTION") || ($dialstatus == "NOANSWER") || ($dialstatus =="BUSY")) {
// The following section will send the caller to VoiceMail with the unavailable priority.\
-- $dest_username = $this->username;
-- $this -> debug( INFO, $agi, __FILE__, __LINE__, "[STATUS] CHANNEL ($dialstatus) - GOTO VOICEMAIL ($dest_username)");
-- $vm_parameters = $this -> format_parameters ($dest_username.'|s');
++ $did_number = $this->dnid;
++ $this -> debug( INFO, $agi, __FILE__, __LINE__, "[STATUS] CHANNEL ($dialstatus) - GOTO VOICEMAIL ($did_number)");
++ $vm_parameters = $this -> format_parameters ($did_number.'|s');
$agi-> exec(VoiceMail, $vm_parameters);

Замену $dest_username на $did_number произвел по причине привязки дида к войсмейл, а не как было аккаунта клиента к войсмейл. (Кто как пожелает)

Заливка данных в новую таблицу:
Здесь выполнена заливка таблицы по диду, т.е. mailbox будет содержать номер DIDa.

mysql -ua2billinguser -pPassWord -D a2billing_db -e truncate table voicemail_users;
insert into voicemail_users(customer_id,context,mailbox, password, fullname, email)
select S.id_cc_card, 'default', D.did, S.secret, concat(C.lastname,' ',C.firstname) fullname, C.email from cc_sip_buddies S, cc_card C , cc_did_destination E, cc_did D where S.id_cc_card =C.id and E.id_cc_card = C.id and E.id_cc_did = D.id;

Автоматизацию заливки данных в таблицу voicemail_users не осуществлял, т.к. эта задача лежит на плечах веб-программиста
#6

Супер!
Интерфейс в кастомере для просмотра войспочты есть?

_________________
https://github.com/nixonch/a2billing
#7

К сожалению интерфейса нет. Сообщения отправляются на почту(если параметр attach=yes).
По видимому файл A2B_entity_voicemail.php, ссылка на который появляется в ЛК, и является как раз этим платным модулем за 600 евро.
Ну и надо будет что то придумать с проигрыванием звукового файла перед сигналом "пииип". Идея такова, чтобы проигрывался стандартный звуковой файл(на нужном языке), но по желанию чтобы была возможность для каждого дида проигрывать свой файл.
#8

Добавил возможность воспроизводить для каждого DIDа свой файл. Если файла нет то будет проигрываться стандартный
Изменил в common/lib/Class.A2Billing.php. Выглядит теперь так:

Код:
if ($this->voicemail) {
if (($dialstatus =="CHANUNAVAIL") || ($dialstatus == "CONGESTION") || ($dialstatus == "NOANSWER") || ($dialstatus =="BUSY")) {
// The following section will send the caller to VoiceMail with the unavailable priority.\
$did_number = $this->dnid;
$this -> debug( INFO, $agi, __FILE__, __LINE__, "[STATUS] CHANNEL ($dialstatus) - GOTO VOICEMAIL ($did_number)");
$agi -> answer();
$filename = "/var/lib/asterisk/DID/$did_number.wav";
if (file_exists($filename)) {
$agi-> stream_file("/var/lib/asterisk/DID/$did_number");
}
else {
$agi-> stream_file('vm-intro');
}
$vm_parameters = $this -> format_parameters ($did_number.'|s');
$agi-> exec(VoiceMail, $vm_parameters);
}
}