Для отслеживания незавершённых звонков в очереди можно использовать более надежные методы, чтобы избежать проблем с неправильной интерпретацией переменной `${CDR(disposition)}`.
Вот несколько шагов и советов, которые могут помочь:
1. **Используйте статус очереди**: При использовании очередей в Asterisk можно отслеживать больше информации о вызовах, например, используя специальный контекст для управления очередями. При завершении вызова в очереди можно воспользоваться дополнительными переменными, такими как `${QUEUESTATUS}`.
2. **Измените логику**: Вместо того, чтобы полагаться на переменную `${CDR(disposition)}`, вы можете отслеживать статус вызова на основе других переменных, которые указывают на то, что вызов был неотвечен. Например, можно добавить дополнительную логику, отправляющую уведомление в Telegram, если вызов был в очереди, но не был распределён ни одному
агенту.
3. **Использование `Queue` метода**: Внутри вашей очереди можно воспользоваться параметрами, такими как `queue_position`, чтобы определить, что вызов не был обработан. Вы можете установить таймер ожидания и, если истечёт время, отправить уведомление о неотвеченном вызове.
4. **Добавьте AGI-скрипт**: Используйте AGI-скрипт, который будет вызываться в момент, когда вызов не был принят. Сохраните состояние вызова в переменные и работайте с ним для отправки уведомлений.
Пример кода для отслеживания состояния вызова на основе тайм-аутов в очереди:
```bash
[ext-queues]
exten => h,1,Noop(${CDR(disposition)})
same => n,Set(VARS=(${CDR(disposition)}))
same => n,ExecIf($["${VARS}" = "NO ANSWER"]?AGI(tg-noanswer.php,${CALLERID(num)}, ${STRFTIME(${EPOCH},,%Y.%m.%d-%H:%M:%S)}))
same => n,Macro(hangupcall)
```
5. **Логирование и анализ**: Включите логирование для отслеживания состояния вызовов. Например, в случае, если звонок не был завершён, записывайте данные в файл или базу данных для последующего анализа.
6. **Обновление и тестирование**: Убедитесь, что вы протестировали ваши изменения в тестовой среде, прежде чем перенести их на рабочую систему, чтобы избежать неприятных сюрпризов.
Используя эти методы, вы сможете более точно отслеживать незавершённые вызовы в очереди и отправлять уведомления в Telegram только при действительно неотвеченных вызовах.