使用 Python 傳送及接收 WhatsApp 訊息
接收方式是在您的 Web 架構中建立路由,回應 Meta 的驗證 GET 並接收 POST。傳送方式是向 Cloud API 發出 HTTPS 請求,附上號碼的電話號碼 ID 及存取權杖。不提供我們的 SDK,也無需安裝任何軟件。
用於 Meta 驗證的 GET,以及用於事件的 POST,這就是接收部分。
客戶發出訊息後,可傳送自由文字的 24 小時時限。
在該時限外傳送自由文字時返回的錯誤。
如何在 Python 中接收訊息?
在您現有的任何架構中,於同一路由設定兩個處理程序。
GET 處理程序回應 Meta 的驗證。它從查詢字串讀取 hub.mode、hub.verify_token 及 hub.challenge,核對存取權杖是否與您自己的相符,然後以原始本文返回 challenge。在這裏返回 JSON 是最常見的錯誤,而且會無聲失敗。
POST 處理程序接收事件。請迅速返回 200,之後才處理工作,因為 Meta 會將緩慢回應視為失敗並重試,這可能令您處理同一則訊息兩次。請將訊息加入佇列,或交給背景工作,而不是直接在處理程序中執行。
訊息會附帶 wamid 訊息 ID。從一開始便按此 ID 去重是值得的,因為重試是正常情況,而非例外。
如何傳送?
向電話號碼 ID 對應的 Cloud API `messages` 端點發出一次 POST,並附上 Bearer 存取權杖。
兩項資料都來自連接:控制台會顯示它們;如果您希望由助理代為取得,get_api_credentials 也會返回它們。這個請求沒有任何部分專屬於我們,因此任何 HTTP 程式庫都可使用,而請求格式與 Meta 自己的文件完全一致。
時限會改變本文內容。在客戶最後一則訊息後 24 小時內,您可傳送 `text` 物件。超過時限,則須傳送 `template` 物件,指定已獲批准的範本及其語言。只認識第一種格式的客戶端在測試時運作正常,卻會在第一則隔夜訊息時失敗,返回錯誤 131047。
生產環境的處理程序還需要甚麼?
有 3 件容易跳過、日後卻很難補上的事情。
按訊息 ID 去重,因為 Meta 會重試。如果公開提供服務,請驗證請求簽名,否則任何得知您 URL 的人都可以向它發出 POST。還要根據聯絡人上次發出訊息的時間分流,讓傳送路徑自動選擇文字或範本,無需人手決定。
這些都不需要架構或程式庫。它們只是集合、檢查及比較;在第一位客戶加入前完成設定,便能令整合安靜運行,而不是不斷向您發出警報。
常見錯誤
- 在驗證 GET 中返回 JSON,而非原始 challenge 值。
- 返回 200 前便直接處理。Meta 會重試緩慢回應,令您處理訊息兩次。
- 未檢查時限便傳送自由文字。這會返回 131047,結果看似甚麼也沒有發生。
在 easycoexistence.com 連接號碼,將 Webhook 目的地設為您的路由,然後從控制台讀取電話號碼 ID 及存取權杖。每個號碼每月 US$ 9 起,用量大時降至 US$ 2,首 7 天免費試用。
常見問題
有 Python SDK 嗎?
我們不提供,但您不需要。API 屬於 Meta,由 Meta 提供文件,任何 HTTP 程式庫都可存取。
應該使用哪個架構?
任何架構都可以。要求只是建立能回應 GET 及接收 POST 的路由,所有 Python Web 架構都能做到。
如何避免處理同一則訊息兩次?
按負載中的 wamid 訊息 ID 去重。Meta 設計上會重試,因此這是預期情況,而非邊緣案例。
團隊仍可使用手機嗎?
可以。Coexistence 讓 WhatsApp Business 應用程式繼續使用同一個號碼,而您的處理程序會以回音事件接收他們傳送的內容。
繼續閱讀
準備開始嗎?
幾分鐘內設定 WhatsApp Coexistence,而非幾個月。應用程式在手機上仍可繼續運作。
開始免費試用驗證日期