跳至主要內容

Bot 與 MiniApp 開發常見問題

MPChat Bot 與 MiniApp 最常見問題的快速解答:如何拿 chat_id、處理 409、file_id 複用、429 應對、initData 能否登入、哪些方法不能隨便測。

本文中的 DocOnly、L0–L3 用於說明本指南的測試執行限制與操作風險,不代表介面是否受支援。介面支援狀態應另查官方文件;修改訊息、會話或傳遞設定前,請核對目標和復原方式。

快速解答開發者最先遇到的問題。參數級細節見 core.mp.net/bots。


總覽

按主題分組的常見問題。若這裡沒有你的問題,請查閱本欄目對應指南。

快速開始

收發訊息

  • Bot 為何不能主動私聊?用戶須先建立上下文;sendMessage 需要有效 chat_id。

  • chat_id 如何取得? 請使用者先傳送訊息給 Bot,再依目前的接收方式,從 Webhook 更新或 getUpdates 結果讀取 message.chat.id。

  • getUpdates 回傳 []?還沒訊息,或該批已被消費。檢查 offset 與 Webhook 狀態。

  • getUpdates 回傳 409?已啟用 Webhook(與輪詢互斥)。用 getWebhookInfo 確認;勿自行執行 deleteWebhook。

媒體與限制

  • file_id 能複用嗎?不能。用公網 URL 或 multipart。

  • banChatMember 會踢人嗎?不會——僅禁言(restricted)。用 unbanChatMember 解除。L3 DocOnly。

  • sendPoll / sendLocation 為何不可用?目前回傳 501。

  • 觸發 429 怎麼辦?不超過每秒 30 次,並加指數退避。

MiniApp

  • 前端資料能直接登入嗎?不能。後端必須驗證 initData 簽名;initDataUnsafe 僅用於 UI。

  • shortName 是 miniapp id 嗎?不是。shortName 是直鏈 https://mp.net/{bot}/{shortName} 裡的短名;miniapp_id(ma_…)是簽名 initData 裡的平台 ID。

  • 如何開啟 MiniApp 指定頁?加 ?startapp=…,會進入簽名後的 initData.start_param。

  • 如何關掉連結預覽卡? 在 sendMessage 中設定 link_preview_options.is_disabled=true,可同時關閉一般連結和 MiniApp 連結的預覽卡片。

安全

  • 哪些方法不能隨便測?DocOnly:logOut、leaveChat、deleteMessage(s)、banChatMember、setWebhook、deleteWebhook。

  • 官方參考在哪?core.mp.net/bots——參數級權威來源。

為什麼已有的私聊回傳 HTTP 403?

  • 使用者封鎖 Bot 後,向該私聊傳送、轉傳或複製訊息都會回傳 HTTP 403。收到此錯誤後請跳過重試。解除封鎖後,Bot 可以傳送新訊息。封鎖期間未送達的訊息不會自動補送。

為什麼會重複投遞?待投遞數為 0 代表什麼?

  • Webhook 重新投遞會沿用原 update_id。驗證請求後,先用 Bot 與 update_id 組成的唯一鍵持久化更新,再回傳 HTTP 2xx(如 200 或 204)。業務處理也要具備冪等性,避免工作重跑時重複回覆或重複變更狀態。

  • 一般更新最多投遞 24 小時。按鈕回呼更新最多投遞 150 秒,answerCallbackQuery 另有 300 秒的回應時限。

  • pending_update_count=0 表示目前沒有待投遞的更新。若要確認哪些更新已到達服務,請查看 getWebhookInfo 的近期投遞錯誤,並核對服務端的接收和處理記錄。

為什麼點回呼按鈕後一直轉圈?

  • 先確認按鈕使用 callback_data。若透過 allowed_updates 篩選更新類型,應納入 callback_query。請檢查服務是否在 150 秒投遞時限內收到該更新。

  • 收到後盡快以 callback_query.id 呼叫 answerCallbackQuery,從點擊產生回呼起 300 秒內完成。同一 ID 僅第一個有效回應成功,重複或逾期回應會回傳 HTTP 400。

  • 用戶端不會顯示回應中的 text 或 show_alert。若要讓使用者看到處理結果,可以編輯訊息或傳送回覆。

為什麼 MiniApp 按鈕在私聊可用,在群組裡卻打不開?

  • 一般 web_app 按鈕僅適用於 Bot 私聊。在 Bot 已加入的群組或超級群組分享 MiniApp 時,該則 sendMessage 的內嵌鍵盤必須恰好一列、一個按鈕,且按鈕只包含 text 與 web_app。也請確認 URL 指向目前 Bot 擁有且已啟用的 MiniApp。

為什麼編輯訊息後按鈕或媒體說明消失了?

  • 複合編輯訊息時,省略內嵌鍵盤或媒體說明對應的欄位,會清除該欄位。若要保留原值,請在編輯請求中一併傳入。若只調整鍵盤或媒體說明,可以使用對應的專用編輯方法。

相關文章

本 FAQ 概括的行為可能變化。請始終在官方方法頁確認當前狀態。

是否回答了您的問題?