Добрый день.
Кто может подсказать, как лучше всего определять что человек разговаривает в данный момент?
Проблема в том, что в стандартном функционале модуля Voximplant при равномерном распределении, звонок попадает на разговаривающего в данный момент человека, если подходит его очередь.
Я решил эту проблему проверкой таблицы b_voximplant_call на наличие записи со статусом "STATUS_CONNECTED" по целевому пользователю.
| Код |
|---|
//Exclude talking users less 30min
public static function GetActiveStatusTalking($userId)
{
if ($userId <= 0)
return false;
$oldTime = new Bitrix\Main\Type\DateTime();
$oldTime->add('-30 min');
$res = Bitrix\Voximplant\CallTable::getList(Array(
'select' => Array('ID', 'USER_ID', 'STATUS'),
'filter' => Array('USER_ID' => $userId, '>DATE_CREATE'=>$oldTime, 'STATUS' => Bitrix\Voximplant\CallTable::STATUS_CONNECTED),
));
if($res->fetch()) {
$result = true;
}
else {
$result = false;
}
return $result;
}
//End
|
Однако, в последнее время наблюдаются обрывы связи с воксимплантом при соединении и разговоре(это отдельная тема). И данные обрывы приводят к тому, что фактически не обрабатывается завершение разговора и запись остается в таблице. Соответственно при наличии этой записи мой код считает что пользователь разговаривает и не отправляет на него звонки. Для избежания этой ситуации я ввел действительный промежуток в 30мин, после которого разговор считается завершенным.
В целом схема работает, но выглядит достаточно криво.
Поэтому вопрос, есть ли какой-то более удобный способ определять, что человек разговаривает в данный момент?