Нативный запрос
Работает в Telegram и ВК.
- Как отправить несколько изображений в одном сообщении (Telegram) →
- Удаление последнего сообщения от бота (Telegram) →
- Как пересылать сообщения из группы или канала (Telegram) →
- Как отправить стикер от имени бота (Telegram) →
- Как сделать кнопку для перехода в веб-приложение в Telegram (web app) →
- Как закрепить сообщение в боте (Telegram) →
- Как отправить круглое видео в Телеграм →
- Пример Нативного запроса для ВК →
- Удаление последнего сообщения ВКонтакте →
- Редактирование сообщения ВКонтакте →
Компонент Нативный запрос работает также как Запрос API, но настраиваются эти компоненты по-разному.
В отличие от Запроса, в Нативном запросе, пользователю нужно выбрать Платформу, Метод и заполнить Тело запроса — для методов, которые отправляют POST, для GET — в поле для тела запроса нужно обязательно вписать пустой объект {}.
Остальные настройки добавятся по умолчанию, в компоненте их видно не будет.
При необходимости можно указать Имя переменной для тела ответа, чтобы данные от сервера сохранялись в заданную вами переменную вместо использования стандартной переменной last_native_request.
Когда в компоненте выбран Метод запроса, в настройках появляется активная ссылка ведущая на документацию API выбранного метода.
Телеграм предоставляет большое количество методов, с помощью которых можно взаимодействовать с пользователями бота. Многие из них уже реализованы в конструкторе в виде компонентов, но делать какие-то специфичные вещи можно и с помощью запросов к API.
Для примера, отправим одним сообщением три изображения с помощью Нативного запроса. Метод: sendMediaGroup.
Этим методом можно отправить несколько файлов одного вида: изображений, документов, видео или аудио.
В боте отправленные изображения будут выглядеть так:
Обязательные параметры для Тела запроса:
- 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"}] }
И добавим его в настройки компонента:
Не забудьте сохраниться.
Теперь при активации компонента бот пришлет сразу три изображения.
Из-за ограничений Telegram, изображения могут обрезаться по горизонтальному формату.
Удаление последнего сообщения от бота в Телеграм
Удалим последнее сообщение от бота с помощью Нативного запроса.
1. В компоненте Нативный запрос выберем из выпадающего списка метод запроса deleteMessage.
2. Добавим Тело запроса для удаления последнего сообщения:
{ "chat_id": "{{this_user.platform_id}}", "message_id": "{{lastMessageId}}" }
Где:
- chat_id — то, куда пересылаем сообщение.
- {{this_user.platform_id}} — ID пользователя, у которого сработает запрос. Можно оставить без изменений, тогда запрос сработает у пользователя, который попал на компонент Нативный запрос в боте.
- message_id — сообщение которое удалится.
- {{lastMessageId}} — идентификатор последнего сообщения в боте.
Пересылка сообщений из группы/канала
Перешлем сообщение в исходном виде из канала/группы с помощью метода 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" }
Где 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}}" }
Такое тело запроса подойдет, если нужно закрепить сообщение от бота.
{ "chat_id": "{{this_user.platform_id}}", "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" }
И добавим его в настройки компонента:
Если все сделано правильно, то при активации компонента, бот пришлет пользователю слово 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 последнего сообщения.