Получить записи звонков от Asterisk

Я пишу приложение для sip-телефона С#, и мне нужно получить записи о звонках. Я использую PortSip в качестве клиентской библиотеки sip. И с этим есть проблема: в библиотеке есть функция записи звонков, но ~10% звонков не записываются(не знаю почему, даже перезапуск StartRecording не помогает, просто не может начать запись текущего звонка).
Поэтому я решил записывать звонки на сервер asterisk и загружать их в нашу базу данных после окончания звонка. Данные Asterisk CDR хранятся в базе данных mysql, и я не вижу там ни одного уникального callId. Интересно, можем ли мы записать записи звонков в таблице в базу данных, чтобы получить их по каким-то ключам, связанным с cdr?
Или другой вариант, который я вижу, это записывать все звонки на сервере asterisk, загружать нужный на наш компьютер через ftp и сохраните его на наших серверах.


person 0x49D1    schedule 28.05.2012    source источник


Ответы (1)


Я определенно хотел бы, чтобы звездочка записывала звонки вместо sip-устройств. Вы можете записывать звонки в asterisk, используя Монитор в вашем диалплане, например:

exten => 555,1,Answer
exten => 555,2,Monitor(wav,filename)
...

Это автоматически запишет все звонки на добавочный номер 555 (вы можете использовать шаблон диалплана для автоматической записи всех вызовов на все добавочные номера, но это будет зависеть от вашей конкретной настройки). Вы также можете запустить сценарий AGI, чтобы различать, какие звонки должны быть записаны, если вы не хотите записывать все из них.

Имя целевого файла может быть составлено с помощью ani-dnis-datetime, чтобы сделать его уникальным, или с любыми другие переменные со звездочкой. Например: ${CALLERID(ani)}-${EXTEN}. Вы также можете использовать уникальную переменную идентификатора вызова ${UNIQUEID}, например ${CALLERID(ani)}-${EXTEN}-${UNIQUEID}.

Что касается CDR, вы можете иметь его в виде файла csv, sqlite или реляционной базы данных, такой как mysql, postgresql и т. д., используя cdr_odbc.

Что делает вызов уникальным, так это поле uniqueid. Таким образом, в вашем CDR у вас будет источник, пункт назначения, задействованные каналы, даты, время ответа, статус набора и т. д., а также это поле уникального идентификатора, чтобы вы могли связать данный вызов с данным аудиофайлом (записанный вызов) и с задействованными sip устройствами. Файлы wav можно загружать и периодически создавать резервные копии, если это необходимо.

Надеюсь, поможет!

person marcelog    schedule 28.05.2012
comment
Спасибо за ответ. На данный момент мы делаем следующее: если мое клиентское программное обеспечение не может записать файл локально, я посылаю какой-то DTMF, чтобы запустить запись на звездочке. После этого я планирую получить файл с сервера. Кстати, столбец 'uniqueid' в моей базе данных 'cdr' mysql пуст! Что-то неправильно настроено? Это может спасти меня, если я найду записанный файл с ${CALLERID(ani)}-${EXTEN}-${UNIQUEID} по уникальному идентификатору от моего клиента. - person 0x49D1; 28.05.2012
comment
Пожалуйста! Обратите внимание, что небезопасно позволять клиенту контролировать, когда запись начинается/останавливается, поэтому я бы рекомендовал контролировать это на стороне сервера. Также проблема, с которой вы столкнулись, упоминается здесь: voip-info .org/wiki/view/Asterisk+cdr+mysql, но у меня самой не было этой проблемы, поэтому вы можете опубликовать это как другой вопрос вместе с вашими файлами конфигурации. Кстати, в ссылке также упоминается, что этот уникальный идентификатор не гарантируется уникальным :( Так что я бы выбрал ani-dnis-datetime и/или включив исходный канал вместе с полем uniqueid. Ура. - person marcelog; 28.05.2012