понедельник, 9 июня 2014 г.

CUCM запись звонков с помощью Asterisk

Off: Нда,  заголовок получился странный, так и напрашиваются разные провокационные вопросы.
К делу.
Исходно имеем свежеустановленный CentOS 6.5 и CUCM 10

Ограничения:
 - Подобным методом можно записывать звонки только с телефонов 3го поколения (в которых поддерживается Built In Bridge). Список телефонов можно посмотреть в Отчетах Unified CM Phone Feature List, на данный момент это: модели из 6900, 7800, 7900, 8800, 8900 и 9900 серии плюс еще несколько из коммуникаторов и видео терминалов. (Есть альтернатива, которая позволит делать запись со всех телефонов - это поставить еще voip monitor sniffer и писать звонки с его помощью, но это потребует более сложной конфигурации и включения SPAN портов на коммутаторе).

Настройка Asterisk


Настройка сети и имени хоста

vi /etc/sysconfig/network-scripts/ifcfg-eth0
ifup eth0
vi /etc/sysconfig/network
vi /etc/hosts


Установка EPEL репозитория и обновление системы
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum update

reboot

Установка Asterisk
yum install asterisk sox

1. В данном случае Asterisk требуется только для записи звонков, то версия роли не играет. У меня установилась asterisk x86_64  1.8.26.1-1.el6
2. sox понадобится для склейки wav файлов.

В настройки iptables добавить строки, для разрешения SIP и RTP протоколов.
vi /etc/sysconfig/iptables
-A INPUT -p tcp --dport 5060 -j ACCEPT
-A INPUT -p udp --dport 5060 -j ACCEPT
# RTP - the media stream (related to the port range in /etc/asterisk/rtp.conf)
-A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT

Создать директорию для хранения аудио записей:
mkdir /var/spool/asterisk/callrec
chown asterisk /var/spool/asterisk/callrec
chgrp asterisk /var/spool/asterisk/callrec
chmod 770 /var/spool/asterisk/callrec
Хотя права можно и не настраивать asterisk все равно пишет файлы под root/

Настроить SIP trunk со стороны Asterisk
vi /etc/asterisk/sip.conf
[cucm1]
type=friend
context=default
host=<cucm1_ip_address>
disallow=all
allow=all
nat=no
canreinvite=yes

[cucm2]
type=friend
context=default
host=<cucm2_ip_address>
disallow=all
allow=all
nat=no
canreinvite=yes


Создать extension на который пойдет запись (в моем случае 8505)
vi /etc/asterisk/extensions.conf
[default]
exten => 8505,1,Set(foo=${SIP_HEADER(From)})
exten => 8505,2,Set(direct=${CUT(foo,\;,2)})
exten => 8505,3,Set(direct=${CUT(direct,-,2)})
exten => 8505,4,Set(addrA=${CUT(foo,\;,6)})
exten => 8505,5,Set(addrA=${CUT(addrA,=,2)})
exten => 8505,6,Set(addrB=${CUT(foo,\;,10)})
exten => 8505,7,Set(addrB=${CUT(addrB,=,2)})
exten => 8505,8,Set(addrB=${CUT(addrB,>,1)})
exten => 8505,9,Set(folder=${STRFTIME(${EPOCH},,%Y%m%d)})
exten => 8505,10,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)}-${direct}-${addrA}-${addrB})
exten => 8505,11,Monitor(wav,/var/spool/asterisk/callrec/${folder}/${fname},m)
exten => 8505,12,Answer(2000000000)

Разбор extension:
Заголовок SIP пакета приходящий с CUCM

1 шаг получам заголовок SIP
2,3  получаем направление звука (nearend/farend)
4,5 вынимаем из заголовка первый номер телефона (здесь 1214)
6,7,8 вынимаем из заголовка второй номер телефона (здесь 8009)
9, 10 настраиваем имя папки и имя файла
11 включаем запись
12 отвечаем на входящий звонок
Итоговое имя файлов будет выглядеть так:
20140522155047-farend-1214-8009.wav
20140522155047-nearend-1214-8009.wav

service asterisk start



В последствии, для объединения входящих/исходящих записей понадобится выполнить:
sox -m 20140522155047-farend-1214-8009.wav 20140522155047-nearend-1214-8009.wav mix.wav



Настройка CUCM


SIP Trunk Security Profile (System -> Security -> SIP Trunk Security Profile). Создаем новый.


 Настройка SIP Trunk (Device -> Trunk)



Делаем Reset Tunk

 Настройка Recording Profile (Device -> Device Settings -> Recording Profile). В качестве адреса указываем extension, который завели на Asterisk

Включаем Built In Bridge на телефоне и устанавливаем Softkey с включенной кнопкой записи, например Standard Chaperone Phone

 Заходим в настройки линии и включаем запись


 Автоматическая запись будет включаться при каждом звонке. Можно поставить избирательную запись, тогда запись начнется после нажатия на телефоне кнопки Record.


PS: Если запись идет с голосовых шлюзов, то в dial-peer обязательно должен быть выключен vad. Иначе запись входящего голоса (farend) идет без тишины, т.е. все пустоты пропускаются и время на farend и nearend рассинхронизируется, далее восстановить разговор практически не возможно.

79 комментариев:

  1. Добрый день! сделал по вашему туториалу. Недавно заметил проблемку при прослушивании записей. Ровно в 2:43 начинаются помехи. Не сталкивались с такой проблемой?
    После траблшутинга понятно что не дело не в астере и не в конверторах.

    ОтветитьУдалить
    Ответы
    1. Не сталкивался, у меня просто нет звонков в такое время. Но может быть, если случай подвернется, попробую протестировать.

      Удалить
    2. нет не по времени, а по длительности звонка. Когда прослушиваю запись все нормально, только вот после 2:43 начинаются помехи, и так во всех записях которые больше 2:43.

      Удалить
    3. Тогда, нет, слушал звонки и на 3 минуты и на 7, есть звонки более 40 минут - все чисто.

      Удалить
  2. Спасибо весьма полезно :)
    чуть ли не единственная статья в интернете

    ОтветитьУдалить
  3. Добрый день.
    yum не видит пакета астерикса.
    единственное отличие что centos 7 версии и пакет поставил этот http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    ОтветитьУдалить
    Ответы
    1. va0816, добрый день. Можете помочь, необходимы те же версии которые описаны в заметке. или не обязательно, тогда у меня не получается настроить :(

      Удалить
    2. Думаю версии не должны иметь значения. (Хотя у меня пока версии не менялись)

      Удалить
    3. yum install asterisk sox
      Пишет что пакета с названием asterisk не найдено

      Удалить
    4. [root@rec-as ~]# yum install asterisk
      Загружены модули: fastestmirror
      Loading mirror speeds from cached hostfile
      * base: mirror.yandex.ru
      * epel: fedora-mirror01.rbc.ru
      * extras: mirror.yandex.ru
      * updates: mirror.yandex.ru
      Пакета с названием asterisk не найдено.
      Ошибка: Выполнять нечего
      [root@rec-as ~]#

      Удалить
    5. У вас проблема ни с версиями а с базовыми знаниями linux. Либо не установили, либо отключен репозиторий EPEL. Пункты перед yum install выполняли?

      Удалить
    6. ну с базовыми знаниями конечно есть, но делал всё по пунктам, кроме установки другой версии epel, о чём и писал в первом сообщении

      Удалить
    7. сейчас смотрю почему ну установилось в прошлый раз эта версия было ...ease-6.8.noarch.rpm, поэтому и не был найден путь, установил 7 версию, и задал вопрос от версии это зависит или нет(раз ьн не видит астериска) сейчас полазил по фтп, в 7 ветке его нету, в 6 есть. как правильно удалить 7ю8 версию и поставить 6.8.(CentOS 7)

      Удалить
    8. Вполне возможно. В силу особенности дистрибутива CentOS и в отличии от Fedora(обновления пакетов выходят редко, но зато стабильные), пакет Asterisk мог еще просто не появится для 7ки.
      Варианта 2 поставить астериск из исходников, статей в интернете достаточно(например https://voipnotes.ru/install-asterisk-13-on-centos-7 тут правда ставят много вспомогательных модулей, хотя для сабж задачи, достаточно голого астериска). Либо поставить Cent 6й версии.

      Удалить
    9. я читал эту статью, и также подумал про дополнительные зависимости, и поэтому не решился комбинировать ваш метод и той статьи.
      по ней там конфиг астериска видимо лежит в бд, и соответно ваша статься не сильно поможет. а на 7 центос, можно поставить epel шестой ветки?

      Удалить
    10. Ну поставить то вы можете))) Репозиторий - это всего лишь файл в папке /etc/yum.repos.d/ со ссылками на зеркала. Толку от этого ни будет никакого. Пакеты из репозитория предназначенного для версии 6 не будут установлены на 7. У вас только 2 варианта, описаных выше. Если установить астериск без доп опций то и конфигурироваться он будет обычным образом. НА сколько я вижу бд там только для cdr логов. Просто не включайте эти опции...

      Удалить
    11. Поставил по новой на 6.8. всё по мануалу. Отличия только в cucm 7.1.5. В нём нет с последней картинки "Recording media source". остальное всё по картинкам. ну и не вешал софткей с кнопкой азпаиси, или без него не будет работать постоянная запись?
      asterisk -rvvvv
      sip show registry
      не показывает транка на cucm

      Удалить
    12. Без софткея постоянная запись работает.
      sip show channels
      должен быть active SIP dialog

      Удалить
    13. Подскажите пожалуйста, зачем в диалплане задержка в команде?
      exten => 8505,12,Answer(2000000000).

      с парсингом заголовка разобрался, в пакете всё-равно только один номер можно было выловить

      Удалить
    14. Это время на которое астериск "поднимает тубку" и записывает все что к нему попадает. По сути это число бесконечность, если посчитать там дней 20 получается. Т.е. астериск записывает пока телефонный разговор не будет прерван другой стороной.

      у меня заголовок такой как написано, может от версии зависит, может от какого-то параметра, пока нет времени посмотреть.

      Удалить
    15. ну да Дни 23,15.

      Мой заголовок я писал в прошлом посте , только он куда-то исчез.
      Пока разбираюсь, пытался использовать MixMonitor, но один фиг, астериск (в консоли видно) два канала делает на звонок. сейчас ищу как произвести склейку файлов, видимо её придётся в крон запихивать, так как экстейшен h не помогает, ввиду двух файлов

      Удалить
    16. я пробовал, но сразу в один не получается.
      Если глубже, то поверху я еще написал портал на php, который склеивает файлы только при обращении пользователя. но тут реализация уже зависит от исходной задачи. Вроде есть команда exten => System которая выполняет внешние скрипты, можно попробовать через нее.

      Удалить
    17. пробовал, но она не отрабатывает как надо, так как создается два канала на один звонок, и видимо пока файлы заняты соответственно склеить их не может.+ и запускается два раза

      Удалить
    18. Спасибо за инструкцию.
      Запустил у себя запись

      Удалить
  4. Добрый день!
    Вроде все сделал. Но не работает.
    При звонке на номер 8505 запись идет. Но при звонке с этого номера на любые другие, cucm в asterisk ничего не шлет. Где поискать?

    ОтветитьУдалить
    Ответы
    1. Этот номер принадлежит системе записи (Астериск) с него не может идти звонка. Да и прямо на него звонить мало смысла, ну только если сделать какую-то запись. Смысл в том чтоб на телефоне включить Build in Bridge. Если в обычном виде голос идет от телефона А(1111) к телефону В(2222), то с если включить эту функцию + запись на телефоне А(1111) то голосовой поток пойдет и на телефон В(2222) и на Астериск(8505) параллельно.

      Удалить
    2. Спасибо за ответ.
      Звонил на 8505, дабы проверить - верно ли настроен транк и все CSSы.
      Build in Bridge включил, но голосовой поток не идет на Астериск. Т.е. CUCM ничего не шлет на Астериск при звонке от абонента А(1111) к абонента И(2222).

      Удалить
    3. Последний пункт "Заходим в настройки линии и включаем запись
      " сделали?

      Удалить
    4. Да, автозапись поставил и Recording Profile выставил

      Удалить
    5. Тогда наврено надо смотреть что говорит астериск в момент звонка
      asterisk -rvvvvv

      Удалить
    6. в том то и дело, что ничего не прилетает

      Удалить
    7. А состояние сип-транка до астериска поднят? И какая модель телефона? Она точно поддерживает BiB?

      Удалить
    8. "состояние сип-транка" - это не понял. Сам транк поднят, звонок на 8505 проходит (в CLI на Астериске вижу).
      Тестировал на 7965, 9951 и на 6921 аппаратах.

      Удалить
    9. Если прямой звонок на Астериск проходит, значит что то не так в настройках телефона на cucm. Но что конкретно уже не подскажу. Возможно стоит посмотреть в RTMT Real Time Data - там подробно описывается весь SIP диалог.

      Удалить
  5. Здравствуйте. Подскажите пожалуйста у меня не работает запись даже на этапе дозвона на 8505, звонок сбрасывается. Куда копать ?

    ОтветитьУдалить
    Ответы
    1. Попробую потелепатировать. В моей заметке нет пункта про маршрутизацию, наверно я про него забыл в силу очевидности. Должен существовать Route Pattern для номера 8505 для которого gateway будет как раз транк на астериск. Иначе этого номера у Вас просто не будет в диалплане.

      Удалить
  6. Добрый день. У меня вопрос, я настроил в офисе. Он замечательно пишет. Но проблема возникает не пишет телефоны которые в другом филиале. Сигнализация проходить (звонок) при поднятий трубки тишина, на телефоне пишет режим hold и пикает.

    ОтветитьУдалить
    Ответы
    1. Если честно не понял вопроса. Совсем не работают звонки или только запись не работает. Хотя решение в обоих случаях скорее всего одинаковое - маршрутизация. rtp должен работать между каждым из клиентов (в том числе сервер записи - он тоже клиент).

      Удалить
    2. Спасибо! Решил вопрос. Кодеки на CUCM для регионов прописал ulaw&alaw.

      Удалить
  7. Добрый день у меня файлы на 44 подскажите как это исправить если кто то знает . Спасибо

    ОтветитьУдалить
    Ответы
    1. Скорее всего, это означает что, управление на сервер записи приходит (SIP), а голос(RTP) нет. Надо проверять маршрутизацию/файрволлинг что rtp приходит на сервер записи

      Удалить
  8. reboot centos помогло ))))

    ОтветитьУдалить
  9. добрый день, всё работает как указана в данной статье. Я попробовал сделать с Mixmonitor для того чтоб сделать единый файл сразу без sox-m но он записывает серовно mono а хотелось бы sterio .Я не очень хорошо знаю Asterisk может ктото подскажет как он это сделал. Спасибо

    [incoming]
    exten => 6111,1,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})
    exten => 6111,2,MixMonitor(/var/spool/asterisk/callrec/${fname}.wav)
    exten => 6111,3,Answer(2000000000)


    ОтветитьУдалить
    Ответы
    1. Несколько лет назад пробовал все варианты и MixMonitor в том числе. Почему не стал его использовать уже не помню, но помню что по какой-то причине он не работал как надо и пришлось использовать именно sox. Возможно в новых версиях астериска что-то изменилось.

      Удалить
  10. а что вы сейчас используйте ? для записи звонков?

    ОтветитьУдалить
    Ответы
    1. Что и написано. как настроил несколько лет назад, так и не трогал, работает без сбоев.

      Удалить
  11. Добрый день, подскажите пожалуйста, используем FreePBX, Я правильно понимаю что нужно вносить изменения в файлы:
    extensions_custom.conf и sip_custom.conf

    Сейчас при звонке наномер 8505, слышу ответ Астериска, что: "номер отключен"

    ОтветитьУдалить
    Ответы
    1. Я не знаком с продуктом FreePBX, полагаю Вам надо обратить к документации.

      Удалить
  12. Добрый день
    Подскажите, в чем может быть причина что запись происходит только стороны А. В какую сторону копать ??

    ОтветитьУдалить
    Ответы
    1. Маршрутизация/файроллинг. Оба IP и телефона А и телефона B должны иметь доступ к серверу записи.

      Удалить
  13. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. Маршрутизация/файроллинг. Все участники(телефоны, шлюзы) с которых идет запись, должны иметь доступ к серверу записи.

      Удалить
  14. Этот комментарий был удален автором.

    ОтветитьУдалить
  15. Добрый день. Благодарю за ответ. Действительно, трафик поступает при попытке позвонить на телефон asteriska (номер X), в таком случае записи идут. Но при попытке звонка с номера A на номер В записи имеют размер 44 байта.

    ОтветитьУдалить
    Ответы
    1. Либо что-то пропустили в настройках, Build In Bridge не включен, не настроен, не ассоциирован профиль записи на линии.
      Либо не доступа RTP в связи с маршрутизацией/файрволлингом.

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
    3. iptables отключён, Build In Bridge включён, СUCM настроен в соответствии со статьёй, все серверы и телефоны находятся в одной сети, СUCM пингуется с сервера Asteriska. Куда ещё смотреть?

      Удалить
    4. та же проблема

      Удалить
    5. Работа BiB достаточно простая Картинка 17

      RTP потоки идут от записываемого телефона к устройству записи.
      Поэтому если сигнализация работает и пишутся пустые файлы(44 байт), то проблема остается только одна, сетевое взаимодействие записываемого к записывателю.
      Так же стоит убедиться (как написано в самом начале), что ваш телефон вообще поддерживает функцию BiB.

      Удалить
  16. https://github.com/ysakiyev/asterisk_cucm_recording
    Ребят, если кому нужны вот рабочие скрипты.
    в кукме настройки те ж что и тут в туториале.

    ОтветитьУдалить
    Ответы
    1. На CUCM 9.1 всё было хорошо скрипт рабочий, когда обновильса до 11.5, опять пишет в моно файлы, у кого то есть другой скрипт который работает с версией 11.5? спасибо

      Удалить
  17. Да всё настроено в точности, как тут, телефоны поддерживают BiB,пишет же астер при звонке на его номер, но на другие номера нет, жаль...

    ОтветитьУдалить
  18. Можно Вам прислать диалплан?

    ОтветитьУдалить
  19. Можно ли писать звонок , который ушел с телефона по Call forward на мобильный?

    ОтветитьУдалить
  20. voip monitor sniffer это так продукт называется?

    ОтветитьУдалить
    Ответы
    1. Да. Но я такой вариант не настраивал

      Удалить
    2. он бесплатен? можете ссылку привести?

      Удалить
    3. Фронтенд платный
      https://www.voipmonitor.org/product-and-services/voipmonitor-software
      а сама монитор опенсорс
      https://sourceforge.net/projects/voipmonitor/

      Удалить
  21. Приветствую всех.
    Звонки частично не пишутся, но файла создаются размером (44 байт).
    Настроил BiB и профиль записи на телефоне(7841).
    Звоню на виртуальный номер(конференция) на CUCM, звонок пишется.
    Звоню на внешку(сотовый) звонок пишется.
    Звоню на внутрянку не пишется, создается пустой файл.
    Смотрю на шлюзе tcpdump:
    15:53:36.830135 IP cucm-01.xxxl.ru.sip > asterisk.xxxl.ru.sip: SIP, length: 1472
    15:53:36.830150 IP cucm-01.xxxl.ru > asterisk.xxxl.ru: udp
    15:53:36.835695 IP asterisk.xxxl.ru.sip > cucm-01.xxxl.ru.sip: SIP, length: 806
    15:53:36.846795 IP asterisk.xxxl.ru.sip > cucm-01.xxxl.ru.sip: SIP, length: 1118
    15:53:36.851525 IP cucm-01.xxxl.ru.sip > asterisk.xxxl.ru.sip: SIP, length: 689
    15:53:36.851755 IP cucm-01.xxxl.ru.sip > asterisk.xxxl.ru.sip: SIP, length: 1472
    15:53:36.851768 IP cucm-01.xxxl.ru > asterisk.xxxl.ru: udp
    15:53:36.855085 IP asterisk.xxxl.ru.sip > cucm-01.xxxl.ru.sip: SIP, length: 805
    15:53:36.855453 IP cucm-01.xxxl.ru.sip > asterisk.xxxl.ru.sip: SIP, length: 843
    15:53:36.856439 IP asterisk.xxxl.ru.sip > cucm-01.xxxl.ru.sip: SIP, length: 738
    15:53:36.858869 IP cucm-01.xxxl.ru.sip > asterisk.xxxl.ru.sip: SIP, length: 736
    15:53:36.873184 IP asterisk.xxxl.ru.sip > cucm-01.xxxl.ru.sip: SIP, length: 756
    15:53:36.873283 IP asterisk.xxxl.ru.sip > cucm-01.xxxl.ru.sip: SIP, length: 740
    15:53:36.876058 IP cucm-01.xxxl.ru.sip > asterisk.xxxl.ru.sip: SIP, length: 689
    15:54:32.726191 IP cucm-01.xxxl.ru.sip > asterisk.xxxl.ru.sip: SIP, length: 1472
    15:54:32.726205 IP cucm-01.xxxl.ru > asterisk.xxxl.ru: udp
    15:54:32.730644 IP asterisk.xxxl.ru.sip > cucm-01.xxxl.ru.sip: SIP, length: 798
    15:54:32.740340 IP asterisk.xxxl.ru.sip > cucm-01.xxxl.ru.sip: SIP, length: 1112
    15:54:32.742502 IP cucm-01.xxxl.ru.sip > asterisk.xxxl.ru.sip: SIP, length: 682
    15:54:32.747232 IP cucm-01.xxxl.ru.sip > asterisk.xxxl.ru.sip: SIP, length: 827
    15:54:32.750088 IP asterisk.xxxl.ru.sip > cucm-01.xxxl.ru.sip: SIP, length: 730

    Пр этом в tcpdump при звонках которые пишутся пролетают записи вида:
    15:51:44.051712 IP cucm-01.xxxl.ru.27688 > asterisk.xxxl.ru.18908: UDP, length 172
    В чем может быть дело?

    ОтветитьУдалить
    Ответы
    1. Полагаю, что при звонке на конференцию и внешний вызов CUCM выступает как MTP и RTP траффик идет CUCM-Acterist. В случае внутреннего вызова RTP идет напрямую Телефон - Телефон (а для записи RTP пойдет Телефон - Asterisk). И могу предположить, что нет маршрутизации/правил_файвола на участке Телефон - Asterisk.
      Для проверки также можно на телефоне на котором идет запись включить
      Use Trusted Relay Point = Enabled.
      Если запись заработает, то точно нет связи Телефон - Asterisk

      Удалить
    2. Добрый день. У меня точно такая же проблема. Включил Use Trusted Relay Point . Также пишутся файлы по 44 байта.
      >>И могу предположить, что нет маршрутизации/правил_файвола на участке Телефон - Asterisk
      С телефона asterisk доступен. Фаерволла между ними нет. Не подскажете в чем еще может быть проблема?

      Удалить
  22. Доброго времени суток! Пытаюсь подружить Asterisk и CUCM. Возможно ли это, если они находятся в разных подсетях, но уверенно друг друга пингуют?

    ОтветитьУдалить
  23. Прекрасная статья - но у меня в наследстве CUCM 6.1 + аналогичная связка с asterisk 1.8 - проблема что при звонке на номер записи убивается изначальный СLID. Несколько дней сидел в tcpdump, перепробовал все режимы отображения СLID в настройках транка в CUCM - до фени. Самое полезное - x-nearenddevice=SEP001CXXXXX

    ОтветитьУдалить