Sign inGet started

偏好设置

偏好设置是关于某人意愿的声明,记录在其某一渠道的标识上。在 WhatsApp 上,标识是 E.164 格式的电话号码。它与屏蔽是独立的记录,发送前两者都会被检查。
偏好设置通过三种方式到达你的工作区:WhatsApp 报告一条、收件人输入关键词、或你自行录入。你能对每条做什么取决于声明者是谁。

偏好设置包含的内容

声明要么是 revoked(退订),要么是 granted(同意)。
声明还包含覆盖范围,决定它拦截多少流量。non_transactional 覆盖营销及其他非必要消息,而交易类消息(如收据和验证码)不受影响。all 覆盖所有消息。Preferences 选项卡在 Covers 列中将它们显示为 Non-transactionalAll messages
声明可以通过 sender_scope 缩小到单个发送方,在 WhatsApp 上该字段标识商业帐户。如果不指定,声明将覆盖整个工作区的该渠道,包括你之后连接的帐户。
一个人可以在同一渠道上拥有多行记录,例如一条渠道范围的退订和一条发送方范围的退订并存。最严格的声明决定消息是否发出。

Bird 为你记录的偏好设置

当 Bird 收到 Meta 事件表明收件人已停止接收营销消息时,会为该 WhatsApp Business Account 记录一条来源为收件人的偏好设置。该偏好设置覆盖非交易类消息。它不会创建全消息屏蔽,也不会将该人从你工作区中的所有帐户退订。
收件人也可以通过回复 STOP 来声明同样的意愿。该偏好设置的作用域是他们所回复的商业帐户,与上述一致。它覆盖所有消息,因为输入的 STOP 比 WhatsApp 的营销退订范围更广。请参阅关键词规则,了解 Bird 识别哪些关键词以及如何更改回复内容。
之后的恢复事件会更新该帐户的偏好设置。屏蔽和其他适用的偏好设置仍然生效,因此仅凭恢复事件并不能证明可以发送消息。

你录入的偏好设置

打开 Suppressions 页面并切换到 Preferences 选项卡。在该选项卡中选择 Every business account in the workspace 录入一条记录,即可阻止该地址从你持有的所有帐户(包括之后连接的帐户)接收 WhatsApp 消息。
已选择加入或退出的订阅者列表,显示每条声明的覆盖范围
该选项卡上的 Record opt-out 对话框录入的是全消息覆盖范围。
用于记录退出的对话框,已选择工作区范围
如果只需要停止营销消息,请使用工作区范围的 Contacts > Preferences 页面,其对话框同时提供 Marketing messagesAll messages 选项。

通过代码读取偏好设置

GET /v1/preferences 返回工作区已记录的偏好设置,按创建时间从新到旧排列。传入 channel=whatsapp 可缩小到该渠道,再配合 handle 可在发送消息前查询某个号码的所有记录:
for await (const preference of bird.preferences.list({
  channel: "whatsapp",
  handle: "+15550001234",
})) {
  console.log(preference.status, preference.coverage, preference.sender_scope);
}
handle 需要 channel,因为同一标识可能存在于多个渠道上。

通过代码录入偏好设置

POST /v1/preferences 录入一条声明。写入操作是基于渠道、标识和发送方作用域的 upsert,因此新声明会替换该键的当前记录:
const result = await bird.preferences.create({
  channel: "whatsapp",
  handle: "+15550001234",
  status: "revoked",
  coverage: "non_transactional",
});
console.log(result.applied, result.preference?.id);
声明按做出时间排序,而非到达时间。API 会拒绝日期早于该键当前记录的声明,并返回 applied: false 以及留存的声明。被拒绝的声明保留在该键的历史中。
201 表示该键之前没有记录,此声明创建了一条。200 返回该键的留存记录,无论此声明是替换、重复还是被拒绝。

你可以撤销哪些

你录入的偏好设置可以在 Preferences 选项卡中删除,或在收件人要求恢复发送后通过 DELETE /v1/preferences/{preference_id} 删除。
收件人自行做出的声明只有他们自己能撤销。取消订阅或停止关键词在他们重新选择加入时结束,删除操作会返回 422。要在获得其同意后恢复发送,请录入一条携带 consented_at(即同意时刻)的 granted 声明。当该时刻晚于其所撤销的退订时,授权才会生效,因此它记录的是意愿变更,而非擦除原始声明。
删除操作与其他声明一样按接收时间排序。如果记录中包含在该时刻之后做出的声明,删除会被拒绝,并连同留存记录一起以 applied: false 返回。

投递错误先于事件到达时

运营商投递错误可能在 Bird 记录匹配事件之前就报告了停止。请保留收件人的选择,并调查偏好设置和事件历史,而不是将本地缺少记录当作可以发送的许可。

后续步骤

  • 屏蔽:你的工作区直接拦截的地址。
  • 关键词规则:在你的号码上录入偏好设置的关键词。
  • WhatsApp 事件:被拦截的发送所产生的 whatsapp.rejected 载荷。