Звездочка авто запись звонка - PullRequest
13 голосов
/ 13 марта 2010

У нас работает звездочка с 8-портовым FXO. FXO подключается к нашей старой АТС (Samsung Office Serv 100).

Теперь мы хотим записать все вызовы, маршрутизируемые через FXO (если он был набран снаружи или поступил снаружи).

Вот диаграмма

           |------|---------------------------------
           |      |--------------24 Lines ---------- Other clasic Phones
PRI------  | PBX  |---------------------------------
           |      |
           |      |
           |      |-----------|---------|
           |      |--8 lines--|         |---------         
           |      |-----------|Asterisk |---------- 50 SIP phone
           |------|           |         |----------
                              |---------|----------

Есть ли простой способ сделать это?

Ответы [ 3 ]

23 голосов
/ 14 марта 2010

У вас работает простая Asterisk? Если это так, вы можете изменить свою абонентскую группу, чтобы начать «мониторинг» канала, который будет записывать вызов.

Документация команды монитора: http://www.voip -info.org / wiki / view / Asterisk + cmd + monitor

Просто для завершения, вот документация:

[root@localhost ~]# asterisk -rx 'core show application monitor'

  -= Info about application 'Monitor' =-

[Synopsis]
Monitor a channel

[Description]
  Monitor([file_format[:urlbase],[fname_base],[options]]):
Used to start monitoring a channel. The channel's input and output
voice packets are logged to files until the channel hangs up or
monitoring is stopped by the StopMonitor application.
  file_format           optional, if not set, defaults to "wav"
  fname_base            if set, changes the filename used to the one specified.
  options:
    m   - when the recording ends mix the two leg files into one and
          delete the two leg files.  If the variable MONITOR_EXEC is set, the
          application referenced in it will be executed instead of
          soxmix and the raw leg files will NOT be deleted automatically.
          soxmix or MONITOR_EXEC is handed 3 arguments, the two leg files
          and a target mixed file name which is the same as the leg file names
          only without the in/out designator.
          If MONITOR_EXEC_ARGS is set, the contents will be passed on as
          additional arguments to MONITOR_EXEC
          Both MONITOR_EXEC and the Mix flag can be set from the
          administrator interface

    b   - Don't begin recording unless a call is bridged to another channel
    i   - Skip recording of input stream (disables m option)
    o   - Skip recording of output stream (disables m option)

By default, files are stored to /var/spool/asterisk/monitor/.

Returns -1 if monitor files can't be opened or if the channel is already
monitored, otherwise 0.

А вот пример того, как вы можете использовать его:

; This fake context records all outgoing calls to /var/spool/asterisk/monitor in wav format.
[fake-outgoing-context]
exten => s,1,Answer()
exten => s,n,Monitor(wav,,b)
exten => s,n,Dial(DAHDI/g0/${EXTEN})
exten => s,n,Hangup()

Очевидно, вам придется внести изменения в мой код, но, надеюсь, это даст вам хорошую идею.

9 голосов
/ 15 января 2014

Пример из реальной жизни


    exten => _87X,1,NoOp()
    exten => _87X,n,MixMonitor(${UNIQUEID}.wav,ab)
    exten => _87X,n,Dial(SIP/${EXTEN},45)
    exten => _87X,n,StopMixMonitor()
    exten => _87X,n,Hangup()

Хорошей практикой является всегда иметь NoOp - первое правило должно начинаться с 1, таким образом вы можете поменять правила с шагом n любым удобным для вас способом.

Всегда лучше использовать MixMonitor, а не Monitor. Мониторинг только записи входящего или исходящего аудио. MixMonitor использует оба.

Кроме того, wav является хорошим выбором в качестве формата - я также использую скрипт для преобразования файлов wav в OGG в конце дня - лучший компромисс между размером / качеством и вопросами лицензирования.

Относительно аргументов

является дополнением b является мостом (хорошо для производства - он будет записывать только при ответе на вызов - не хорошо для отладки)

Что касается StopMixMonitor (), я просто стараюсь, но для примера есть случаи, в которых вы хотели бы остановить запись, например:


    ...
    exten => _39[5-9],n,Dial(SIP/${EXTEN},45)
    exten => _39[5-9],n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavailable)
    exten => _39[5-9],n(busy),NoOp()
    exten => _39[5-9],n,StopMixMonitor()
    exten => _39[5-9],n,Voicemail(${EXTEN},u)
    exten => _39[5-9],n,Hangup()
    exten => _39[5-9],n(unavailble),NoOp()
    exten => _39[5-9],n,StopMixMonitor()
    exten => _39[5-9],n,Hangup()
    ...

В этом примере вы бы остановили запись взаимодействия голосовой почты.

Надеюсь, что это поможет пролить свет на этот вопрос.

5 голосов
/ 02 апреля 2010

В зависимости от характеристик вашего Asterisk, вы также можете найти этот хак полезным. Создайте довольно большой RAM-диск и подключите к нему / var / spool / asterisk / monitor. Таким образом, Asterisk записывает в память не диск. Затем напишите скрипт под cron, чтобы переместить записи в постоянное хранилище каждые 15-30 минут или около того.

...