Нативный запрос

Работает в Telegram и ВК.

Компонент Нативный запрос работает также как Запрос API, но настраиваются эти компоненты по-разному.

При использовании GET запроса в Нативном запросе в поле для тела запроса нужно обязательно вписать пустой объект {}.

При использовании POST запроса в Нативном запросе пользователю нужно выбрать Платформу, Метод и заполнить Тело запроса. Если в Теле запроса пропустить параметр chat_id для Телеграма и user_id для VK, то Нативный запрос добавит их автоматически. По умолчанию эти параметры будут содержать {{this_user.platform_id}}. Это значит, что запрос где не прописаны данные параметры сработает у пользователя, который будет находиться на экране с запросом.

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

{
"sticker": "12345"
}

Если в chat_id или user_id нужно прописать значение отличающиеся от {{this_user.platform_id}}, используйте стандартное тело запроса со всеми прописанными параметрами.

Остальные настройки добавятся по умолчанию, в компоненте их видно не будет.

При необходимости можно указать Имя переменной для тела ответа, чтобы данные от сервера сохранялись в заданную вами переменную вместо использования стандартной переменной last_native_request.

Когда в компоненте выбран Метод запроса, в настройках появляется активная ссылка ведущая на документацию API выбранного метода.

Форматирование текста в Нативном запросе

Нативный запрос поддерживает форматирование. Для того, чтобы отправить форматированный текст через Нативный запрос, в Тело запроса добавьте тег или теги для форматирования. Теги должны быть такими же, как при форматировании обычного текста.

Параметры для Тела запроса:

  • chat_id — уникальный идентификатор пользователя в боте. Его мы получаем как основную переменную {{this_user.platform_id}}, также можно указать другое значение. Без этого параметра в теле запроса текст придет отформатированным пользователю, который попал на компонент Нативный запрос в боте.
  • text — текст, который придет пользователю.
  • parse_mode — параметр для того, чтобы текст пользователю пришел в отформатированном виде. В нашем случае должен иметь значение HTML.
  • disable_web_page_preview — отключает предпросмотр ссылок. Если убрать этот параметр, то текст, если в нем есть ссылка, придет с предпросмотром.

При необходимости переносить строки, используйте символ \n, как в этом примере Тела запроса:

{
    "chat_id": "{{this_user.platform_id}}",
    "text": "<b>Это предложение должно быть выделено жирным шрифтом</b>\n<i>Это предложение должно быть выделено курсивом</i>",
         "parse_mode": "HTML",
    "disable_web_page_preview": true
}

Тут собраны все теги для форматирования текста:

Отправленные через Нативный запрос сообщения как в этих примерах, придут в бот, как текст с форматированием, отправленный через компонент Сообщение.

Телеграм предоставляет большое количество методов, с помощью которых можно взаимодействовать с пользователями бота. Многие из них уже реализованы в конструкторе в виде компонентов, но делать какие-то специфичные вещи можно и с помощью запросов к API.

Как отправить несколько изображений в одном сообщении (Telegram)

Отправим одним сообщением три изображения с помощью Нативного запроса. Метод: sendMediaGroup.

Таким методом можно отправить от 2 до 10 изображений в одном сообщении.

Этим методом можно отправить несколько файлов одного вида: изображений, документов, видео или аудио.

В боте отправленные изображения будут выглядеть так:

Обязательные параметры для Тела запроса:

  • chat_id — уникальный идентификатор пользователя в боте. Его мы получаем как основную переменную {{this_user.platform_id}}, также можно указать другое значение. Без этого параметра в теле запроса изображения отправятся пользователю, который попал на компонент Нативный запрос в боте.
  • media — ссылки на изображения, например, с гугл-диска. Попробуйте поменять ссылки из примера на свои — в бот придут изображения по ссылкам, которые вы укажите.

Напишем Тело запроса с этими параметрами:

{
"chat_id": "{{this_user.platform_id}}",
"media":[{
"type": "photo",
"media": "https://disk.yandex.ru/i/jC2Rq-TeuiXrGQ"},
{"type": "photo",
"media": "https://disk.yandex.ru/i/x6QRrK7lgdGgCA"},
{"type": "photo",
"media": "https://disk.yandex.ru/i/3KSERQbfbtBHoA"}]
}

Для изображений скрытых под спойлер подойдет такое тело запроса:

{
  "chat_id": "{{this_user.platform_id}}",
  "media": [
    {
      "type": "photo",
      "media": "https://t.me/test_test987/20",
      "has_spoiler": true
    },
    {
      "type": "photo",
      "media": "https://t.me/test_test987/22",
      "has_spoiler": true
    },
    {
      "type": "photo",
      "media": "https://t.me/test_test987/23",
      "has_spoiler": true
    }
  ]
}

Добавим тело запроса в настройки компонента:

Не забудьте сохраниться.

Теперь при активации компонента бот пришлет сразу три изображения.

Из-за ограничений Telegram, изображения могут обрезаться по горизонтальному формату.

Удаление последнего сообщения от бота в Телеграм

По правилам Телеграма нельзя удалять сообщения, после отправки которых прошло более 48 часов

Удалим последнее сообщение от бота с помощью Нативного запроса.

1. В компоненте Нативный запрос выберем из выпадающего списка метод запроса deleteMessage.

2. Добавим Тело запроса для удаления последнего сообщения:

{
"chat_id": "{{this_user.platform_id}}",
"message_id": "{{lastMessageId}}"
}

или

{
"message_id": "{{lastMessageId}}"
}

Где:

  • chat_id — то, куда пересылаем сообщение, {{this_user.platform_id}} — ID пользователя, у которого сработает запрос, также можно указать другое значение. Без этого параметра в теле запроса сообщения удалятся у пользователя, который попал на компонент Нативный запрос в боте.
  • message_id — сообщение которое удалится.
  • {{lastMessageId}} — идентификатор последнего сообщения в боте.

Как удалять блок сообщений от бота (Telegram)

По правилам Телеграма нельзя удалять сообщения, после отправки которых прошло более 48 часов

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

{{lastMessageId}}

1. В компоненте Нативный запрос выберем из выпадающего списка метод запроса deleteMessages.

2. Добавим в Тело запроса переменные в которых находятся ID сообщений, которые нужно удалить. Названия переменных могут быть любыми, в примере мы назвали переменные delete1 и delete2.

{
"chat_id": "{{this_user.platform_id}}",
"message_ids": ["{{delete1}}", "{{delete2}}"]
}

Остальные параметры Тела запроса:

  • chat_id — откуда удаляем сообщения, {{this_user.platform_id}} — ID пользователя, у которого сработает запрос, также можно указать другое значение.
  • message_ids — ID удаляемых сообщений.

Как забанить и разбанить пользователя в группе Телеграм

Для того, чтобы бот мог банить и разбанивать пользователей в группе, добавьте бота в группу со всеми правами администратора.

Затем напишите в группе от имени бота. Для этого откройте настройки бота, перейдите в раздел Группы, отройте нужную группу и напишите в ней /start.

Для того, чтобы забанить пользователя:

1. В Нативном запросе выберите метод banChatMember.

2. Скопируйте в настройки компонента Тело запроса:

{
  "chat_id": "-1002123456789",
  "user_id": "{{this_user.platform_id}}",
  "revoke_messages": true
}

Где:

  • chat_id — ID группы, в которой нужно забанить пользователя. ID группы появится в разделе Пользователи, после того, как бот будет добавлен в группу в роли админа и в группе появится сообщение от имени бота. Поменяйте значение из примера -1002123456789 на ID вашей группы.
  • user_id — ID пользователя, у которого сработает запрос. Можно оставить без изменений {{this_user.platform_id}}, тогда запрос сработает у пользователя, который попал на компонент Нативный запрос в боте.

Для того, чтобы разбанить пользователя:

1. В Нативном запросе выберите метод unbanChatMember.

2. Скопируйте в настройки компонента Тело запроса:

{
  "chat_id": "-1002123456789",
  "user_id": "{{this_user.platform_id}}",
  "only_if_banned": true
}

Где:

  • chat_id — ID группы, в которой нужно разбанить пользователя. ID группы появится в разделе Пользователи, после того, как бот будет добавлен в группу в роли админа и в группе появится сообщение от имени бота. Поменяйте значение из примера -1002123456789 на ID вашей группы.
  • user_id — ID пользователя, у которого сработает запрос. Можно оставить без изменений {{this_user.platform_id}}, тогда запрос сработает у пользователя, который попал на компонент Нативный запрос в боте.

Пересылка сообщений из группы/канала

Перешлем сообщение в исходном виде из канала/группы с помощью метода forwardMessage в Нативном запросе.

Таким методом можно воспользоваться, если нужно прислать изображение и текст одним блоком.

В пересылаемом сообщении может быть только одно изображение. Если изображений будет больше — в бот придет только первое.

1. Добавим в группу/канал бота, откуда будет отправляться запрос, администратором со всеми правами.

2. Добавим тело запроса:

{
"chat_id": {{this_user.platform_id}},
"from_chat_id": "@имя_канала",
"message_id": "23"
}

Где:

  • chat_id — то, куда пересылаем сообщение, {{this_user.platform_id}} — ID пользователя, у которого сработает запрос, также можно указать другое значение. Без этого параметра в теле запроса, запрос сработает у пользователя, который попал на компонент Нативный запрос в боте.
  • from_chat_id — группа/канал откуда пересылаем сообщение.
  • Вместо @имя канала — должно быть имя или ID вашего канала/группы. Чтобы получить ID канала в Телеграм, нужно открыть канал в веб-версии. В конце адресной строки будет число — это и есть id канала. В начале этого числа допишите: -100. То есть, если в адресной строке веб-версии отобразилось web.telegram.org/a/#-2234567899, то в поле Telegram ID нужно вписать: -1002234567899.
  • message_id — ID сообщения, которое пересылаем. В нашем примере это — 23.

Узнать ID сообщения можно, нажав правой клавишей мыши по пересылаемому сообщению в канале/группе и выбрав Копировать ссылку на сообщение.

Получится ссылка вида https://t.me/название канала/23.

23 — это и есть ID сообщения. Добавим это ID в Тело запроса, остальная часть ссылки не нужна.

3. Оформим Нативный запрос в редакторе бота.

4. Сделаем сохранение и протестируем бота. Сообщение из группы/канала в бот придет в таком виде:

Если нужно, чтобы сообщение пришло без названия канала, можно воспользоваться методом copyMessage.

Тело запроса для этого метода будет таким же, как в прошлом примере, меняется только Метод запроса.

Теперь в бот придет придет сообщение без отсылки к каналу или группе, откуда сообщение пересылалось.

Как отправить стикер от имени бота

Пришлем пользователю стикер с помощью метода SendSticker в Нативном запросе.

Таким методом можно воспользоваться, если нужно прислать пользователю стикер сообщением от бота.

1. В компоненте Нативный запрос выберем из выпадающего списка метод запроса SendSticker.

2. Добавим Тело запроса:

{
"chat_id": "{{this_user.platform_id}}",
"sticker": "54321"
}

или

{
"sticker": "12345"
}

Где 54321 — ID отправляемого стикера. Узнать ID любого стикера поможет бот Sticker ID

Как сделать кнопку для перехода в веб-приложение в Telegram

Такую кнопку можно сделать с помощью метода sendMessage в Нативном запросе.

1. Добавим в Нативный запрос Тело запроса:

{
   "platformId":"{{this_user.platform_id}}",
   "chat_id":"{{this_user.platform_id}}",
   "text":"Нажмите на кнопку что бы перейти в веб-бота",
   "reply_markup":{
      "inline_keyboard":[
         [
            {
               "text":"Перейти",
               "web_app":{
                  "url": "https://docs.botmother.ru/article/41067"
               }
            }
         ]
      ]
   }
}

Где:

  • chat_id — то, куда пересылаем сообщение, {{this_user.platform_id}} — ID пользователя, у которого сработает запрос, также можно указать другое значение. Без этого параметра в теле запроса, запрос сработает у пользователя, который попал на компонент Нативный запрос в боте.
  • text — текст перед кнопками.

reply_markup — настройки кнопки, где:

  • text — текст на кнопке.
  • url — адрес для перехода по кнопке.

3. Сделаем сохранение и протестируем бота.

Сообщение из группы/канала в бот придет в таком виде:

Можно добавить в массив объектов еще один объект для второй или третьей кнопки.

Тело запроса для двух кнопок будет выглядеть так:

{
  "platformId":"{{this_user.platform_id}}",
  "chat_id":"{{this_user.platform_id}}",
  "text":"Нажмите на кнопку что бы перейти в веб-бота",
  "reply_markup":{
     "inline_keyboard":[
        [
           {
              "text":"EN",
              "web_app":{
                 "url": "https://docs.botmother.com/"
              }
           },
           {
              "text":"RU",
              "web_app":{
                 "url": "https://docs.botmother.ru/"
              }
           }
        ]
     ]
  }
}

В качестве URL, который откроется при раскрытии web app, можно использовать ссылку виджета для перехода в поддержку вашего сервиса.

Например, для сервиса Сhatra ссылка будет примерно такой:

https://chat.chatra.io/?isModern=true#hostId=12345&mode=widget&langOverride=ru&lang=ru

Значит, тело запроса будет таким:

{
   "platformId":"{{this_user.platform_id}}",
   "chat_id":"{{this_user.platform_id}}",
   "text":"Нажмите на кнопку",
   "reply_markup":{
      "inline_keyboard":[
         [
            {
               "text":"Поддержка",
               "web_app":{
                  "url": "https://chat.chatra.io/?isModern=true#hostId=12345&mode=widget&langOverride=ru&lang=ru"
               }
            }
         ]
      ]
   }
}

Такой метод поможет и с виджетами других аналогичных сервисов.

Как закрепить сообщение в боте

Закрепим сообщение вверху чата с помощью метода PinChatMessage в Нативном запросе.

1. В компоненте Нативный запрос выберем из выпадающего списка метод запроса PinChatMessage.

2. Добавим такое Тело запроса, если нужно закрепить сообщение от пользователя:

{
"chat_id": "{{this_user.platform_id}}",
"message_id": "{{lastUpdate.update.message_id}}"
}

или

{
"message_id": "{{lastUpdate.update.message_id}}"
}

Такое тело запроса подойдет, если нужно закрепить сообщение от бота.

    {
    "chat_id": "{{this_user.platform_id}}",
    "message_id": "{{lastMessageId}}"
    }

или

{
    "message_id": "{{lastMessageId}}"
}

Как отправить круглое видео в Телеграм

Для получения круглого видео можно воспользоваться этим ботом →

Так как этот бот не принадлежит Ботмаме, за его работу мы ответственности не несем.

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

Обратите внимание, что загружаемое видео должно быть в форме квадрата. Если ваше видео имеет другой формат, предварительно измените его размер в любом редакторе видео.

Перед тем, как прислать видео боту, убедитесь, что формат видео не превышает 640 на 640 пикселей, а размер не превышает 8 Мб. Длительность видео не должна быть больше 60 секунд.

Далее полученное видео нужно переслать к себе в бот. Для этого кликните по видео правой клавишей мыши, выберите «‎Переслать»‎, затем выберете бота, которому нужно переслать видео.

В примере перешлем видео в бот «‎Воронка продаж»‎

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

Путь до нужного file_id будет таким: lastUpdate.update.video_note.file_id. В переменных пользователя нужный file_id будет в конце списка переменных. Скопируйте этот идентификатор видео.

Перейдите в раздел Редактор бота и добавьте на экран компонент Нативный запрос. В Нативном запросе выберите метод запроса sendVideoNote, тело запроса должно быть таким:

{
"chat_id": "{{this_user.platform_id}}",
"video_note": "12345"
}

Вместо 12345 в video_note вставьте file_id, ранее скопированный из переменных.

Доставляемость таких сообщений будет ниже, чем текстовых, обычных видео или картинок, т.к. видеокружок могут получать только те пользователи, у которых в настройках приватности стоит разрешение на получение аудио и видео от всех, а не только от своих контактов. Также пользователь может заблокировать получение таких медиафайлов от конкретного бота.

Пример Нативного запроса для ВК

ВКонтакте, так же как и Телеграм, предоставляет различные методы взаимодействия с пользователями бота →

Важно учитывать, что в боте будут работать только те методы VK API, которые отмечены синим кружком в официальной документации. Для вызова этих методов требуется использовать токен доступа группы.

Многие из этих методов уже реализованы в конструкторе в виде компонентов, но при необходимости выполнения более специфических задач можно использовать запросы к API.

Рассмотрим пример отправки сообщения с помощью Нативного запроса. Для этого воспользуемся методом messages.send.

Выберем платформу ВКонтакте и нужный метод из выпадающих списков в настройках компонента.

Обязательные параметры для Тела запроса:

  • user_id — уникальный идентификатор пользователя в боте. Его мы получаем как основную переменную {{this_user.platform_id}}. Без этого параметра в теле запроса, запрос сработает у пользователя, который попал на компонент Нативный запрос в боте.
  • random_id — идентификатор, предназначенный для предотвращения повторной отправки одного и того же сообщения.
  • message — сообщение, которое должен получить пользователь.

Напишем Тело запроса с этими параметрами:

{
"user_id": "{{this_user.platform_id}}",
"random_id": "{{now}}",
"message": "work"
}

или

{
"random_id": "{{now}}",
"message": "work"
}

И добавим его в настройки компонента:

Если все сделано правильно, то при активации компонента, бот пришлет пользователю слово work, так как оно указано в Теле запроса.

Пользуясь документацией API для ВКонтакте, вы можете протестировать и другие методы через Нативный запрос.

Удаление последнего сообщения ВКонтакте

Удалим последнее сообщение от бота с помощью Нативного запроса.

1. В компоненте Нативный запрос выберем из выпадающего списка метод запроса messages.delete.

2. Добавим Тело запроса для удаления последнего сообщения:

{
    "message_ids": "{{lastMessageId}}",
     "delete_for_all": "1",
    "peer_id": "{{this_user.platform_id}}"
}

Где:

  • message_ids — ID удаляемых сообщений, можно перечислить несколько через запятую.
  • {{lastMessageId}} — ID последнего сообщения.
  • delete_for_all — удалить для всех. Необходимо установить значение 1. Если параметр не указан, бот будет удалять сообщение только со своей стороны, а пользователь продолжит видеть его.
  • peer_id — откуда удалить сообщение. В значении должно быть id пользователя, если это чат один на один с ботом.

Редактирование сообщения ВКонтакте

Удалим последнее сообщение от бота с помощью Нативного запроса.

1. В компоненте Нативный запрос выберем из выпадающего списка метод запроса messages.edit.

2. Добавим Тело запроса для удаления последнего сообщения:

{
"peer_id": "{{this_user.platform_id}}",
"message": "новый текст сообщения",
"message_id":"{{lastMessageId}}"
}

Где:

  • peer_id — откуда удалить сообщение. В значении должно быть id пользователя, если это чат один на один с ботом.
  • message — текст, на который поменяется редактируемое сообщение.
  • message_id — ID удаляемых сообщений, можно перечислить несколько через запятую.
  • {{lastMessageId}} — ID последнего сообщения.

В начало ↑