一句話結論:今天的 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 今天已公布的方法集合。依賴上文未列出的方法前,請先核對該頁。







