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 and MiniApp buttons
sendMessage is an MP difference: it supports reply_markup.inline_keyboard[].web_app to open a MiniApp, but not web_app_data, sendData, or answerWebAppQuery return flows.
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 |
sendMessage MiniApp | Full return flows | web_app button only |
MiniApp return flow | web_app_data, etc. | Not supported this phase |
sendPoll / sendLocation / sendChatAction | Available | HTTP 501 |
Related
Many Telegram methods are simply not exposed by MP. Confirm availability in the method matrix before depending on a method.
