Skip to main content

MPChat and Telegram Bot APIs: key integration differences

Key differences between the MPChat Bot API and Telegram: no file_id reuse, banChatMember mutes instead of kicks, bots can't start chats, message callbacks supported, MiniApp client return still closed.

If you are porting from Telegram, read this first. The path shape is familiar but several behaviors differ. Status is authoritative at core.mp.net/bots.


Overview

The MPChat Bot API mirrors Telegram-style methods but is not a full replica. These are the differences that break naive ports.

file_id is not reusable

A previously sent media file_id cannot be reused. sendPhoto, sendVideo, sendDocument, and setChatPhoto accept a public URL or multipart upload. When migrating, switch to URLs or your own storage.

banChatMember mutes, does not kick

banChatMember sets the member to restricted (muted) without removing them. until_date=0 or omitted means permanent until unbanChatMember. Risk L3, DocOnly.

Bots cannot start conversations

A user must establish context first. Sending to a chat_id with no conversation may return 400. Flow: user messages → getUpdates reads chat_id → sendMessage.

sendMessage buttons and MiniApp

sendMessage is an MP difference: reply_markup supports inline url / web_app / callback_data / copy_text and Reply Keyboard. Message callbacks use answerCallbackQuery. MiniApp client return flows (web_app_data / sendData / answerWebAppQuery) are still not available.

Quick reference

Topic

Telegram expectation

MP today

Media reuse

file_id reusable

Not supported; URL / multipart

Ban member

Kicks from chat

Mutes, stays in chat

Proactive DM

Possible in some cases

User must establish context

Message callback buttons

callback_data + answerCallbackQuery

Supported (300s window; no url/cache_time)

sendMessage MiniApp open

Full MiniApp return flows

web_app opens MiniApp; also url / copy_text

MiniApp client return

web_app_data / sendData / answerWebAppQuery

Not supported

Menu button vs Reply Keyboard

Independent left / right controls

Same; setChatMenuButton never drives Reply Keyboard

sendPoll / sendLocation / sendChatAction

Available

HTTP 501

Why does an existing private chat return HTTP 403?

  • If the user blocks the bot, sending, forwarding, or copying a message into that private chat returns HTTP 403. Skip retries for this error. The bot can send new messages after the user unblocks it. Blocked messages are not resent automatically.

Why does the MiniApp button work only in private chat?

  • Ordinary web_app buttons are private-chat only. For MiniApp sharing in a group or supergroup the bot has joined, the sendMessage inline keyboard must have exactly one row and one button containing only text and web_app. Check that the URL belongs to an enabled MiniApp owned by this bot.

Why did the keyboard or media caption disappear after an edit?

  • Composite message edits clear the inline keyboard or media caption when the corresponding field is omitted. To preserve either field, include its current value in the edit. Use the dedicated edit method when updating only the keyboard or only the caption.

Related

Many Telegram methods are simply not exposed by MP. Confirm availability in the method matrix before depending on a method.

Did this answer your question?