Нативный запрос
Работает в Telegram и ВК.
- Форматирование текста в Нативном запросе →
- Как отправить несколько изображений в одном сообщении (Telegram) →
- Как удалять последнее сообщение от бота (Telegram) →
- Как удалять блок сообщений от бота (Telegram) →
- Как удалять любое сообщение от бота (Telegram) →
- Как удалять последнее сообщение от пользователя (Telegram) →
- Как забанить и разбанить пользователя в группе (Telegram) →
- Как пересылать сообщения из группы или канала (Telegram) →
- Как отправить стикер от имени бота (Telegram) →
- Как сделать кнопку для перехода в веб-приложение в Telegram (web app) →
- Как закрепить сообщение в боте (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 удаляемых сообщений.
Как удалять любое сообщение от бота в Телеграм
1. Добавьте несколько экранов с сообщениями.
2. На экран с сообщением которое должно быть удалено, добавьте Запись переменной.
3. Имя переменной может быть любым, в значение добавьте {{lastMessageId}}. Таким образом ID сообщения перезапишется в новую переменную. Эта переменная позже будет добавлена в Тело запроса.
4. Добавьте экран с Нативным запросом.
5. В настройках Нативного запроса выберите метод deleteMessage.
6. Добавьте Тело запроса:
{ "chat_id": "{{this_user.platform_id}}", "message_id": "{{dlt}}" }
или
{ "message_id": "{{dlt}}" }
Где:
- chat_id — то, куда пересылаем сообщение
- {{this_user.platform_id}} — ID пользователя, у которого сработает запрос, также можно указать другое значение. Без этого параметра в теле запроса сообщения удалятся у пользователя, который попал на компонент Нативный запрос в боте.
- message_id — сообщение которое удалится.
- {{dlt}} — переменная, куда записано ID сообщения, которое нужно удалить. Имя переменной в Теле запроса должно быть таким же как в Записи переменной.
Как удалять последнее сообщение от пользователя
1. Добавьте экран с сообщением и с компонентом для приема сообщений — Развилкой или Вводом от пользователя.
2. Добавьте экран с Нативным запросом.
3. Откройте настройки Нативного запроса и выберите метод deleteMessage.
4. Добавьте Тело запроса:
{ "chat_id": "{{lastUpdate.update.chat.id}}", "message_id": "{{lastUpdate.update.message_id}}" }
или
{ "message_id": "{{lastUpdate.update.message_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" } } ] ] } }
Где:
- 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 последнего сообщения.