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

Передача параметров в чат-виджет

При размещении бота в чат-виджете сайт, на котором он размещен, может передавать в виджет различные параметры. Бот может получить к ним доступ и таким образом «знать», что происходит на сайте.

Передавать параметры можно двумя способами:

При запуске чат-виджета

подсказка
Передавать данные в бота при запуске чат-виджета может быть полезно, например, чтобы бот заранее знал идентификатор клиента на сайте, его имя или другие персональные данные.

Настройка скрипта

Для передачи данных с сайта пропишите в коде нужной страницы скрипт, где определяется глобальная переменная juswidgetVariables. В ней по ключу start должен храниться вложенный объект с нужными полями:

<script>
window.juswidgetVariables = {
start: {
id: 63,
name: "Виктор"
}
};
</script>
предупреждение
Скрипт должен быть размещен перед скриптом, где загружается сам виджет.

Написание сценария

При запуске чат-виджета боту отправляется системное сообщение /start. Однако если определено поле juswidgetVariables.start, после /start через пробел отправляется объект с переданными данными, сериализованными как JSON. Напишем стейт-заглушку для обработки начала диалога в сценарии:

state: Start
q!: $regex</start> *
a: Вы сказали: {{$parseTree.text}}

Теперь при запуске бота на странице со скриптом выше он выведет следующее сообщение:

Параметры, переданные с сайта

Таким образом, объект, который получает бот, можно обработать и извлечь необходимые данные.

state: Start
q!: $regex</start> [$regex<\{.*\}>]
script:
if ($parseTree.text.length > "/start".length) {
$session.startData = JSON.parse($parseTree.text.substr("/start".length + 1));
}
if: $session.startData
a: Здравствуйте, {{$session.startData.name}}!
else:
a: Здравствуйте!

Для данного сценария проходит следующий XML-тест:

<test>
<test-case>
<q>/start {"id":55,"name":"Виктор"}</q>
<a>Здравствуйте, Виктор!</a>
</test-case>

<test-case>
<q>/start</q>
<a>Здравствуйте!</a>
</test-case>
</test>

При сообщении от клиента

подсказка
Чат-виджет также может динамически получать данные со страницы и передавать их боту с каждым сообщением клиента. Например, это может быть адрес текущей страницы сайта.

Чтобы передавать параметры в бота с каждым входящим сообщением, вы можете задать функцию JustWidgetSendRawData, которая возвращает объект с нужными данными, либо сам этот объект как JustWidgetRawParams:

<script>
window.JustWidgetSendRawData = function() {
return {
currentUrl: window.location.href
};
};

// Данный код работает аналогично коду выше
window.JustWidgetRawParams = {
currentUrl: window.location.href
};
</script>
предупреждение
При встраивании чат-виджета в iframe вместо window используйте собственное окно iframe:
<script>
document.getElementsByTagName("iframe")[0].contentWindow.JustWidgetRawParams = {
currentUrl: window.location.href
};
</script>
подсказка
В сценарии данные будут доступны в поле $request.data.JustWidgetRawParams.