Determine reason for QueueCallerAbandon AMI event

I am building an app that counts the number of abandoned callers. The problem I am facing is that QueueCallerAbandon is fired when they reach the timeout of the queue. There isn’t anything in the AMI event stating that the timeout was reached or the reason for it to fire. Has anyone been able to successfully identify an actual QueueCallerAbandon event when a caller hangs up the phone versus reaching a timeout for the queue?

Is that event’s HoldTime value sufficient for your purposes?

Outside of AMI but the queue.log output may be useful for you as well.