easyCoexistence
登入開始免費試用
Meta Tech Provider

使用 Node.js 傳送及接收 WhatsApp

接收是由路由回應 Meta 的驗證 GET 請求,並接受 POST 請求。傳送則是使用 fetch 呼叫 Cloud API,附上號碼的 phone number id 及存取權杖。不需要我們的 SDK,也無需安裝任何軟件。

2 handlers

用於 Meta 驗證的 GET,以及用於事件的 POST。

24 hours

客戶發出訊息後,可傳送免費文字的 24 小時時限。

131047

在時限外傳送免費文字時回傳的錯誤。

如何在 Node.js 接收訊息?

使用一個包含兩種方法的路由,可在 Express、Fastify、Next 路由處理常式或普通伺服器中運作。

GET 會回應 Meta 的驗證:從查詢讀取 hub.mode、hub.verify_token 及 hub.challenge,將權杖與您的權杖比較,然後以純文字回傳 challenge。以 JSON 回傳是最常見的錯誤,會令端點看似正確,卻永遠收不到任何內容。

POST 會接收事件。立即回應 200,之後才處理。Meta 會重試任何處理緩慢的請求,而在回應前完成工作的處理常式會多次看見同一則訊息。尤其在無伺服器環境,先回應再將工作放入佇列,才能避免冷啟動造成重複處理。

如何傳送?

使用 fetch 呼叫 phone number id 對應的 Cloud API `messages` 端點,並在 bearer 標頭中附上存取權杖。

這件事沒有任何部分是我們專有的,因此請求完全符合 Meta 的官方文件,您不需要學習或受制於任何包裝層。兩個值都在控制台中;如果由助理負責接線,get_api_credentials 會透過 MCP 連接器回傳它們。

請根據時間決定內容。客戶最後一次傳入訊息後 24 小時內,傳送 text 物件。超過時限,則傳送包含已核准範本名稱及語言的 template 物件。只傳送文字的程式碼能通過所有測試,卻會在第一則夜間抵達的訊息上失敗。

無伺服器環境有何不同?

有兩點,而且都與函式在工作完成前結束有關。

回應 200 後繼續處理,無法在函式一回應便立即凍結的情況下運作。請使用平台提供的機制,讓回應後的工作繼續執行;或將負載推送至佇列,再由另一個函式處理。Meta 只需要您快速確認收到,不需要工作當刻完成。

冷啟動也會令回應變慢,帶來更多重試及重複訊息。在這種架構中,按 wamid 訊息 id 去除重複並非可有可無,而是可靠運作的必要條件。

常見錯誤

  • 將 challenge 以 JSON 回傳,而非回傳原始內容。
  • 在回應 200 前先處理工作。無伺服器環境下,函式可能在回應時立即凍結。
  • 略過去除重複。Meta 會按設計重試,重複訊息是正常情況,而非例外。
使用 EasyCoexistence 完成這項設定

在 easycoexistence.com 連接號碼,將 Webhook 目的地設定為您的路由,再從控制台讀取 phone number id 及存取權杖。每個號碼每月 US$ 9 起,用量大時降至 US$ 2,首 7 天免費試用。

常見問題

需要程式庫嗎?

不需要。一個路由及 fetch 已經足夠,而且請求完全符合 Meta 的官方文件。

可在 Vercel 或 Lambda 上運作嗎?

可以,但要注意一般無伺服器限制:先確認收到,再透過佇列或背景機制處理,不要在請求內直接處理。

如何驗證請求確實來自 Meta?

使用您的應用程式密鑰,核對簽名標頭。端點公開後,這項檢查應立即加入。

可以使用 TypeScript 嗎?

可以。我們沒有需要進行型別定義的內容,因為負載屬於 Meta,且由 Meta 提供文件。

繼續閱讀

準備開始嗎?

幾分鐘內設定 WhatsApp Coexistence,而非幾個月。應用程式在手機上仍可繼續運作。

開始免費試用

驗證日期

使用 Node.js 傳送 WhatsApp