Для того, чтобы получить длину и статус разговора в Asterisk, можно использовать переменные CDR(duration) и CDR(disposition), соответственно. CDR (Call Detail Record) - это запись о каждом завершенном звонке, которую Asterisk сохраняет в базе данных. Вы можете использовать эти переменные в своем скрипте для передачи в событие.
Например, для передачи длины разговора и его статуса в событие, можно использовать следующий код в расширении [ext-did-custom]:
exten => s,n,Set(CallEnd=${STRFTIME(epoch,,%s)})
exten => s,n,Set(CallLength=$[${CallEnd}-${CallStart}])
exten => s,n,Set(CallMeDISPOSITION=${CDR(disposition)})
exten => s,n,Event(custom,CallLength:${CallLength},CallMeDISPOSITION:${CallMeDISPOSITION})
Здесь мы добавляем несколько строк кода, чтобы получить длину разговора (CallLength) и статус разговора (CallMeDISPOSITION), а затем вызываем событие с помощью команды Event, чтобы передать эти значения.
Кроме того, убедитесь, что вы настроили Asterisk на запись CDR в базу данных. Вы можете проверить это, выполнив команду cdr show status в консоли Asterisk. Если CDR не записываются в базу данных, то значения переменных CDR(duration) и CDR(disposition) не будут доступны.
После того, как вы внесли изменения в файл extensions_custom.conf, необходимо перезагрузить Asterisk, чтобы изменения вступили в силу. Для этого можно выполнить команду fwconsole reload в консоли сервера FreePBX.