Ребята привет.
Вот такая задачка у меня имеется.
Мне надо определить, закончился разговор на этом пользователе, или он перевел звонок другому абоненту. Т.е. у меня в статистике на звонок с одним переводом будет две записи. a->b и a->c. И надо пометить звонок a->b как звонок окончившейся переводом на другого абонента.
Сравнивал три вывода info:
1) a->b(hangup)(info)
2) a->b(transfer)(info)->c
3) a->b(transfer)->c(hangup)(info)
В варианте 2 и 3 присутствуют variable_transfer_history и variable_transfer_history. Причем они одинаковы. Т.е. по ним можно определить что перевод был, но нельзя определить завершился разговор или продолжается дальше, но с другим абонентом.
Думал оттолкнуться от переменной variable_originated_legs, но тогда как определить что пользователь C положил трубку, а не перевел звонок, так как у него присутствуют variable_transfer_history и variable_transfer_source. и они не отличаются.
Есть предположение использовать
Channel-State: [CS_EXECUTE]
Channel-Call-State: [ACTIVE]
Channel-State-Number: [2] При звонке с трансфером код состояния равен 2, при обычном звонке(финальном) код состояния равен 4. Предполагаю что это [2] - CS_ROUTING и [4] - CS_EXECUTE
Придумано вот отсюда
https://wiki.freeswitch.org/wiki/Channel_States, отсчет начал с 0.
Я придумал корректный способ определения состояния? Или есть более правильный и красивый?