Comments 19
А как сделать так, чтобы callback ввели во всех техподдержках? Пожааалуйста…
Порекомендовать им ознакомиться с нашей статьей, как вариант. Ну или обратиться к правительству и законодательно обязать :)
Вы сообщаете клиенту о примерном периоде времени, в течении которого ему перезвонит оператор?
Да, в коде есть часть где сообщается время ожидания в очереди, оно, по сути, равно времени через которое ему перезвонят, если он решил воспользоваться коллбэком. Перед тем как его отключить можно ему сообщить. Будет что-то в духе:
Данные ewt и minutesWord можно взять из обработчика ACDEvents.Waiting
// Обработчик нажатий на кнопки
function handleToneReceived(e) {
if (e.tone == "#") {
callback = true;
originalCall.removeEventListener(CallEvents.PlaybackFinished, handlePlaybackFinished);
originalCall.say("Оператор перезвонит Вам менее чем через " + (ewt + 1) + minutesWord, Language.RU_RUSSIAN_FEMALE);
originalCall.addEventListener(CallEvents.PlaybackFinished, function(callevent) {
originalCall.hangup(); // <-- несмотря на отсутствие звонков сессия не завершится
});
}
}
Данные ewt и minutesWord можно взять из обработчика ACDEvents.Waiting
А выбор есть у клиента, ждать ответа или ждать обратного звонка? Или Вы это решаете за него?
Если внимательно посмотреть на код, то можно увидеть ответ на ваш вопрос:
"Вы находитесь в очереди под номером " + acdevent.position +
". Оператор ответит Вам менее чем через " + (acdevent.ewt + 1) + minutesWord +
" Вы также можете нажать решетку и мы сами перезвоним вам как только оператор будет готов обслужить ваш вызов."
// Делаем коллбэкОпечатка с callUser/callPSTN?
originalCall = VoxEngine.callUser(callerid);
Непонятно, почему сессия не завершается — как сценарий определяет (по подключению модуля ACD / наличию переменной callback)? И как её тогда завершить, если функционал callback'a не нужен, а модуль очередей нужен?
Как долго висит выполнение сценария, если все операторы заняты — часы, дни, бесконечно? Как удалить callback-звонок из очереди?
Да, совершенно верно, опечатка :) Спасибо, что заметили, сейчас поправим. Сессия не будет завершаться, если был использован модуль ACD и добавление в очередь, в таком состоянии сессия будет жить 2 часа, после чего самоуничтожится, так как мы исходим из того, что очередь все-таки быстрее обрабатывается. Callback-звонок из очереди можно удалить, получив media_session_access_url и сделав по нему запрос, в обработчике которого вызвать функцию cleanup
Еще вопрос:
Вообще, очень хочется, чтобы функция callback'a была включаема по-желанию, а не по-умолчанию. Чтобы очередь не засорялась звонящими, которые положили трубку и не захотели callback'a. Ведь сейчас, как я понял, даже если они не выбрали callback, они всё равно попадают в очередь и висят там два часа, что влияет на количество абонентов и время ожидания, которое сообщается новым звонящим.
// Отправляем звонок операторуЕсли callback=false (звонивший не нажимал решетку), то что происходит таком случае в else? Входящего звонка же уже нет (звонивший положил трубку), то есть соединять не с кем — просто корректно завершается сессия?
request.addEventListener(ACDEvents.OperatorReached, function (acdevent) {
if (callback)
Вообще, очень хочется, чтобы функция callback'a была включаема по-желанию, а не по-умолчанию. Чтобы очередь не засорялась звонящими, которые положили трубку и не захотели callback'a. Ведь сейчас, как я понял, даже если они не выбрали callback, они всё равно попадают в очередь и висят там два часа, что влияет на количество абонентов и время ожидания, которое сообщается новым звонящим.
Если callback = false, то человек будет дальше висеть и слушать музыку и обновления на тему сколько ему еще ждать осталось. Этот пример как раз про включение по желанию при нажатии клиентом #, если он не хочет чтобы ему перезвонили, то пусть слушает дальше музыку пока ему не ответят, а если он сам положит трубку, то сессию надо просто убить VoxEngine.terminate и все.
По коду в примере, при нажатие звонящим решетки срабатывает hangup, который вызывает disconnect и выполнение cleanup, в котором выполняется VoxEngine.terminate. Если же звонящий просто кладет трубку, то выполняется тот же самый disconnect->cleanup->terminate. Почему же в одном случае сессия не убивается, а в другом убивается? Или hangup не вызывает событие disconnect?
По поводу callback=false, в том куске который я привел для примера, при выполнение else будет выполнен
По поводу callback=false, в том куске который я привел для примера, при выполнение else будет выполнен
VoxEngine.sendMediaBetween(acdevent.operatorCall, originalCall);но originalCall уже не существует, так как абонент повесил трубку, но в очереди еще висит, и сценарий висит, поэтому я и спрашиваю что получится — корректно ли завершится всё?
Sign up to leave a comment.
Делаем очередь входящих звонков с функцией callback