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