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

Как получать данные о клиентах с помощью $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 возвращает данные в таком формате:

{
"type": "message_new",
"object": {
"id": 30,
"date": 1560772728,
"out": 0,
"user_id": 123456789,
"read_state": 0,
"title": "",
"body": "/start",
"owner_ids": [
]
},
"group_id": 183098298,
"user_info": {
"first_name": "John",
"last_name": "Doe",
"id": "185902215"
}
}

При помощи $rawRequest вы можете получить следующие данные из ВКонтакте:

  • Имя клиента: $rawRequest.user_info.first_name.
  • Фамилию клиента: $rawRequest.user_info.last_name.
  • ID клиента: $rawRequest.user_info.id.

В сценарии вы можете сгенерировать ссылку на профиль клиента в ВКонтакте через блок Текст следующим образом: https://vk.com/id$rawRequest.user_info.id.

Кроме того, вы можете разрешить доступ к боту только определенному списку аккаунтов с помощью такого условия для каждого аккаунта:

Здесь 123456 — ID клиента на стороне ВКонтакте.

От условия сделайте переход к блоку с приветствием. От варианта else создайте экран с текстом Доступ запрещен.

Аналогичным образом вы можете запретить доступ к боту определенным аккаунтам: укажите аккаунты в блоке Условия, соедините эти условия с экраном Доступ запрещен, а вариант else соедините с приветственным экраном.

Подключение ВКонтакте через Битрикс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"
}
предупреждение
Тестировать запрос необходимо в Telegram. При тестировании в тестовом виджете или другом канале бот вернет ошибку.