網路設定與偵錯

本文件提供設定網路和偵錯潛在問題的相關資訊。

WhatsApp Business API 用戶端必須符合特定網路需求,才能連線至 WhatsApp 伺服器。如果您的企業無法符合以下要求,我們就無法支援 WhatsApp 整合工具。

Facebook 瞭解每家企業有不同的網路配置與安全考量,如果您有任何特殊的連線或安全需求,且在本文件中找不到答案,請聯絡直接支援團隊

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 伺服器,以及接收來自該伺服器的加密訊息和資訊。由於是專屬通訊協定,我們要求您必須將開啟的連接埠新增到所有傳出流量的許可清單中。部分防火牆和 Proxy 會終止非 SSL 連線,導致應用程式無法順利連線至 WhatsApp 伺服器。

WhatsApp 在註冊期間會使用 HTTPS,重新啟動時也必須用到該通訊協定。我們不建議在註冊後封鎖 HTTPS,因為您的應用程式日後可能必須重新註冊或重新啟動。

IP 位址

WhatsApp 伺服器會使用多個 IP 位址,您可以嘗試允許所有 IP 位址。然而,建議您只允許來自上述連接埠的所有傳出流量和網路連線。

WhatsApp 伺服器 IP 位址和範圍(.zip 檔案)
(2022 年 7 月 26 日更新,2022 年 7 月 26 日開始生效)

此清單可能經常變更。因此,建議您允許來自連接埠 5222443 的所有傳出流量,如此便不用在每次有所變更時從網路內更新此許可清單。

主機名稱

您能夠在許可清單上以主機名稱加入 WhatsApp 伺服器,而不是以 IP 位址加入。

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 容器影像。

必須在許可清單上使用 JFrog 的主機名稱,因為系統無法提供 IP 位址。

必要的 JFrog 主機名稱包括:

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

防火牆

視防火牆及其功能而定,只是將主機名稱加入許可清單可能無效,因此您需要在許可清單上加入所有 IP 位址。

只是將主機名稱加入許可清單仍無效的防火牆行為範例包括:

  • 執行 DNS 查詢(針對資料中心所設定的 DNS)並將產生的 IP 用於許可清單的防火牆;
  • 搜尋來自資料中心機器的傳出 DNS 查詢,並將回應中的 IP 位址用於許可清單的防火牆;
  • 搜尋 HTTPHTTPS 交握中主機名稱的防火牆。

假如您的防火牆出現上述其中一項行為,請繼續在許可清單上加入 IP 位址。

Proxy

若要設定網路 Proxy,您可以將下列環境變數設定為正在使用的 Proxy,然後傳遞至核心應用程式:

  • http_proxy
  • https_proxy

使用 WADebug 測試

WADebug 工具可協助快速查看核心應用程式容器是否擁有所有必要 WhatsApp 伺服器的存取權限。只需在安裝 WADebug 後執行:

  wadebug partial check_network