$request
Объект, в котором хранятся данные о запросе пользователя.
Формат объекта
Объект содержит следующие поля.
| Поле | Тип | Описание |
|---|---|---|
accountId | Строка | Идентификатор аккаунта. |
botId, channelBotId | Строка | Идентификатор бота. |
channelType | Строка | Тип канала. |
channelUserId | Строка | Идентификатор пользователя, уникальный для канала. |
data | Объект | Различные данные о запросе. |
data.chatId | Строка | Идентификатор сессии. |
data.isTestChannel | Логический | true, если запрос отправлен из тестового виджета. |
data.JustWidgetRawParams | Объект | Параметры, переданные в чат-виджет. |
data.livechatStatus | Объект | Статус перевода на оператора. |
data.requestHeaders | Объект | HTTP-заголовки запроса, отправленного в канал. предупреждение |
event | Строка | Событие, которое произошло в сценарии. Исключает поле query. |
query | Строка | Текст запроса. Исключает поле event. |
questionId | Строка | Идентификатор запроса. |
rawRequest | Объект | Дамп запроса в исходном виде, в котором он пришел в канал. |
requestType | Строка | Тип запроса. |
userFrom | Объект | Данные о пользователе: id, firstName, lastName. |
version | Число | Версия протокола. По умолчанию 1. |
Примеры использования
$request.query
Поле query позволяет использовать в сценарии текст запроса и отправить его самому пользователю или куда-либо еще (например, в систему сбора аналитики):
state: NoMatch
event!: noMatch
a: Я не понял. Вы сказали: «{{$request.query}}».
$request.channelType
Поле channelType используется для ветвления сценария в зависимости от канала:
state: SwitchToAgent
intent!: /Перевод на оператора
# В этом сценарии перевод на оператора работает только в телефонном канале.
if: $request.channelType === "resterisk"
a: Подождите немного. Соединяю вас со специалистом.
TransferCallToOperator:
phoneNumber = 79123456789
else:
a: К сожалению, мы не можем соединить вас с оператором. Мы обязательно свяжемся с вами позже.
script:
$dialer.hangUp();
Список всех возможных значений channelType
| Канал | channelType |
|---|---|
| Aimybox | zenbox |
| Chat API | chatapi |
| Chat2Desk | chat2desk |
| edna.chatCenter | threads |
| Jivo | incoming_jivosite |
| LiveTex | inbound_livetex |
| Microsoft Teams | azure |
| Slack | slack |
| Telegram | telegram |
| Viber | viber |
| Vonage | nexmo |
| Wazzup | wazzup |
| Webim (Custom Channel API) | incoming_webim |
| Webim (External Bot API 2.0) | incoming_webim2 |
wechat | |
whatsapp | |
| WhatsApp (через edna WhatsApp 2.0) | edna_platform |
| WhatsApp (через i-Digital) | i_digital |
| ZenDesk | zendesk |
| Zendesk Chat | zopim |
| Алиса | yandex |
| Битр икс24 | bitrix |
| ВКонтакте | vk |
| Маруся | marusia |
| Одноклассники | odnoklassniki |
| Сбер Салют | sber |
| Телефония | resterisk |
| Чат-виджет | chatwidget |
$request.botId, $request.channelUserId
Используйте botId и channelUserId, когда в сценарии требуется присвоить боту или пользователю уникальный идентификатор.
Например, их можно передать в метод $pushgate.createPushback:
state: Subscribe
intent!: /Подписаться
script:
// Создание пушбэка.
var pushback = $pushgate.createPushback(
$request.channelType,
$request.botId,
$request.channelUserId,
"newNotification",
{}
);
// Отправка ссылки на Pushgate API в сторонний сервис.
$http.post("https://example.com/subscribe", {
headers: {
"Content-Type": "application/json"
},
body: {
"link": pushback.link
}
});
a: Ура, вы подписаны! Теперь вы будете первым узнавать о наших акциях и предложениях.
$request.rawRequest
Поле rawRequest позволяет извлечь из запроса данные, которые предоставляет JAICP сам канал.
Например, когда пользователь Telegram отправляет боту свой контакт, в сценарий приходит событие telegramSendContact.
В стейте-обработчике этого события можно получить номер телефона пользователя:
state: GetPhoneNumber
event: telegramSendContact
script:
$client.phoneNumber = $request.rawRequest.message.contact.phone_number;
a: Спасибо! Наш менеджер свяжется с вами по номеру {{$client.phoneNumber}}.