联系人

/v1/contacts

使用 contacts 节点在发送消息之前对用户进行验证以管理您数据库中的 WhatsApp 用户,并使用身份哈希值验证用户的身份。

通过使用 contacts 节点,您可以:

  • 验证您数据库中的电话号码是否属于有效的 WhatsApp 帐号。在向用户发送消息前,您必须确保 statusvalid
  • 获取电话号码的 WhatsApp 编号。发送消息和用户通知都需要 WhatsApp 编号。

自 v2.39.1 开始,messages 节点可直接与电话号码配合使用,而无需先使用 contacts 节点将其转写为 WhatsApp 编号。

我们正在重新调整 contacts 节点的用途,自 v2.43 开始,该节点将不再提供电话号码的状态信息。无论用户是否拥有 WhatsApp 帐户,该节点将始终在响应中为 status 返回 valid,并返回一个 wa_id.

准备工作

您必须向客户提供订阅选项,以便在 WhatsApp 上与您的公司通讯。该订阅流程由您的公司维护。在客户订阅后,使用 contacts 节点来验证注册号码。如需了解更多信息,请参阅了解如何获得用户选择接收 WhatsApp 消息的许可

限制

  • 使用此端点可验证公司数据库中的电话号码是否属于有效的 WhatsApp 帐号
  • 调用此端点的次数不能超过此电话号码所发送消息的数量

政策执行

如果公司滥用此端点,系统将执行以下操作:

  • 如果公司存在疑似滥用行为,系统将通过邮件向商务管理平台中列出的所有管理员发送初始警告
  • 在公司收到警告后,系统将提供七天时间让其整改不当行为
  • 如果七天后公司仍未整改不当调用行为,系统将永久禁用该电话号码

建议

我们建议您在发送消息前检查联系人,但在回复传入的客户消息时则不必检查联系人,因为您可以使用提供的 wa_id 立即作出回复。由于结果已存入缓存,所以不会产生额外成本。

创建

向选择接收消息的用户发送消息之前,请向 /v1/contacts 端点发送 POST 请求,以创建 WhatsApp 帐号用户验证请求。请在调用中加入您想验证的电话号码清单。

示例

POST /v1/contacts
{
  "blocking": "wait" | "no_wait",
  "contacts": [
  	"16315551000",
  	"+1 631 555 1001",
  	"6315551002",
  	"+1 (631) 555-1004",
  	"1-631-555-1005"
  ],
  "force_check": false | true
}

您将收到响应,其中包含所请求号码的当前 status 及其 WhatsApp 编号 (wa_id):

{
  "contacts": [ {
    "wa_id": "16315551000",
    "input": "16315551000",
    "status": "valid"
  },
  {
    "wa_id": "16315551001",
    "input": "+1 631 555 1001",
    "status": "processing" # Only applicable when request is non-blocking
  },
  {
    "input": "6315551002",
    "status": "invalid"
  },
  {
    "input": "+163155588",
    "status": "failed"
  }
}

保存返回 validstatus 的电话号码的 WhatsApp 编号。有效用户即拥有 WhatsApp 帐户的用户。使用 WhatsApp 编号发送消息和通知。

定期重复这些步骤,管理您的有效用户名单。结果会在 WhatsApp Business 本地 API 客户端数据库中缓存 7 天

参数

/v1/contacts 发出的 POST 调用支持以下参数:

名称 描述

blocking

可选。

在返回响应之前,请求是否应等待处理完成。如需了解更多信息,请参阅下方封锁部分。


可能的值:no_wait(默认)、wait

contacts

必要。

您要验证的电话号码列表。


这些号码可以采用任何标准电话号码格式。联系人电话号码的推荐格式是带上加号 (+) 和国家/地区代码。详情请参阅下方电话号码格式部分。

force_check

可选。

是否检查联系人缓存。联系方式通常会缓存 7 天。将 force_check 参数设置为 true 可绕过缓存,以确保执行检查。


可能的值:false(默认)、true

连线

以下连线会连接至此节点:

连线描述

/{user-whatsapp-id}/identity

使用此连线管理用户身份。如需了解更多信息,请参阅了解 WhatsApp Business 的身份更改

屏蔽

blocking 参数的选项有两个:no_waitwait。如果调用中未指定 blocking 参数,则默认为 no_wait

blocking 参数决定请求应该等待(同步)还是不等待(异步)处理完成。

设置描述

no_wait

异步处理电话号码。


响应内容可能包含 status 设置为 processing 的一些号码。如果出现这种情况,我们建议您按照以下步骤操作:

  1. 获取含有标记为 processing 的号码的响应。
  2. 发出另一个检查联系人请求,在其中加入状态为 processing 的号码。
  3. 如果系统在您的新请求中完成处理,您会获得相关号码的正确状态(有效或无效)。
  4. 如果您仍然看到标记为 processing 的号码,请重复步骤 2,直到获得每个号码的状态。

wait

同步处理电话号码。与服务器同步后,您会看到所有联系人的最终状态。此设置使查询块处于等待状态,直到所有号码都检查完毕,才会返回结果。这可能会花费一些时间。

电话号码格式

contacts 请求中的电话号码可以采用任何可拨号的格式。

如果电话号码开头没有加号 (+),系统会以您的 WhatsApp Business 本地 API 客户端注册时所使用的电话号码来确定国家/地区代码,因此与其他国家/地区代码关联的电话号码会失效。

我们推荐的最佳做法是,始终指定电话号码的国家/地区代码,并在国家/地区代码前面明确地使用加号 (+) 作为前缀。

请注意,如果 + 后面的电话号码无效,国家/地区代码仍可使用。建议在使用本地 API 之前验证电话号码,以获得可预测的行为。

下面是一些演示此操作的示例,其中假设用户使用印度电话号码(国家/地区代码为 +91)注册了 WhatsApp Business 本地 API 客户端:

电话号码经过转写的电话号码

"+1-631-555-1002"

"+16315551002"

"6315551002"

"+916315551002"

"1-631-555-1002"

"+9116315551002"

"+1 (516) 283-7151"

"+15162837151"

"+54 9 11 5612-1008"

"+5491156121008"

返回的字段

contacts 响应负载中包含的电话号码数组与请求中发出的具有 inputstatuswa_id 属性的电话号码相同:

名称 描述

input

您使用请求的 contacts 字段发送的值。

status

v2.41 及更低版本

用户的状态


可能的值:

  • processing — 输入信息仍在处理中
  • valid — 有效的 WhatsApp 用户
  • invalid — 无效的 WhatsApp 用户
  • failed — 处理此检查时出错

status

v2.43 及更高版本

用户的状态


可能的值:

  • processing — 输入信息仍在处理中
  • valid — 联系人检查完成,可以处理消息发送进程
  • failed — 处理此检查时出错

wa_id

v2.41 及更低版本

可以用于其他调用的 WhatsApp 用户编号。仅在 statusvalid 时返回

wa_id

v2.43 及更高版本

返回的 WhatsApp 用户编号不一定有效

由于无法保证该值一定有效,所以请避免在后续调用中使用该值。

processing 状态外,您应该还会看到 200 OK 的 HTTP 状态。

如果将模板消息发送到没有 WhatsApp 帐号的电话号码,您将收到一条错误消息,表示“用户无效”,错误代码为 1013

如果响应中存在其他错误,请参阅错误和状态消息以了解更多信息。

封锁联系人

封锁可以被视为一种防御功能,用于阻止不良行为者继续施行有害行为。如要封锁联系人,对方必须在过去 24 小时内向您发过消息。

示例

/v1/contacts/{phone_number}/block 发送 API 调用,其中包含用于描述封锁其他 WhatsApp 帐号原因的 reason 参数。

POST /v1/contacts/+16315551000/block
{
   "reason": "Optional string(0;60). Freeform block reason. Will be used when another WhatsApp account is being blocked"
}

成功的响应将包含 HTTP 状态 200,不含“errors”对象。

失败的响应结果如下:

{   
    "errors": [
        {
            "code": 2048,
            "title": "Not engaged contact",
            "details": "Invalid Request. This contact hasn't engaged with you in the last 24 hrs."
        }
    ]
}

参数

/v1/contacts/{phone_number}/block 发出的 POST 调用支持以下参数:

设置描述

reason

可选。

封锁原因(不限格式)。要封锁其他 WhatsApp 帐号时使用。必须少于 60 个字符。

phone_number

必要。

这些号码可以采用任何标准电话号码格式。联系人电话号码的推荐格式是带上加号 (+) 和国家/地区代码。详情请参阅电话号码格式

解除封锁联系人

发出此调用以解除封锁联系人

示例

/v1/contacts/{phone_number}/unblock 发送API 调用

POST /v1/contacts/+16315551000/unblock

成功的响应将包含 HTTP 状态 200,不含“errors”对象。

失败的响应结果如下:

{   
    "errors": [
        {
            "code": 1009,
            "title": "Parameter value is not valid",
            "details": "Provided WhatsApp ID is not valid. Please provide a valid WhatsApp ID or a phone number with a country code"
        }
    ]
}

参数

/v1/contacts/{phone_number}/unblock 发出的 POST 调用支持以下参数:

设置描述

phone_number

必要。

这些号码可以采用任何标准电话号码格式。联系人电话号码的推荐格式是带上加号 (+) 和国家/地区代码。详情请参阅电话号码格式

黑名单

此部分介绍如何获取被封锁联系人的清单。

示例

/v1/contacts/blocklist 发送 API 调用,以获取封锁联系人的分页清单

GET /v1/contacts/blocklist?limit=10&offset=0

您将收到响应,其中包含黑名单页面以及分页信息

{
   "contacts": [
       {
           "wa_id": "16315551000@s.whatsapp.net"
       }
   ],
   "pagination": {
       "limit": 10,
       "offset": 0,
       "total": 1
   }
}

参数

/v1/contacts/blocklist 发出的 GET 调用支持以下参数:

设置描述

limit

可选。

可接受的范围是 (0;200]。默认值:100。

offset

可选。

默认值:0。

报告

报告可以提供关键信号,以针对不良行为者建立预防性解决方案。如要举报联系人,对方必须在过去 24 小时内向您发过消息。

示例

/v1/contacts/{phone_number}/report 发送 API 调用;如果您要封锁其他 WhatsApp 帐号,其中还会包含 reason 参数。

POST /v1/contacts/+16315551000/block
{
   "reason": "Optional string(0;60). Freeform block reason. Will be used when another WhatsApp account is being blocked",
   "block": "true | false optional boolean with default of false",
   "message_id": "message-id. Optional reported message id"
}

成功的响应将包含 HTTP 状态 200,不含“errors”对象。

失败的响应结果如下:

{  
    "errors": [
        {
            "code": 2048,
            "title": "Not engaged contact",
            "details": "Invalid Request. This contact hasn't engaged with you in the last 24 hrs."
        }
    ]
}

参数

/v1/contacts/{phone_number}/report 发出的 POST 调用支持以下参数:

设置描述

reason

可选。

封锁原因(不限格式)。要封锁其他 WhatsApp 帐号时使用。必须少于 60 个字符。

block

可选。

默认值为 False

是否要同时封锁联系人,还是仅举报对方。

message_id

可选。

要举报的消息编号。如未指定,系统会将最后 5 条消息发送至 WhatsApp。

phone_number

必要。

这些号码可以采用任何标准电话号码格式。联系人电话号码的推荐格式是带上加号 (+) 和国家/地区代码。详情请参阅电话号码格式