$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}}.