一句话结论:今天的 MPChat Bot 是命令 + MiniApp产品,不是 Telegram 那种聊天气泡里点按钮完成多轮交互的产品。answerCallbackQuery、editMessageReplyMarkup、answerInlineQuery 均未开放。有状态的交互放进 MiniApp,再用 editMessageText 把结果写回原消息。
总览
本文是 MPChat Bot 是什么? 的产品向姊妹篇。那篇讲边界,这篇讲用 core.mp.net/bots 当前已文档化的方法,能组合出什么产品。
不要按 Telegram Bot 1:1 搬。方法名眼熟,交互模型不同。先读核心模式,再选场景。
能力积木
按「产品能做什么」分组,而不是按 OpenAPI 分类:
积木 | 用来做什么 | 主要方法 |
出站消息 | 文本、媒体、MiniApp 入口、群 @、关闭链接预览 |
|
消息运维 | 原地编辑、置顶、转发、复制、撤回 vs 删除 |
|
群治理 | 禁言(不是踢人)、解禁、改群资料 |
|
群信息读取 | 会话 / 成员 / 管理员元数据 |
|
命令菜单 | 客户端展示的斜杠指令列表 |
|
MiniApp 身份 | 打开应用、验明用户、路由到某一屏 |
|
媒体方法接受公网 URL 或 multipart 上传,不支持复用已有 file_id。sendChatAction、sendLocation、sendPoll 当前返回 501。
核心模式:命令 + MiniApp,不是气泡内按钮
Telegram 的默认体验是消息上的按钮留在聊天里:用户点 callback_data,Bot 收到 callback_query,用 answerCallbackQuery 回应,再用 editMessageReplyMarkup 换掉键盘。
在 MPChat,这三个方法列在当前未开放的 Bot API 方法里。MiniApp 客户端回流(web_app_data / sendData / answerWebAppQuery)同样不可用。替代模式是:
用户发一条命令,或点
web_app按钮,或打开https://mp.net/{botUsername}/{shortName}?startapp=…。MiniApp 加载。前端读取原始
window.MpChat.WebApp.initData,POST 到你自己的后端——Bot token 绝不能进 WebView。后端校验
hash与auth_date,再信任user.id、miniapp_id、start_param。用户在 MiniApp 里做完后,后端调 Bot API 的
editMessageText(或另发一条),让聊天里的原文反映结果。
用 setMyCommands 做可发现的入口(/start、/help、/status)。表单、列表、超过两个选项的流程,全部进 MiniApp。
场景:群运营与置顶播报
社群 Bot:欢迎新人,并把今日公告钉在群里。
接收
Update.message.new_chat_members(轮询或 Webhook)。sendMessage一条欢迎,用entities的text_mention@ 到新人(见下方邀请场景)。pinChatMessage置顶当日公告。目前仅群会话;权限不足返回 403。次日:
unpinChatMessage,再recallMessage清掉过期公告。recallMessage是 MPChat 扩展;deleteMessage仍是兼容删除方法。
退群事件是 Update.message.left_chat_member。置顶事件在 Bot 能看到该消息时,以 Update.message.pinned_message 送达。
场景:审批与工单
不要在气泡上做「通过 / 驳回」。打开 MiniApp 处理,再把决定写回原消息。
工单创建时,
sendMessage一段摘要,并附web_app按钮,url填 MiniApp 的entryUrl。服务端用该 URL 解析当前 Bot 名下的 MiniApp,请求体不必带miniapp_id。要落到某一张工单,在正文里再放直链:
https://mp.net/{botUsername}/{shortName}?startapp=ticket_123。startapp会进入签名后的initData.start_param。不要把startapp写进 MiniApp 保存的entryUrl本身。MiniApp 展示通过 / 驳回。验签后,后端落库,并对原
message_id调editMessageText:已通过 by @Chen。
若这条只要文字、不要 MiniApp 卡片,同一条 sendMessage 设 link_preview_options.is_disabled = true。服务端仍会校验 web_app.url 属于当前 Bot 已启用的 MiniApp。
{
"chat_id": "12345",
"text": "请假单 ticket_123 — 打开后审批",
"link_preview_options": { "is_disabled": true },
"reply_markup": {
"inline_keyboard": [[
{
"text": "去审批",
"web_app": { "url": "https://mini.example.com/demo" }
}
]]
}
}
场景:活动邀请与群 @
MiniApp 里勾选要邀请的人,Bot 再在群里 @ 他们,触发群提醒。官方形态:
{
"chat_id": "12345",
"text": "@Chen @Lei invites you to this activity",
"entities": [
{
"type": "text_mention",
"offset": 0,
"length": 5,
"user": { "id": "2000000154" }
},
{
"type": "text_mention",
"offset": 6,
"length": 4,
"user": { "id": "2000000168" }
}
]
}
上线时要守的边界:
entities当前只支持text_mention。官方参考未写明offset/length按哪种编码计数,且示例全是 ASCII 名字——上线前请用含中文的昵称实测一次,否则高亮会落在错误的字符上。每个目标必须已在群内。不支持 @all。不从昵称、展示名或模糊文本推断对象。
群聊
sendMessage若完全省略entities,服务端会尝试按群成员用户名唯一匹配,把原文@username自动补成text_mention。匹配不上的当普通文本发出。不要把
entities和web_appMiniApp 入口卡写在同一条消息里。web_app消息也不会做用户名自动补全。
场景:可刷新的状态看板
固定一条消息反复覆盖,避免刷屏。
sendMessage发出第一份快照,存下chat_id+message_id。每次刷新对同一条调
editMessageText。只支持改文本消息;消息不存在 404,Bot 无权改 403。图表用
sendPhoto+ 公网图片 URL(或 multipart)。不能复用上次的file_id,图片请自己托管,每次发新 URL。
没有「正在输入」指示(sendChatAction 返回 501)。生成要几秒时,先发一句占位,再用 editMessageText 换成终稿。
场景:内容治理与群规
管理 Bot:清垃圾消息,禁言屡犯者。
recallMessage/recallMessages(MPChat 扩展),或兼容的deleteMessage/deleteMessages。群里,拥有「撤回消息」权限的管理员 Bot 可撤回普通成员的消息;不能撤回群主或其他管理员的消息——会返回 403。
批量撤回 / 删除是全成或全败:任一 id 不满足前置条件,整单报错,不会部分成功。
banChatMember是禁言,不会把人移出群。until_date=0或省略表示直到你调用unbanChatMember。
没有 createChatInviteLink,也没有「踢出再解封」的增长闭环。拉新请发 MiniApp 直链,用 ?startapp= 做归因,加人仍走人工或其它产品流程。
场景:客服分流与会员分层
客服 MiniApp 打开时就已经知道是谁。
先校验原始
initData,再读任何用户字段。initDataUnsafe只给 UI 展示。user.email是 MPChat 扩展:仅在用户已授权且确有 Email 时出现在签名后的userJSON 里;否则字段省略。缺 Email 不等于验签失败。user.is_premium(若有)可用来把付费队列和免费队列分开。坐席在 MiniApp 里结单后,用
editMessageText或sendMessage把一行摘要写回聊天,方便审计。
Telegram 的 initData 没有 Email 字段。不要假设一份 Telegram MiniApp 示例能解析 user.email。
现在做不到的玩法与替代路径
Telegram 玩法 | MP 今天 | 改怎么做 |
气泡内多轮按钮 |
|
|
内联查询 |
|
|
投票 |
| MiniApp 投票页,Bot 发结果 |
位置 / 打卡 |
| 在 MiniApp 内取位置 |
「正在输入」 |
| 先发占位文本,再 |
读取用户发来的文件 |
| 引导到 MiniApp 内上传 |
邀请链接裂变 |
| MiniApp 直链 + |
踢出群成员 |
| API 禁言;移出群走人工管理员 |
支付、Stars、礼物、贴纸包、表情反应、常驻回复键盘 | 未开放 | 本阶段没有 Bot API 替代 |
相关文章
本文描述的是 core.mp.net/bots 今天已公布的方法集合。依赖上文未列出的方法前,请先核对该页。







