Engineering

「追蹤再領取」失效?Meta 留言轉私訊新限制完整解析

ViralArc 小編 2026年10月12日 読了 2 分

有一種活動設計在台灣非常普遍:請粉絲在貼文下留言關鍵字,系統自動私訊他「請先追蹤我們,再點下方按鈕領取」,按鈕連到優惠頁或檔案下載。

這個流程在 2026 年的某個時間點開始大量失效,而且失效的方式很難察覺——公開回覆看起來正常,後台顯示「已處理」,但受眾那端一則私訊都沒收到。更麻煩的是,當你發現問題想重跑一次時,那些留言已經永久救不回來了。

原因不在你的設定,也不在工具。這篇文章拆解背後的機制、行銷端該怎麼調整活動設計,以及開發端要處理的四件事。

文章摘要快速看

  • 帶按鈕、卡片或附件的私訊,送給還沒追蹤你的人,會被 Meta 拒絕。 純文字不受影響。
  • 那次失敗會用掉該留言唯一的私訊額度。 Meta 規定一則留言只能私訊一次,而這次被拒的嘗試也算一次。
  • 所以重試沒有用。 改送純文字也救不回來——額度在第一次就燒掉了。
  • 解法是順序,不是重試:第一則私訊只送純文字、請對方回覆;等對方回覆之後,才送帶按鈕的第二則。
  • 「先追蹤」這個活動設計最容易中,因為它的目標族群定義上就是還沒追蹤你的人。

最近 Meta 官方改變了什麼政策?

Meta 的私密回覆(private reply)規則一直是這樣:

  1. 一則留言只能私訊一次,沒有第二次機會。
  2. 必須在留言建立後七天內送出;直播的留言只能在直播進行中回覆。
  3. 對方回覆之後,才進入一般的 24 小時訊息窗口,才能繼續對話。
  4. 訊息會落在哪裡取決於關係:追蹤者進收件匣,非追蹤者進「訊息邀請」。

近期改變的是第四點背後的運作方式。現在,非追蹤者不只是收件位置不同,可接受的訊息格式也不同:純文字可以送達,但按鈕、卡片、附件這類互動元件會被拒絕。

值得注意的是,這個限制在 Meta 的公開文件裡找不到。我們能查到的最接近來源是第三方的錯誤碼整理:Instagram 會回一個 Meta code 2、subcode 1545133 的錯誤,而這個 subcode 並未出現在 Meta 的官方 Send API 參考文件中,第三方整理把它描述為「送出按鈕或卡片給非追蹤者」時觸發,並建議改成先送純文字。

更棘手的部分是這個失敗的副作用。我們在生產環境實際觀察到的序列是:一個設了「先追蹤」流程的活動,第一次嘗試(帶按鈕)被拒,接下來的每一次重試都收到「這則留言不符合私密回覆資格」——也就是說,被拒的那一次已經把唯一的額度用掉了。整個活動的留言沒有一則成功,公開回覆也因為流程卡在私訊這一步而沒有發出去。

一句話總結機制:這是 API 層面的行為,所有做留言轉私訊的工具打的都是同一支端點,受同一套規則約束。 差別只在於各家有沒有把訊息順序排對。

給行銷與小編:活動設計要怎麼調

為什麼「先追蹤再領取」最容易中

這個設計的邏輯是:用好禮換追蹤。所以它瞄準的,正好是還沒追蹤你的人——而那正是現在無法接收按鈕訊息的族群。

換句話說,這個玩法的目標受眾和這個限制的作用對象,是完全重疊的。已經追蹤你的人收得到按鈕,但他們本來就不需要被要求追蹤。結果就是活動對真正想轉換的人全軍覆沒,而你從後台的「已處理」數字上看不出來。

正確的訊息順序

把一則訊息拆成兩則,問題就解了:

第一則私訊第二則私訊
❌ 錯誤做法純文字+按鈕「點此領取」—
✅ 正確做法只有純文字,請對方回覆關鍵字對方回覆後,才帶按鈕或連結

文案範例:

第一則(純文字) 嗨!看到你的留言了 🙌 攻略已經準備好,請先追蹤我們的帳號,然後直接回覆「我追蹤了」,就會立刻把領取連結傳給你。

第二則(對方回覆之後,可帶按鈕) 收到!這是你的攻略,點下方按鈕就能看 👇 [查看攻略]

這個改法有一個額外的好處:對方回覆這件事本身,會解開後面會提到的「無法查詢追蹤狀態」的限制。一個動作同時解決兩個問題。

文案上的三個細節

  • 把「回覆」這個動作講得非常明確。 使用者不習慣回覆自動訊息,所以指令要具體到「回覆『我追蹤了』」這種程度,而不是「有問題歡迎告訴我們」。
  • 連結不要放在第一則的文字裡硬塞。 第一則的任務是換到一次回覆,塞連結會降低回覆率,而且私訊裡的純文字連結本來就不如按鈕好點。
  • 公開回覆要留一句引導。 「已經私訊給你囉,記得去『訊息邀請』看一下」——非追蹤者的訊息會進邀請匣,不講的話很多人根本不會發現。

怎麼判斷自己中了這個問題

這幾個徵兆同時出現,大概就是:

  • 活動的私訊成功數接近零,但公開回覆看起來正常,或兩者都沒發出去
  • 後台的失敗原因是空白的,或只有籠統的「服務暫時不可用」
  • 同一則留言被嘗試了好幾次,全部失敗
  • 用自己的帳號測試(已追蹤)完全正常,但真實受眾收不到

最快的驗證方法:找一個沒有追蹤你的測試帳號去留言,看第一則帶按鈕的私訊會不會送達。用已追蹤的帳號測試,永遠測不出這個問題——這也是它容易被漏掉的原因。

給開發者:實作上要處理的四件事

一、第一則私訊只送純文字

這是最核心的一條。私密回覆的第一則訊息應該只帶 message 的文字內容,不要附加按鈕、快速回覆、卡片或任何 attachment。等對方回覆、進入一般的 24 小時訊息窗口之後,才可以送互動元件。

如果產品設計上非常需要按鈕,可以把它當成漸進增強:偵測到對方已經是追蹤者時才帶按鈕,否則退回純文字。但要注意下面第四點——「偵測對方是不是追蹤者」這件事,在留言階段其實做不到。

二、這個錯誤要歸為終局,不要重試

code 2 / subcode 1545133 應該被分類為終局失敗。重試不會改變結果,因為資格判定的對象(收件人與該則留言)不會因為你再送一次就改變。

更重要的是,預設應該假設額度已經被消耗。這跟多數重試邏輯的直覺相反:一般來說「不確定有沒有成功」會傾向再試一次,但一次性的訊息通道剛好相反——不確定時,重試的代價是把本來可能還在的機會也毀掉,或讓同一個人收到兩則訊息。

實務上值得把回應分成幾類,按「能不能再送一次」決定行為,而不是按錯誤訊息的字面意思:

type PrivateReplyOutcome =
  | "delivered"            // 確認送達
  | "terminal_rejection"   // 終局拒絕(含 1545133):標記失敗,不重試
  | "quota_consumed"       // 額度已用掉:即使這次失敗也不要再試
  | "ambiguous"            // 送出後失去回應:停下來,先去查對話
  | "retryable";           // 真正可重試(連線層級的錯誤)

三、錯誤碼的解析不能只認一種形狀

這個坑很常見。如果你的錯誤解析只讀 Graph API 的標準形狀:

// 只認這一種路徑
const metaError = error?.response?.data?.error;
const code = metaError?.code;
const subcode = metaError?.error_subcode;

那麼只要請求經過任何一層中介(API gateway、SDK、自家的 proxy),平台錯誤被包進別的欄位時,code 和 subcode 就會通通變成 null。

後果是連鎖的:沒有 subcode → 分類函式認不出終局錯誤 → 當成可重試 → 重試一直失敗 → 日誌裡只剩一堆沒有成因的錯誤。 診斷時你會發現手上什麼線索都沒有。

建議的寫法是讓解析函式容納多種來源,並且把原始碼與子碼分開存成數值欄位,不要只留一段訊息字串——平台的本地化訊息會隨語系和時間改寫,字串沒辦法 group by,子碼才是穩定的識別。

四、追蹤狀態查不到,這不是你的 bug

這是這次調查裡最少人知道、但影響最大的一條,而且它寫在 Meta 自己的文件裡。

直覺上,「先追蹤再領取」最乾淨的實作是直接問 API:這個留言的人追蹤我了嗎?User Profile API 確實有這個欄位——is_user_follow_business,還有 is_business_follow_user 和 follower_count。

但文件寫得很明確:「User consent is required to access the user profile」,而這個同意只在對方傳訊息給你、或點擊 icebreaker/persistent menu 時成立。文件甚至直接點名了留言的情況:有人只在貼文或留言下留言、而沒有傳訊息給商家,API 會回「User consent is required to access the user profile」錯誤。

這代表一件事:在留言階段,你無法查詢對方的追蹤狀態。 不是權限沒開、不是 token 有問題,是這個情境下的設計就是如此。

把這一點和前面三點合起來,「先追蹤」流程的正確形狀就只有一種:

留言觸發
  → 第一則私訊:純文字,請對方回覆
  → 對方回覆(此時同意成立,進入 24 小時窗口)
  → 現在才能查 is_user_follow_business
  → 已追蹤 → 送帶按鈕的獎勵訊息
  → 未追蹤 → 送純文字提醒,請他追蹤後再回覆

對方的那一次回覆,同時解開了兩道限制:按鈕可以送了,追蹤狀態也查得到了。所以整個流程的關鍵不在於怎麼繞過限制,而在於先換到一次回覆。

常見問題

為什麼我的留言自動私訊沒有發出去?

如果失敗集中在非追蹤者、而且訊息帶按鈕,很可能就是這篇講的狀況。其他常見原因還包括留言超過七天、同一則留言已經私訊過、對方的隱私設定擋掉訊息邀請、以及帳號擁有者在 Instagram 設定裡關閉了第三方應用的訊息存取權限。我們在另一篇文章裡拆解過這些層次。

「先追蹤再領取」還能做嗎?

可以,但要改成兩段式:第一則純文字換到一次回覆,第二則才帶按鈕與獎勵。活動文案要把「回覆」這個動作寫得很明確。

可以用程式檢查對方有沒有追蹤嗎?

在對方只留言、還沒傳訊息給你的階段,不行。Meta 的 User Profile API 需要「使用者同意」,而留言不構成同意。等對方回覆你的私訊之後才查得到。

失敗的那些留言可以重來嗎?

通常不行。一則留言只有一次私訊機會,被拒的嘗試也算用掉了。這也是為什麼活動上線前一定要用沒追蹤你的測試帳號跑一次——這個錯誤沒有補救機會,只有預防。

換一家工具會不會比較好?

這是 Meta API 層面的限制,所有工具打的都是同一支端點。真正的差別在於工具有沒有把訊息順序排對、有沒有把這個錯誤歸類成不該重試,以及有沒有把失敗原因如實呈現給你——後面這點尤其值得在評估工具時確認,因為失敗原因一片空白的後台,等於讓你在沒有線索的情況下猜問題。

小結

這次的限制本身並不複雜:互動元件要等關係建立之後才能送。麻煩的地方在於它的失敗模式——不可逆、沒有官方文件、而且錯誤訊息指不出真正的原因。

如果只能記住一件事,我會選這個:在一次性的訊息通道上,第一次嘗試就要是最保守的那一次。純文字、沒有附件、不帶任何可能被拒的元件。把互動留到對方回應之後,因為那一刻你才真正獲得了繼續對話的資格——以及查詢對方狀態的權限。

參考來源