設定網絡及網絡偵錯

本文件提供有關設定網絡並為潛在問題除錯的資訊。

WhatsApp Business API 用戶端在連接至 WhatsApp 伺服器方面設有特定的網絡要求。很遺憾,如果您的企業無法執行以下操作,我們便無法支援您的 WhatsApp 整合。

我們明白不同企業擁有不同的網絡配置和安全疑慮。如果您遇到任何特殊連接或安全要求,而此文件不足以助您完成設定,請聯絡直接支援服務

您需要為 WhatsApp Business API 用戶端建立長期有效的 TCP 連接。用戶端會不時提出要求,以確保連線不會處於閒置狀態。不過,您必須確保防火牆、路由器和安全設定等不會終止長期有效的 TCP 連接。

端口

以下兩個端口將用於傳輸對外流量:

  • 5222
  • 443

這兩個端口不會監聽內容或用於傳輸對內流量。您企業的防火牆仍可如常保護用戶端免受對內流量損害。

WhatsApp Business API 用戶端的預設端口為 5222。如果預設端口無法使用,應用程式將退回至端口 443。在應用程式註冊和重新啟動時,至少應開啟 HTTPS 對應的端口 443。您可以關閉端口 5222 並開啟端口 443,但不能開啟端口 5222 而關閉端口 443

建議您同時開啟兩個端口,並允許所有對外流量。

通訊協定

WhatsApp Business API 用戶端會使用以下兩種通訊協定:

  • chatd
  • HTTPS

WhatsApp 專屬聊天通訊協定(名為 chatd)可用於將加密訊息和資訊傳送至 WhatsApp 伺服器及從 WhatsApp 伺服器送出。由於此為專屬通訊協定,您開啟的端口必須列於所有對外流量的許可名單中。部分防火牆和代理會終止非 SSL 連線,這會影響應用程式連接至 WhatsApp 伺服器的能力。

WhatsApp 會在註冊期間和重新啟動時使用 HTTPS。由於您不知道何時需要重新註冊或重新啟動自己的應用程式,我們不建議您在註冊後封鎖 HTTPS

IP 位址

WhatsApp 的伺服器使用一系列 IP 位址。您可以嘗試允許所有的 IP 位址。不過,最佳做法是只允許上述端口的所有對外流量和連線。

WhatsApp 伺服器 IP 位址和範圍(.zip 檔案)
(2022 年 7 月 26 日更新,自 2022 年 7 月 26 日起適用)

此清單可能會經常更改。因此,我們建議您允許所有來自端口 5222443 的對外流量;這樣,每當此許可名單出現變動時,您便無需更新自家網絡中的相應名單。

主機名稱

您可以根據主機名稱而非 IP 位址,將 WhatsApp 伺服器加入許可名單。

以下是 WhatsApp Business API 用戶端需要連接的 WhatsApp 伺服器主機名稱:

  • .*.cdn.whatsapp.net
  • g.whatsapp.net
  • graph.facebook.com
  • graph.whatsapp.com
  • media-.*.cdn.whatsapp.net
  • media..*.fna.whatsapp.net
  • mmg.whatsapp.net
  • pps.whatsapp.net
  • static.whatsapp.net
  • v.whatsapp.net

Docker 容器映像

您還需要允許存取我們在 JFrog 中託管 Docker 容器映像的資料庫,以便下載映像。

由於無法提供 IP 位址,您必須在許可名單中使用 JFrog 主機名稱。

所需的 JFrog 主機名稱為:

  • docker.whatsapp.biz
  • dl.bintray.com
  • akamai.bintray.com

防火牆

視乎您的防火牆和其運作方式,您可能無法只將主機名稱加入許可名單,而是需要將所有 IP 位址加入該名單。

若只將主機名稱加入許可名單,某些防火牆行為將無法運作,以下列出部分例子:

  • 防火牆執行 DNS 查詢操作(根據資料中心內的 DNS 配置),並使用列於許可名單的 IP 位址;
  • 防火牆尋找資料中心內的機器輸出 DNS 查詢,並使用在對許可名單所作回應中列出的 IP 位址;
  • 防火牆尋找 HTTPHTTPS 合作要求中的主機名稱。

如果您的防火牆出現上述任何一項行為,請使用許可名單中的 IP 位址。

代理

配置網路代理時,請將以下環境變數設定為您正在使用的代理,然後將其傳遞至核心應用程式:

  • http_proxy
  • https_proxy

使用 WADebug 測試

WADebug 工具可以快速檢查核心應用程式容器是否有權存取所有必要的 WhatsApp 伺服器。安裝 WADebug 之後,只要運行以下內容:

  wadebug partial check_network