Перейти к основному содержимому

switch

Тип ответа switch позволяет перевести звонок или диалог в текстовом чате на оператора.

подсказка
Вы также можете переводить диалоги и звонки на оператора с помощью тегов действий TransferToOperator и TransferCallToOperator.

Свойства

В текстовых каналах

Для текстовых каналов все свойства необязательны.

СвойствоТипОписание
firstMessageСтрокаТекст сообщения, которое будет отправлено оператору после перевода диалога на него.
Значение по умолчанию — последняя фраза пользователя.
lastMessageСтрокаТекст сообщения, которое будет отправлено пользователю при завершении диалога с оператором с помощью команды, указанной в свойстве closeChatPhrases.
closeChatPhrasesМассивСписок команд, с помощью которых пользователь может закрыть чат с оператором и вернуться к боту.
При отправке команды чат закрывается. Команда обрабатывается в сценарии бота в контексте стейта, из которого произошел перевод на оператора.
appendCloseChatButtonЛогическийС помощью этой кнопки пользователь может прекратить общение с оператором и вернуться к диалогу с ботом.
Текст кнопки берется из первого элемента массива closeChatPhrases.
Если указано true, но массив closeChatPhrases пуст, кнопка не выводится.
destinationСтрокаИдентификатор группы операторов, на которую нужно перевести диалог.
Свойство используется только для Aimychat и Operator API.
themeСтрокаТема обращения. Используется для подсчета статистики обращений пользователей в Aimychat.
sendMessagesToOperatorЛогическийПередавать ли оператору историю сообщений пользователя.
Значение по умолчанию — false.
sendMessageHistoryAmountЧислоКоличество последних сообщений пользователя, которые будут переданы оператору.
Указывайте это свойство, только если для sendMessagesToOperator вы передали значение true.
attributesОбъектИнформация о пользователе, которую необходимо передать оператору. Укажите значение в формате:
attributes: 
  {
    «Ключ 1»: «Значение 1»,
    «Ключ 2»: «Значение 2»
  }
• Ключ — название поля, которое ожидает операторский чат.
• Значение — информация, которую нужно передать оператору при переводе.
Свойство используется только для операторских каналов LiveTex и Operator API.
hiddenAttributesОбъектИнформация о пользователе, которую не нужно передавать оператору. Формат значения аналогичен свойству attributes.
Свойство используется только для операторских каналов LiveTex и Operator API.
ignoreOfflineЛогическийСвойство определяет дальнейшие действия, если в момент перевода диалога нет свободных операторов:
true — выполнить принудительный перевод и ожидать свободных операторов.
false — не выполнять перевод.
Значение по умолчанию — false.
oneTimeMessageЛогическийЕсли указано true, то диалог не будет переведен на оператора. Вместо этого ему будет отправлено сообщение с текстом из свойства firstMessage, из которого он может получить информацию о пользователе.
Значение по умолчанию — false.

В телефонном канале

Для телефонного канала обязательно указать свойство phoneNumber или sipUri.

СвойствоТипОписание
phoneNumberСтрокаНомер телефона, на который будет переведен звонок.
Перевод на добавочный номер не поддерживается.
sipUriСтрокаНомер SIP-телефона, на который нужно перевести звонок.
Если вы передаете sipUri, то передавать phoneNumber не нужно.
timeoutСтрокаВремя ожидания ответа от оператора в секундах. Если звонок не был переведен на оператора после истечения timeout, то бот перейдет в ближайший стейт, в котором отслеживается событие transfer.
Значение по умолчанию — 60 секунд.
methodСтрокаСпособ маршрутизации вызова:
invite — перевод вызова с сохранением соединения. Это значение по умолчанию.
refer — перевод вызова без сохранения соединения. Если вы используете refer, то свойства headers, transferChannel, continueCall и continueRecording будут проигнорированы.
headersОбъектSIP-заголовки, которые будут передаваться в сообщении SIP INVITE на указанный номер.
Данная возможность, как правило, используется для передачи АОН-информации об абоненте.
transferChannelСтрокаbotId для маршрутизации вызова через SIP-транк, который подключен к данному каналу. При этом будут применены параметры подключенного SIP-транка.
continueCallЛогическийЕсли true, абонент будет возвращен к диалогу с ботом после разговора с оператором.
Если false, звонок будет завершен.
Если оператор недоступен, перевод на него не произойдет.
Значение по умолчанию — false.
continueRecordingЛогическийЕсли true, разговор продолжает записываться во время диалога с оператором и после возвращения абонента в диалог с ботом. Запись звонка будет доступна в логах диалогов.
Значение по умолчанию — false.
подсказка
При переводе звонка на оператора вы можете:
• Отслеживать статус перевода абонента.
• Прописать в сценарии, что делать, если оператор недоступен.
• Настроить отображение номера абонента.

Синтаксис

В текстовых каналах

state: TransferToAgent
intent!: /TransferToAgent
random:
a: Перевожу наш разговор на оператора.
a: Соединяю вас с оператором.
script:
$response.replies = $response.replies || [];
$response.replies.push({
"type": "switch", // Тип ответа бота.
"firstMessage": $jsapi.chatHistory(), // Оператор получит историю переписки пользователя с ботом.
"closeChatPhrases": ["/closeChat", "Закрыть диалог"] // Команды, с помощью которых пользователь сможет закрыть чат с оператором.
});

В телефонном канале

state: TransferToAgent
intent!: /TransferToAgent
random:
a: Перевожу вас на оператора. Пожалуйста, оставайтесь на линии.
a: Соединяю вас с оператором. Ожидайте, пожалуйста, на линии.
script:
$response.replies = $response.replies || [];
$response.replies.push({
type: "switch", // Тип ответа бота.
phoneNumber: "79123456789", // Номер телефона, на который будет переведен звонок.
// Вместо телефона можно передать SIP URI — номер SIP-телефона:
// sipUri: "79123456789@sip.voximplant.com",
timeout: "30", // Время ожидания ответа от оператора.
headers: { // SIP-заголовки.
"callReason": "support",
"crmClientId": $client.id || "none"
},
transferChannel: "237-test-237-VDQ-28334674", // botId канала. Вызов будет переведен через SIP-транк, который подключен к каналу.
continueCall: true, // Возвращаем абонента к диалогу с ботом после разговора с оператором.
continueRecording: true // Продолжаем запись разговора.
});

Ограничения на каналы

switch не поддерживается в следующих каналах:

  • В голосовых ассистентах:
    • Алиса
    • Маруся
    • Сбер Салют
    • Google Ассистент
  • Aimybox
  • Zendesk
  • Zendesk Chat (перевод на оператора можно реализовать другим способом)

Использование в сценарии

В текстовых каналах

theme: /
state: SwitchSuggestion
random:
a: Соединить вас со специалистом?
a: Хотите, чтобы я перевёл чат на оператора?
buttons:
"Да" -> /Switch
"Нет" -> /AnythingElse
intent: /Agree || toState = /Switch
intent: /Disagree || toState = /AnythingElse

state: Switch
intent!: /TransferToAgent
random:
a: Перевожу наш разговор на оператора.
a: Соединяю вас с оператором.
script:
$response.replies = $response.replies || [];
$response.replies.push({
type: "switch",
firstMessage: $jsapi.chatHistory(), // Оператор получит историю переписки пользователя с ботом.
destination: $injector.operatorGroup, // Группа операторов, на которую будет переведен диалог.
lastMessage: "Ждем вас снова!"
});

state: BackToBot
event: livechatFinished
a: Чат с оператором завершен. На связи снова бот-помощник.
go!: /AnythingElse

state: AnythingElse
a: Могу ли я еще чем-нибудь вам помочь?

В телефонном канале

require: functions.js

theme: /
state: TransferToAgent
intent!: /TransferToAgent
if: isOff() // Вызываем функцию, которая проверяет, звонит абонент в рабочие часы или нет.
go!: /TransferToAgent/WorkingHours
else:
go!: /TransferToAgent/NotWorkingHours

state: WorkingHours
random:
a: Перевожу вас на оператора. Пожалуйста, оставайтесь на линии.
a: Соединяю вас с оператором. Ожидайте, пожалуйста, на линии.
script:
$response.replies = $response.replies || [];
$response.replies.push({
type: "switch",
phoneNumber: "79123456789",
transferChannel: "237-test-237-VDQ-28334674",
continueCall: true,
continueRecording: true
});

state: TransferError
event: transfer
if: $dialer.getTransferStatus().status === "FAIL"
a: Прошу прощения! По техническим причинам перевести звонок на специалиста не удалось. Пожалуйста, перезвоните позже.
go!: /AnythingElse

state: NotWorkingHours
random:
a: К сожалению, сейчас перевод на оператора невозможен.
a: Простите, сейчас я не могу соединить вас со специалистом.
a: Пожалуйста, перезвоните в рабочее время, с девяти до восемнадцати ноль ноль по будням.
go!: /AnythingElse

state: AnythingElse
a: Могу ли я еще чем-нибудь вам помочь?

state: Goodbye
intent!: /Bye
random:
a: Спасибо за ваш звонок. Всего доброго!
a: Благодарю за звонок. Всего доброго и хорошего дня!
go!: /HangUp

state: HangUp
event!: hangUp
script:
$dialer.hangUp("(Бот повесил трубку)");
$jsapi.stopSession();