Как получать данные о клиентах с помощью $rawRequest


В Aimylogic есть переменная $rawRequest, с помощью которой можно получать данные о клиентах из каналов. Вы можете использовать содержимое переменной $rawRequest для того, чтобы:

  • обращаться к клиентам по имени;
  • ограничить доступ к боту для определенного списка клиентов;
  • собирать и передавать данные клиентов.

Как определить тип канала

Содержимое и формат переменной $rawRequest зависят от канала, из которого поступил запрос к боту.

Если ваш бот подключен к нескольким каналам, перед использованием $rawRequest вам необходимо определить тип канала. Он хранится в переменной $channelType.

Вы можете определить тип канала при помощи блока Условия, прописав в нем выражения для каждого канала.

Например, если вы опубликовали бота в каналах Telegram и ВКонтакте в блоке Условия должны присутствовать следующие выражения:

  • $channelType === "telegram"
  • $channelType === "vk"

raw request 1

Подробнее о том, как определять другие типы каналов

Как протестировать сценарий

Не тестируйте сценарий с переменной $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"
            }
        ]
    }
}

Вы можете обращаться к клиенту по имени, используя блок Текст:

raw request 4

Также вы можете использовать другие элементы массива, полученного из $rawRequest:

  • Имя пользователя в Telegram: $rawRequest.message.from.username.
  • Язык общения клиента: $rawRequest.message.from.language_code.
  • ID чата: $rawRequest.message.from.id.

Чтобы получить имя пользователя после нажатия инлайн-кнопки, добавьте блок Условия и сохраните значение в новую переменную $username через выражение $username = $rawRequest.callback_query.from.username.

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

Подробнее об ограничении доступа в 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.

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

raw request 5

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

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

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

Подключение ВКонтакте через Битрикс24

Если вы подключили ВКонтакте не напрямую к Aimylogic, а через Битрикс24, то вы можете получить:

  • Имя и фамилию клиента через $rawRequest.data.user.name.
  • Только имя клиента через $rawRequest.data.user.firstName.

WhatsApp

Для WhatsApp формат возвращаемых данных зависит от способа подключения канала.

Подключение через i-Digital

Пример содержимого $rawRequest при подключении WhatsApp через 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 через 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": "79105555555",
    "extension": "79105555555",
    "channel": "SIP/0-0000001f",
    "originateData": {
        "callTaskId": 12754,
        "callId": 12757,
        "botToken": "TufcgsZw:d82fe12af68ff365455d1365e33fc7f3487699c1",
        "payload": {
            "name": "Саша",
            "phone": "79105555555"
            // Дополнительные данные
        }
    }
}

Здесь вы можете получить номер, имя и прочие данные клиента.

Дополнительные действия

Вы можете отправлять данные из $rawRequest себе сообщением в Telegram, письмом с помощью IFTTT или в ячейку Google Таблицы.

Так может выглядеть HTTP-запрос для отправки имени клиента вам в Telegram:

{
    "chat_id": 123456780,
    "text": "Имя клиента: $rawRequest.message.from.first_name"
}

Тестировать запрос необходимо в Telegram. При тестировании в тестовом виджете или другом канале бот вернет ошибку.

raw request 6

Подробнее о том, как отправлять сообщения в Telegram