使用多點連線擴展 API 用戶端

標準 WhatsApp Business API 用戶端解決方案會在單一 Docker 容器中運作。如果您想分攤負載,讓多個伺服器收發 WhatsApp 訊息,則可同時使用我們的多點連線解決方案。

如要使用多點連線解決方案,您需要先使用現有的高可用性設定。請按照高可用性文件完成設定,然後繼續跟從下方指示操作。

總覽

有了高可用性,您只需有一個 Docker 容器負責從 WhatsApp 伺服器收發訊息。如果訊息流量超過單一 Docker 容器的最大輸送量,則會造成訊息傳送積壓,且將增加訊息傳送延遲時間。為了擴展 WhatsApp Business API 用戶端,多點連線支援橫跨多個 Docker 容器分片擴展負載。目前,我們只支援分片數為 1、2、4、8、16 或 32 的靜態分片。高可用性是多點連線的一個特例,其分片數為 1。

2 個分片的多點連線叢集

在叢集中,有兩個 Coreapp 節點(CoreApp 1CoreApp 3)負責從 WhatsApp 伺服器同時收發訊息。每個訊息只會屬於一個基於收件人編號的分片。

分片

WhatsApp Business API 客戶端會使用分片來執行多點連線。視乎您所設定的分片數量,資料庫將儲存分片配對表,以根據傳送對象編號(或 WhatsApp 用戶名稱)來決定訊息應前往哪個分片。用於確定分片的函數如下:

shard_id = hash(recipient-id) % shard-number

每個分片都會配對至一個正在運作的 Docker 容器(核心應用程式)。網頁應用程式會根據此函數傳回的內容,知道要向哪個 Docker 容器傳送訊息要求。我們建議您設定分片編號 + X 部裝置,以便能夠容忍 X 部裝置故障。

在上方的 2 分片多點連線圖中,訊息根據分片函數導向 CoreApp 1CoreApp 3CoreApp 2 是次要熱節點,但並無與 WhatsApp 伺服器建立的有效連線。我們假設 CoreApp 1 負責取得 shard=0 的訊息,CoreApp 3 負責取得 shard=1 的訊息。如果 CoreApp 1 停止運作,則只有 shard=0 的訊息會受到影響。系統仍會使用 CoreApp 3 收發屬於 shard=1 的訊息。與高可用性類似,Master 1 會偵測 CoreApp 1 的故障情況,並將 shard=0 的流量容錯移轉至 CoreApp 2。此容錯移轉的時間約需 35 秒。

設定多點連線

根據高可用性文件設定叢集後,請使用以下要求來開啟多點連線。

請注意,您需要擁有分片編號以及正在運作的 Coreapp 之 X Docker 容器,方可繼續操作。

多點連線並不能保證高可用性。如要獲得高可用性,請執行多於分片數量的 Coreapp。

要求

POST /v1/account/shards
{
    "cc": "country-code",
    "phone_number": "phone-number",
    "shards": 1 | 2 | 4 | 8 | 16 | 32,
    "pin": "pin",
    "cert": "verified-name-cert-in-base64"
}

參數

名稱描述

cc

此為必要項目。

註冊此 WhatsApp Business API 用戶端時所使用的手機號碼國碼/區碼,格式為字串。例如:"1"

phone_number

此為必要項目。

註冊此 WhatsApp Business API 用戶端時所使用的手機號碼,不連國碼/區碼或加號(+),格式為字串。例如:"6315550000"

shards

此為必要項目。

此為目標分片數量,格式為整數。

選項:12481632

pin

此為選用項目。

用於雙重驗證的現有 6 位數 PIN,格式為字串。例如:"123456"。僅在此帳戶已啟用雙重驗證時需要使用此參數。

cert

此為必要項目。

v2.41.2 引入 cert 參數後,用戶只需提供 cert 參數即可隨時呼叫此 API,而不會導致連結中斷。

填入此欄位後,企業能夠隨時呼叫此端點。在此之前,企業只可在註冊手機號碼後的 7 天內呼叫此端點。


以 Base64 方式編碼的憑證與先前指定的手機號碼連結。


您可以使用企業管理平台獲取此憑證。請參閱複製以 Base64 方式編碼的憑證了解詳情。


備註:

  • 如果您提供的憑證已過期,您的帳戶將會遭停權。
  • 如果您提供錯誤憑證,便會收到錯誤訊息,說明您的用戶端設定已登出。如要設定分片,您需要使用正確的憑證再次呼叫端點。

如果未提供 cert 參數,在您完成手機號碼註冊多於 7 天之後,呼叫此 API 則會導致 API 用戶端連結中斷。

回覆

201 Created   : You successfully changed shard number 
403 Forbidden : You could hit this if server is temporarily unavailable, retry the request should fix it

擷取分片資訊

要求

GET /v1/account/shards

回覆

{
  "account": {
      "shards": number-of-shards 
  }
}

訊息傳送率

請參閱成效:訊息:參考資料

AWS 部署詳細資料

範本網址:

  • Enterprise:https://wa-biz-cfn.s3-us-west-2.amazonaws.com/wa_ent.yml?versionId=Tvb.Sa6uTwmvj1rSbbpKCmEKz2pyxcLG
  • DB:https://wa-biz-cfn.s3-us-west-2.amazonaws.com/wa_ent_db.yml?versionId=3.vthzENa7qUOuZrozcX9hDk9n8.kdTg
  • Lambda:https://wa-biz-cfn.s3-us-west-2.amazonaws.com/wa_ent_lambda.yml?versionId=gqIhZaXkX_NylKaPJMDBlQNk9.Pl_34b
  • Network:https://wa-biz-cfn.s3-us-west-2.amazonaws.com/wa_ent_net.yml?versionId=Y_NczQaJ.4QTAlyedZPir2XF_IAPDpsh

範本可讓您配置需要建立的有效 Coreapp 容器實例的數量。範本可建立一個額外的 Coreapp 容器實例,以在 Coreapp 故障時支援快速切換。

啟用高可用性後,範本會預設為多點連線每個環境類型建立以下數量的實例:

  • 正式版:EC2 實例:3,網站容器:3,Coreapp:3 容器,主節點容器:3
  • 預備階段:EC2 實例:2,網站容器:2,Coreapp 容器:2,主節點容器:2

系統會配置範本,以視乎記憶體使用率自動調整 EC2 實例數量。記憶體使用率會隨著「有效」Coreapp 容器實例數量增加(或減少)而提升(或下降)。因此,當建立更多 Coreapp 實例時,EC2 實例便會相應地自動調整規模。但是,可建立的 EC2 實例最大數量限制如下:

有效 Coreapp 實例 EC2 實例的最大數量

2

3

4

4

8

5

16

8

32

15

RDS 實例數量調整

API 要求頻率和有效 Coreapp 實例數量將決定資料庫的連線數量。若有 8 個有效 Coreapp 實例,而且 API 頻率為每秒 100 則訊息,則需要大約 700 個資料庫連線(若停用 SSL)和 1,200 個資料庫連線(若啟用 SSL)。但是,若有 32 個有效 Coreapp 實例,而且 API 頻率為每秒 250 則訊息,則需要大約 1,700 個資料庫連線。

在目前發佈版本中,我們為 8 個有效 Coreapp 實例(已停用資料庫連線加密)使用 db.m4.2xlarge,並為 32 個有效 Coreapp 實例(已啟用資料庫連線加密)使用 db.m4.4x.large。下表提供相關指引,讓您了解 RDS 實例類別選項以及它能支援的連線數量上限:

RDS 實例 資料庫連線數量上限

db.t2.medium

318

db.t2.large

636

db.t2.xlarge

1272

db.t2.2xlarge

2543

db.r4.large

1212

db.r4.xlarge

2424

db.r4.2xlarge

4848

db.r4.4xlarge

9696

db.r4.10xlarge

19391

db.r4.16xlarge

38783

db.m4.large

636

db.m4.xlarge

1272

db.m4.2xlarge

2543

db.m4.4xlarge

5086

db.m4.10xlarge

12716

db.m4.16xlarge

20345

db.m3.medium

298

db.m3.large

596

db.m3.xlarge

1192

db.m3.2xlarge

2384

配置

  • 範本中設定的有效 Coreapp 實例僅規範已建立 Coreapp 實例的數量。但是,如要啟用相同的實例,則必須使用設定分片(記錄在設定多點連線部分)。分片預設值為 1。
  • 時刻確保 Coreapp 實例數量大於或等於 API 中設定的分片數量。
  • 如要增加分片數量,請按照下列步驟操作:
    • 請使用所需的有效 Coreapp 實例數量建立或更新堆疊。
    • 建立或更新成功後,請使用設定分片來啟用相同數量的有效 Coreapp 實例或分片。
    • 備註:設定分片會使所有 Coreapp 容器實例停止運作並自動重新啟動。執行設定分片後,大約會有 45 秒至 1 分鐘的停機時間。
  • 如要減少分片數量,請按照下列步驟操作:
    • 請使用設定分片來減少相同數量的有效 Coreapp 實例或分片。
    • 所有 Coreapp 實例成功重新啟動後,請以相同數量的有效 Coreapp 實例更新堆疊。
    • 備註:更新堆疊可能會終止目前由分片使用的有效 Coreapp 實例。但是,系統很快便會為該分片分配其他有效 Coreapp 實例。換言之,在此程序中可能會有一段大約 35 秒的額外停機時間。