Как получать данные о клиентах с помощью $rawRequest
В Aimylogic есть переменная $rawRequest
, с помощью которой можно получать данные о клиентах из каналов.
Вы можете использовать содержимое переменной $rawRequest
для того, чтобы:
- обращаться к клиентам по имени;
- ограничить доступ к боту для определенного списка клиентов;
- собирать и передавать данные клиентов.
Как определить тип канала
Содержимое и формат переменной $rawRequest
зависят от канала, из которого поступил запрос к боту.
Если ваш бот подключен к нескольким каналам, перед использованием $rawRequest
вам необходимо определить тип канала. Он хранится в переменной $channelType
.
Вы можете определить тип канала при помощи блока Условия, прописав в нем выражения для каждого канала.
Например, если вы опубликовали бота в каналах Telegram и VK в блоке Условия должны присутствовать следующие выражения:
$channelType === "telegram"
$channelType === "vk"
Как протестировать сценарий
$rawRequest
в тестовом виджете.Если вы добавите переменную $rawRequest
в сценарий, а затем нажмете Тестировать, то в окне тестового виджета появится сообщение об ошибке.
Такое поведение возникает из-за того, что бот не может получить данные, так как вы тестируете бота не в канале.
Чтобы протестировать сценарий, подключите нужный канал и поговорите с ботом в этом канале.
Если вы хотите протестировать сценарий именно в тестовом виджете, сначала настройте сценарий, протестируйте его и только после этого добавьте переменную $rawRequest
.
Telegram
Переменная $rawRequest
в Telegram возвращает данные в следующем формате:
{
"update_id": 123456789,
"message": {
"message_id": 67,
"from": {
"id": 123456789,
"is_bot": false,
"first_name": "John",
"username": "johndoe",
"language_code": "en"
},
"chat": {
"id": 123456789,
"first_name": "Doe",
"username": "johndoe",
"type": "private"
},
"date": 1560773004,
"text": "/start",
"entities": [
{
"offset": 0,
"length": 6,
"type": "bot_command"
}
]
}
}
Если в сценарии используются инлайн-кнопки, то формат данных в переменной $rawRequest
будет следующий:
{
"update_id": 123456789,
"callback_query": {
"message_id": 67,
"from": {
"id": 123456789,
"is_bot": false,
"first_name": "John",
"username": "johndoe",
"language_code": "en"
},
"chat": {
"id": 123456789,
"first_name": "Doe",
"username": "johndoe",
"type": "private"
},
"date": 1560773004,
"text": "/start",
"entities": [
{
"offset": 0,
"length": 6,
"type": "bot_command"
}
]
}
}
Вы можете обращаться к клиенту по имени, используя блок Текст:
Также вы можете использовать другие элементы массива, полученного из $rawRequest
:
- Имя пользователя в Telegram:
$rawRequest.message.from.username
. - Язык общения клиента:
$rawRequest.message.from.language_code
. - ID чата:
$rawRequest.message.from.id
.
$username
через выражение $username = $rawRequest.callback_query.from.username
.Вы можете использовать имена пользователей Telegram, чтобы ограничить им доступ к боту.
ВКонтакте
В ВКонтакте переменная $rawRequest
возвращает данные в таком формате:
{
"group_id": 217351294,
"type": "message_new",
"event_id": "8c35d766090285a4e0ac89109b831200547c60e0",
"v": "5.103",
"object": {
"message": {
"entity_version": 0,
"date": 1700464462,
"from_id": 1259764,
"id": 191,
"out": 0,
"attachments": [],
"conversation_message_id": 177,
"fwd_messages": [],
"important": false,
"is_hidden": false,
"peer_id": 1259764,
"random_id": 0,
"text": "89000"
},
"client_info": {
"button_actions": [
"text",
"vkpay",
"open_app",
"location",
"open_link",
"callback",
"intent_subscribe",
"intent_unsubscribe"
],
"keyboard": true,
"inline_keyboard": true,
"carousel": true,
"lang_id": 0
}
}
}
Вы можете получить ID клиента при помощи переменной $rawRequest.object.message.from_id
.
В сценарии вы можете сгенерировать ссылку на профиль клиента в ВКонтакте через блок Текст следующим образом: https://vk.com/id$rawRequest.object.message.from_id
.
Кроме того, вы можете разрешить доступ к боту только определенному списку аккаунтов с помощью такого условия для каждого аккаунта:
Здесь 123456
— ID клиента на стороне ВКонтакте.
От условия сделайте переход к блоку с приветствием. От варианта else создайте экран с текстом Доступ запрещен
.
Аналогичным образом вы можете запретить доступ к боту определенным аккаунтам: укажите аккаунты в блоке Условия, соедините эти условия с экраном Доступ запрещен
, а вариант else соедините с приветственным экраном.
Переменная $rawRequest
является частью $request
. Имя и фамилию клиента можно получить через $request.userFrom.firstName
и $request.userFrom.lastName
.
Подключение ВКонтакте через Битрикс24
Если вы подключили ВКонтакте не напрямую к Aimylogic, а через Битрикс24, то вы можете получить:
- Имя и фамилию клиента через
$rawRequest.data.user.name
. - Только имя клиента через
$rawRequest.data.user.firstName
.
WhatsApp Business
Для WhatsApp Business формат возвращаемых данных зависит от способа подключения канала.
Подключение через i‑Digital
Пример содержимого $rawRequest
при подключении WhatsApp Business через i‑Digital:
{
"auth": {
"nodeId": "12345",
"password": "qwert12345"
},
"@type": "inbound",
"msid": "42919aa1-6250-6381-7078-aa0000063649",
"creationDate": 1625063817078,
"requestDelivery": false,
"addresses": {
"source": "79991234567",
"destination": "DD_WA"
},
"body": {
"bodyType": "whatsapp",
"content": "/start"
},
"properties": {
"providerId": "7475426",
"inbox": "DD_WA"
},
"startProcessingTime": 45377324963567248
}
Подключение через Jivo
Пример содержимого $rawRequest
при подключении WhatsApp Business через Jivo:
{
"message": {
"type": "TEXT",
"text": "3",
"timestamp": 1625066281
},
"id": "5bc20dc0-d9b6-11eb-8669-55a946893a0a",
"event": "CLIENT_MESSAGE",
"sender": {
"id": "61915",
"name": "....",
"url": "whatsapp"
},
"startProcessingTime": 45379789068549685,
"client_id": "61915",
"chat_id": "87529"
}
Jivo
В канале Jivo $rawRequest
возвращает данные в следующем формате:
{
"message": {
"type": "TEXT",
"text": "Привет",
"timestamp": 1616147069
},
"id": "b3418c9e-8897-11eb-8931-79179b127c32",
"event": "CLIENT_MESSAGE",
"sender": {
"id": "300",
"name": "John",
"url": "https://app.example.com/"
},
"startProcessingTime": 36460577079987682,
"client_id": "300",
"chat_id": "481"
}
Здесь вы можете получить имя клиента через $rawRequest.sender.name
.
Алиса
В голосовом помощнике Яндекс Алиса $rawRequest
возвращает данные в следующем формате:
{
"meta": {
"locale": "ru-RU",
"timezone": "UTC",
"client_id": "ru.yandex.searchplugin/7.16 (none none; android 4.4.2)",
"interfaces": {
"screen": {},
"payments": {},
"account_linking": {}
}
},
"session": {
"message_id": 0,
"session_id": "23c0b51a-8a66-4bfd-b21f-ec825e8599ee",
"skill_id": "5f93817f-2a48-4de1-b509-72b0e041b35c",
"user": {
"user_id": "E112A36A50441869F6CEC8G1CC240607D3061A6C21030D22ACD9D9424605B592"
},
"application": {
"application_id": "20C726B0F7E65E595BF89F3CF7870C0FF930D889237E8B916C63137DC4BE1125"
},
"new": true,
"user_id": "20C726B0F7E65C595AM89F3CF7870C0FF930D889217E8B916C63137DC4BE1125"
},
"request": {
"command": "",
"original_utterance": "",
"nlu": {
"tokens": [],
"entities": [],
"intents": {}
},
"markup": {
"dangerous_context": false
},
"type": "SimpleUtterance"
},
"version": "1.0"
}
Телефония
В телефонном канале переменная $rawRequest
возвращает данные в следующем формате:
{
"event": "accepted",
"trunkId": 0,
"accountId": 247854563,
"caller": "79123456789",
"extension": "79123456789",
"channel": "SIP/0-0000001f",
"originateData": {
"callTaskId": 12754,
"callId": 12757,
"botToken": "TufcgsZw:d82fe12af68ff365455d1365e33fc7f3487699c1",
"payload": {
"name": "Саша",
"phone": "79123456789"
// Дополнительные данные
}
}
}
Здесь вы можете получить номер, имя и прочие данные клиента.
Дополнительные действия
Вы можете отправлять данные из $rawRequest
себе сообщением в Telegram, письмом с помощью IFTTT или в ячейку Google Таблицы.
Так может выглядеть HTTP-запрос для отправки имени клиента вам в Telegram:
{
"chat_id": 123456780,
"text": "Имя клиента: $rawRequest.message.from.first_name"
}