Как отслеживать время нахождения клиента в очереди до момента ответа на вызов оператором?
Для этого не нужно AMI. У команды Queue есть параметры macro и gosub, в которых указывается, соответственно, макрос и подпрограмма, вызываемые в момент соединения оператора с абонентом. Просто сохраняем время помещения клиента в очередь, а при соединении вычисляем время нахождения в очереди.
...
same => n,Set(__start=${EPOCH})
same => n,Queue(callcenter,CcRt,,,,,,queue-connected)
...
[queue-connected]
exten => s,1,Set(inQueueTime=$[${EPOCH}-${start}])
...
Затем можно вызвать скрипт через System или напрямую записать данные в базу через ODBC.
Мне известен только один источник для таких данных Queue Log. Данный лог можно писать не только в файл, но и, к примеру, в БД. Анализируя этот лог можно получить интесресующие вас параметры

Примером кода с похожей аналитикой может быть эта панель
https://github.com/revall/queue-stats