Страница 1 из 1
Время наступления события Ringing
Добавлено: 22 окт 2013, 09:24
hamel1on
Добрый день.
Во время звонка (DIAL) от оператора связи приходит статус Ringing (означает что звонок дошел до конечного абонента и у него звонит телефон).
Как узнать время наступления этого события? В документации ничего про это не нашел.
Есть конечно способ после разрыва соединения (exten=>h,1 ....) выполнить cat /var/log/asterisk/messages | grep {имя канала} и вытащить от туда дату и время.
Есть ли более цивилизованный метод?
Re: Время наступления события Ringing
Добавлено: 22 окт 2013, 10:06
ded
AMI?
Re: Время наступления события Ringing
Добавлено: 22 окт 2013, 12:37
hamel1on
Через AMI тоже можно, но сложно. Надо писать демон, который будет отслеживать эти события, также можно с помощью этого демона задать переменную канала с временем наступления этого события. А после разрыва соединения эту переменную занести в CDR, через exten=>h,1 ... . Вариант хороший. Еще есть варианты?
Re: Время наступления события Ringing
Добавлено: 22 окт 2013, 14:02
Samael28
Боюсь, проще методов нет.
Правка исходников или в разрыв ставить proxy, который будет отлавливать события 180 Ringing и генерировать события.
Re: Время наступления события Ringing
Добавлено: 22 окт 2013, 15:28
hamel1on
Вот к стати информация по изменению исходников.
https://les.net/asterisk/pddpatch/
Re: Время наступления события Ringing
Добавлено: 23 окт 2013, 08:41
virus_net
А можно узнать зачем тебе словить Ringing? Задача то какая стоит ? М.б. есть другой способ решения.
Re: Время наступления события Ringing
Добавлено: 23 окт 2013, 21:16
tma
Может нужно человеку PDD узнать. Как и с extconfig, с insecure/etc - всмето того, чтобы девелоперам подправить исходники, люди изобретают костыли аля AMI в данном случае.
Хотя для PBX сложно представить зачем нужно считать PDD...
Re: Время наступления события Ringing
Добавлено: 24 окт 2013, 01:40
Sfinx
hamel1on писал(а):Через AMI тоже можно, но сложно. Надо писать демон, который будет отслеживать эти события, также можно с помощью этого демона задать переменную канала с временем наступления этого события. А после разрыва соединения эту переменную занести в CDR, через exten=>h,1 ... . Вариант хороший. Еще есть варианты?
Там демон строк от силы в 50 выходит, вот 90% демона :
....
#include <astxx/manager.h>
#include <astxx/manager/action/agi.h>
namespace manager = astxx::manager;
namespace action = astxx::manager::action;
manager::connection *connection;
void process_event(astxx::manager::message::event e)
{
if ((e["Event"] == "Newstate") && (e["ChannelStateDesc"] == "Ringing")) {
// ....
}
}
...
int main() {
string ami_host = "localhost";
string ami_name = "ami7";
string ami_pass = "ami7_pass";
try {
connection = new manager::connection(ami_host);
boost::signals::scoped_connection c =
connection->register_event("", process_event);
action::login login(ami_name, ami_pass);
login(*connection);
for (;;) {
connection->wait_event();
connection->pump_messages();
connection->process_events();
}
}
catch (const manager::action::channel_not_found &c) {
cerr << "main: channel not found " << endl;
}
return 0;
}
....
Re: Время наступления события Ringing
Добавлено: 20 дек 2013, 20:45
Denis005
Может не совсем в тему, но у меня вопрос к Сфинксу - есть ли в Astxx возможность посылать команды (и получать ответы) в то время как там крутится цикл обработки событий (может быть есть пример ?). Поскольку как пишут создатели Astxx он однопоточный.