Wed, 09/26/2018 - 04:22
#1
Different models have different behaviour (RU)
Добрый день!
У нас есть необходимость поддержать ответ на звонок нажатием кнопки Talk. При наличии входящего вызова нажатие на Talk должно снимать трубку, а при наличии установленного соединения с абонентом нажатие на Talk должно давать отбой.
Но мы столкнулись с разным поведением гарнитур Savi W430A-M и CS520 при нажатии.
CS520:
а) При отстуствии связи при нажатии Talk всегда прилетает пара событий OnCallStateChanged
cse_args.callState == CALL_STATE_DEVICE_CHANGE && cse_args.deviceEventkind == DEVICE_EVENT_KIND_UNKNOWN
cse_args.callState == CALL_STATE_HOOK_IDLE && cse_args.deviceEventkind == DEVICE_EVENT_KIND_IDLE_TALKPRESS
б) При входящем звонке при нажатии Talk прилетает аналогичная пара.
в) Когда связь установлена, поведение меняется.
- Нажатие на Talk выключает звук, никаких событий не прилетает.
- Второе нажатие на Talk снова включает звук, и снова генерится пара событий
cse_args.callState == CALL_STATE_DEVICE_CHANGE && cse_args.deviceEventkind == DEVICE_EVENT_KIND_UNKNOWN
cse_args.callState == CALL_STATE_HOOK_IDLE && cse_args.deviceEventkind == DEVICE_EVENT_KIND_IDLE_TALKPRESS
Savi W430A-M явно меняет состояние на "вкл-выкл" и шлёт разные события.
Вне зависимости от наличия связи:
а) Если гарнитура выключена, при нажатии Talk
- гарнитура включается
- прилетает пара
cse_args.callState == CALL_STATE_DEVICE_CHANGE && cse_args.deviceEventkind == DEVICE_EVENT_KIND_UNKNOWN
cse_args.callState == CALL_STATE_HOOK_IDLE && cse_args.deviceEventkind == DEVICE_EVENT_KIND_IDLE_TALKPRESS
б) Если гарнитура включена, опять же несмотря на наличие или отстутствие связи при нажатии Talk
- гарнитура выключается
- прилетает одиночное событие
cse_args.callState == CALL_STATE_DEVICE_CHANGE && cse_args.deviceEventkind == DEVICE_EVENT_KIND_UNKNOWN
Таким образом,
1. CS520 ведёт себя одинаково вне зависимости от начального состояния, но по-разному в зависимости от наличия связи. И тут есть проблема, хотя и не очень неприятная: для отбоя связи при активном звонке оператору придётся дважды нажать на кнопку Talk (поскольку первое нажатие не генерирует никаких событий)
2. W430A-M ведёт себя по-разному в зависимости от начального состояния, но независимо от налияи связи. То есть меняет состояние как триггер. И это более неприятное положение - потому что возможны разные сценарии
а) Гарнитура выключена. Приходит входящий вызов. Нажатие на кнопку Talk её включает и позволяет принять звонок. Ок, всё хорошо.
б) Гарнитура включена. Приходит входящий вызов. Нажатие на кнопку Talk её вЫключает, но позволяет принять звонок. Можно, конечно, проигнорировать событие cse_args.callState == CALL_STATE_DEVICE_CHANGE && cse_args.deviceEventkind == DEVICE_EVENT_KIND_UNKNOWN - но тогда для принятия звонка придётся нажимать кнопку дважды
в) Гарнитура выключена. Установлен звонок с абонентом (соединились без участия кнопки Talk). Оператор обнаруживает, что не слышит собеседника. Если сейчас нажать Talk - то это будет означать отбой связи, хотя оператор только хотел включить звук. Вот это самое неприятное последствие.
В связи с чем вопросы.
1. Это не баг конкретного экземпляра гарнитуры?
2. Можно ли обеспечить путём каких-то настроек одинаковое поведение гарнитур?
3. Можно ли узнать текущее состояние гарнитуры W430A-M - включена она или выключена?
4. Можно ли управлять состоянием гарнитур? Например, поймав нажатие на Talk, мы точно знаем, что хотим её выключить, а не просто сменить состояние. Или наоборот, включить.
С уважением, Д.Сандул