Пример из реальной жизни
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()
...
В этом примере вы бы остановили запись взаимодействия голосовой почты.
Надеюсь, что это поможет пролить свет на этот вопрос.