IG 留言自動回覆私訊完整流程:防迴圈三道鎖與平台額度
發佈 2026-09-10 · 更新 2026-09-09 · 閱讀約 6 分鐘 · AI 工作術(法芮可有限公司)
IG 留言關鍵字自動私訊怎麼做?本文從 webhook 訂閱、留言對號、關鍵字比對到私訊加公開回覆拆解完整流程,並給你防無限迴圈的三道鎖、簡繁與全形正規化的實作順序,以及 Meta 私訊窗口與 API 額度的紅線,讓你判斷該自建還是買現成工具。
「在貼文下留言『領取』,我私訊你懶人包」——這種鉤子你一定看過。它背後只有一條技術鏈:Meta 的 webhook 把新留言推到你的伺服器,你比對關鍵字,然後用那則留言的 ID 當收件者發一則私訊,順便在公開留言區回一句。核心程式碼大概兩百行,一個下午寫得完。
真正會把你搞爛的不是那兩百行。是三件事:webhook 重送造成的重複發送與無限迴圈、繁簡與全形讓關鍵字比對漏掉一半、以及 Meta 的私訊窗口與 API 額度規則。我們自己在營運工具站時做過這條流程,第一版上線兩小時就對同一個人連發了四則私訊——原因是我們的 handler 處理太久沒能即時回 200,Meta 判定失敗就重送,而我們沒做冪等。
這篇把整條流程從頭拆到尾:六個步驟、三道鎖、簡繁正規化的正確順序、平台紅線,以及上線前的檢查清單。也會誠實講一句:如果你一個月的目標留言量不到幾百則,自建根本不划算,直接買現成的。
先決定:自建還是買現成工具
市面上 ManyChat、Chatfuel 這類工具做的就是這件事,月費制、依聯絡人數分級(實際級距與價格以官方價格頁為準)。它們最大的價值不是功能,是幫你扛平台規則的變動——Meta 改 API 版本、改權限名稱、改訊息窗口規則時,是它們去改,不是你。
| 項目 | 現成 SaaS | 自建 |
|---|---|---|
| 上線時間 | 當天,不用寫程式 | 1–3 天(含審核等待) |
| 成本結構 | 固定月費,依聯絡人數跳級 | 伺服器費用趨近於零,人力才是成本 |
| 關鍵字彈性 | 多為包含/完全比對,規則有限 | 可自訂正規化、同義詞、模糊比對 |
| 繁簡與全形處理 | 常常做不好,簡體留言容易漏 | 自己控制,可做到接近全命中 |
| 資料落地 | 名單在別人系統裡 | 直接進自家資料庫,可串 CRM |
| 平台規則更新 | 廠商負責 | 你自己盯,壞掉時你自己修 |
建議:單純做「留言送資料」的活動,買現成的;要把名單接進自家系統、要做多層對話分支、或留言量大到月費開始痛,才值得自建。
完整流程:從 webhook 到私訊送出的六個步驟

整條鏈子長這樣。每一步都有一個典型的卡關點,我一併標出來。
- 前置設定。IG 帳號要切成專業帳號(商業或創作者),建立 Meta 開發者 App,取得留言與訊息相關權限並送 App Review。權限名稱依你走哪一套 API(Instagram API with Instagram Login,或透過 Facebook 粉專綁定)而不同,以官方文件為準。最容易漏的是:IG App 裡「設定 → 隱私 → 訊息 → 已連結的工具 → 允許存取訊息」這個開關必須是開的,關著的話 API 全部照回成功,但訊息永遠不會送到。
- 訂閱 webhook。訂閱 Instagram 物件的
comments欄位。你要提供一個 endpoint,GET 用來驗證(回傳hub.challenge),POST 用來收事件。事件本體在entry[].changes[].value,裡面有留言id、text、from.id、from.username、以及貼文的media.id。 - 立刻回 200,工作丟佇列。這是整篇最重要的一句。Meta 沒在短時間內收到 200 就會重送,重送就是重複私訊的來源。正確做法是:收到 → 驗簽 → 寫進佇列 → 馬上回 200,後面的比對與發送全部非同步做。
- 對號。三個 ID 各有用途,不要搞混:
media.id決定「這則貼文有沒有掛活動」(不同貼文可以有不同關鍵字與不同回覆內容);from.id是留言者,用來做冷卻與去重;comment_id是發私訊與公開回覆的收件依據。 - 關鍵字比對。把留言文字丟進正規化管線後再比對(下一節細講)。命中就繼續,沒命中就記一筆 log 結束——這些 miss 的原文是你之後調關鍵字表的唯一素材,一定要留。
- 雙軌送出。私訊走 messages 端點,收件者不是用戶 ID 而是
{"recipient":{"comment_id":"..."}},這叫 private reply。公開回覆走/{comment_id}/replies,回一句「已私訊你囉,記得看訊息邀請 📩」。公開回覆很重要,因為 IG 的訊息邀請常被壓在下面,不講一聲一半的人不會去點。兩個呼叫都要各自記錄成功或失敗,不要包在同一個 try 裡。
防無限迴圈的三道鎖(沒做一定出事)

自動化系統對自己說話是經典災難:你回一則公開留言 → 那則留言觸發 webhook → 又命中關鍵字 → 又回一則。三分鐘就能洗掉整篇貼文,而且是用你自己的帳號洗。三道鎖缺一不可。
第一道:身分鎖(擋自己)
比對 from.id 是否等於自己的 IG 商業帳號 ID,是就直接丟棄。同時只處理 verb 為新增、item 為 comment 的事件——編輯與刪除事件不該觸發發送。這一道擋掉九成的迴圈。
第二道:冪等鎖(擋重送)
用 comment_id 當資料庫 unique key,先寫入、寫入成功才發送。insert 撞到唯一鍵就代表這則處理過了,直接結束。順序不能反過來:先發送再寫入的話,發送成功但寫入失敗就會重發。這一道擋掉 Meta 重送與你自己重啟服務造成的重複。
第三道:流量鎖(擋失控)
三層都要有:同一個 from.id 設冷卻期(例如 10 分鐘內只回一次,擋洗留言的人);單一貼文與全站各設每日發送上限;最外層放一個環境變數控制的全域熔斷開關,出事時不用改 code、不用重新部署就能停。
另外提醒一句:失敗時不要靜靜吞掉。私訊送不出去要記下錯誤碼與原因並送告警,不然你會處在「API 都回 200、名單卻一直少」的狀態,而這種問題通常是別人先發現的。
簡繁與髒字串:命中率的真正瓶頸
很多人以為關鍵字比對就是 text.includes('領取')。實際跑一輪就會發現漏掉一大票:簡體的「领取」、全形的「#領取」、中間插空白的「領 取」、後面黏 emoji 的「領取🎁🎁」、大小寫混雜的英文關鍵字。正規化管線的順序不能亂,建議這樣排:
- Unicode NFKC 正規化——全形字母數字與符號一次轉成半形
- 移除零寬字元、變體選擇器與 emoji
- 統一大小寫(英文關鍵字才不會漏)
- 簡繁統一——用 OpenCC 之類的轉換器,把兩邊都轉成同一種再比
- 去掉所有空白與標點,最後才做比對
幾個轉換器不會幫你處理、必須自己維護同義表的:臺/台、著/着、妳/你、裡/裏,以及注音與諧音的變體。另外務必把「命中的關鍵字」和「原始留言全文」一起存下來,調規則時你會需要。
那要不要直接用 LLM 判斷意圖?我們的做法是混合式:關鍵字先跑,命中就走;沒命中但看起來像有意圖的(有問號、字數超過門檻),再丟給小模型做一次意圖分類。這樣九成以上的留言完全不花 API 成本。要估這條的花費,可以先看 AI token 計費原理與中文成本——中文的 token 消耗比英文高不少,量大時差距很明顯。模型怎麼挑可以參考 ChatGPT、Claude、Gemini 依用途的比較,這種短文本分類任務用最便宜的等級就夠了,不需要旗艦模型。
平台規則與額度:哪些會被擋、哪些會被停權

這一節是自建者最容易踩雷的地方,而且踩下去通常沒有錯誤訊息,只有「怎麼都沒人收到」。
- private reply 是一次性的。每則留言只有一次私訊機會,而且有時效(官方文件標示為留言後數天內,實際天數以文件為準)。留言進來三天你才批次處理,就送不出去了。
- 24 小時訊息窗口。使用者回覆你之後,才開啟標準的 24 小時對話窗口;超過窗口只能用特定的訊息標籤,而且用途受限。所以自動私訊的第一則內容,最好設計成誘導對方回一個字(例如「回覆 1 我馬上給你連結」),把窗口打開再送主要內容。
- 額度不要用猜的。Graph API 的回應標頭會回
X-App-Usage與X-Business-Use-Case-Usage,裡面是目前用量的百分比。把它記進監控,接近上限就退避,不要等到被限流才發現。 - 內容紅線。純連結轟炸、誘導不實互動(要求互相追蹤、假抽獎)、對沒有留言過的人主動私訊——這些都可能導致功能受限或帳號被停。自動化本身不違規,把自動化當作大量推播工具才違規。
- Token 會過期。長效 token 也有期限,要排程續期並在快到期時告警。這是「上線三個月後某天突然全掛」最常見的原因。
上線前檢查清單
- 用小號實際留言測一次,確認私訊真的出現在對方手機上(不是只看 API 回 200)
- 故意用簡體、全形、加 emoji、中間插空白各留一次,確認四種都命中
- 把自己的官方帳號拿去留言一次,確認身分鎖擋住、沒有引發迴圈
- 同一個 comment_id 手動重送兩次 webhook,確認只發一則私訊
- 把熔斷開關關掉再打開,確認真的停得下來、也開得回來
- 部署後 10 分鐘看一次錯誤 log 的新增筆數,不是只看畫面正常
最後補一個常被忽略的事實:這整套的天花板是留言量,而留言量幾乎完全由內容決定。我們自己做剪片產品時很有感——同樣一套自動回覆流程,掛在一支有人看的短影音上和掛在一支沒人看的貼文上,結果差了幾十倍。如果你卡在「內容產能不夠、沒東西可以掛鉤子」,可以看看 AI 自動剪片把口播影片的產出速度拉起來,或到 AI 工具箱找適合的輔助工具。技術鏈修得再漂亮,沒有流量進來就只是一台空轉的機器。
常見問題
Q:一定要商業帳號才能做自動私訊嗎?
是的。個人帳號無法透過 API 存取留言與訊息,必須切換成專業帳號(商業或創作者)。切換是免費的,在 IG 設定裡幾秒鐘就能完成,而且不影響現有粉絲與貼文。
Q:API 回傳成功,但對方說沒收到私訊,怎麼查?
先查三件事:IG 設定裡的「允許存取訊息」開關是否被關掉、這則留言是否已經用過那唯一一次 private reply 機會、以及留言時間是否已超過私訊時效。另外私訊會進到對方的「訊息邀請」而不是主收件匣,很多人根本沒看到,所以公開回覆提醒一句非常必要。
Q:自動回覆所有留言會不會被判定成機器人?
會不會被判定,取決於行為模式而不是有沒有用 API。全部回一模一樣的罐頭字、秒回、對非留言者主動發訊,這三種最容易觸發風控。建議做法是準備 3–5 種語意相同的回覆隨機挑、加入幾秒到幾十秒的隨機延遲、並且只回應真的有互動的人。
Q:簡體留言比對不到,是不是要為每個關鍵字準備兩份?
不用。正確做法是在比對前先跑一次簡繁轉換,把留言文字和關鍵字都轉成同一種字體再比,一份關鍵字表就夠。但要另外維護一張小的同義表處理「臺/台」「妳/你」這類轉換器不會動的字,這些在台灣的留言裡出現頻率很高。
Q:公司沒有工程師,還能做這件事嗎?
可以,直接用 ManyChat 這類現成工具,設定介面是拖拉式的,一個下午能上線,價格以官方價格頁為準。等到你需要把名單接進自家 CRM、或月費開始超過自建的人力成本,再考慮自己寫。順序搞反的話,你會花兩週寫一套只服務三十個人的系統。