我们将弃用本地 API。请参阅我们的本地 API 弃用文档,了解弃用详情以及如何迁移到我们的下一代云端 API。
请访问 WhatsApp Business 开放平台状态页面,了解开放平台中断情况的最新信息。
对于在自己控制的服务器上管理 API 端点的 Business API 用户,WhatsApp 在与其通信时会进行端到端加密,因为第三方对端点间的内容无访问权限。
而部分组织可能会选择将其 WhatsApp Business API 端点的管理权限委派给第三方业务解决方案提供商。在此类情况下,通信仍会使用相同的 Signal 协议加密。但是,WhatsApp Business API 用户已选择由第三方来管理其端点,因此 WhatsApp 将不会对此类通信消息进行端到端加密。到 2021 年,此做法也将适用于选择使用由 Facebook 托管的 API 云管理版本的商家。
此外,如果您在向 WhatsApp Business API 客户端发出调用时使用 HTTPS,则系统会对该数据进行 SSL 加密处理(从后端客户端到 WhatsApp Business API 客户端)。
更多详情请参阅我们的“WhatsApp 加密概览”技术白皮书。
不可以,您只能为每个实例运行一个单个帐户。如果您需要第二个测试帐户,请务必对第二个实例使用不同的数字。
不可以!不管在任何时候,一个手机号都只能运行一个 WhatsApp Business API 客户端实例。一旦您注册第二个实例,第一个实例便会遭到关闭并失效。我们正在开发妥善的解决方案以支持您实现此操作。如果有任何进展,我们会及时通知您。
WhatsApp Business 本地 API 客户端需要使用数据库来存储密钥,以解密企业和客户之间发送的消息。WhatsApp 上的所有消息都使用发送者和接收者密钥作加密处理。客户密钥存储在客户的移动设备中,而企业密钥则存储在企业的数据库中。请参阅 WhatsApp 的安全性获取更多信息。
WhatsApp Business 云端 API 是 Meta 托管企业数据库的替代方案。通过使用云端 API,您可以直接实施 WhatsApp Business API,省去使用自己的服务器托管的费用。详细了解。
否,目前无法在同一个 WhatsApp Business API 客户端设置中使用多个号码。我们正在开发妥善的解决方案以便未来支持您实现此操作。
否。WhatsApp Business API 客户端会开放指向 WhatsApp 服务器上 5222 或 443 端口的出站 TCP 连接。此长期连接会产生 TCP 流量。通常,防火墙将此类流量分类为允许的“出站流量和已确定的流量”。当然,连接建立后,数据包便会在其中来回传输,但由于该连接从 WhatsApp Business API 客户端中建立,因此无需制定允许入站连接的规则。
相关要求取决于您的负载和具体情况。该解决方案可在任何运行 Docker 的联网机器上运行。例如,可以在笔记本电脑上进行简单测试。
对于单一实例生产服务器配置,我们建议至少使用 250 GB SSD、16GB RAM 和 4 核 CPU。不建议使用 HDD,因为 I/O 速度在承受负载时会变成瓶颈。
对于单一实例生产服务器配置,我们建议至少针对每个核心应用/主/网页应用容器使用 50 GB SSD、4 GB RAM 和 2 核 CPU。
大多数情况下,您应该在与核心和网页容器分离的物理服务器上运行数据库。数据库服务器与计算机之间应该只有几毫秒的延迟。
此设置支持每秒发送约 20 条消息。
您需要使用 MySQL 5.7.x、PostgreSQL 9.5.x、9.6.x、10.x。使用之前的版本会造成 Unable to initialize config store
错误。
请遵循 Docker MySQL 指南,使用 Docker 设置本地 MySQL。
请按照 Docker PostgreSQL 指南,使用 Docker 设置本地 PostgreSQL。
大多数情况下,您应该在与核心和网页容器分离的物理服务器上运行数据库。数据库服务器与计算机之间应该只有几毫秒的延迟。
没有,我们不支持 KOPS。但我们支持基于 ECS 的 AWS 解决方案。同时也提供了一份通用的 Kubernetes minikube 设置指南。
WhatsApp 支持 MySQL 和 PostgreSQL。如果您自己运行 Docker,则必须为要连接的容器提供 MySQL/PostgreSQL 数据库。使用 AWS 模板将默认设置 MySQL 数据库。
不可以。WhatsApp Business API 客户端目前无法在 Docker for Windows 上运行。如果有开发需要,我们建议您使用 Linux 虚拟机,在该虚拟机中运行 Docker。至于生产工作负载,我们建议您使用 Linux Server,以避免兼容和性能问题。
您可以通过运行以下代码重启 Docker 容器:
docker restart wacore<Current_WABA_Version>
docker restart webapp<Current_WABA_Version>
您可以查看自己正在运行哪个版本
docker ps
是,网页应用容器和核心应用容器的日志轮转行为略有不同:
以下是可在外部触发的脚本,其可清除容器的旧日志:
docker exec CONTAINER_NAME /opt/whatsapp/bin/cleanup.sh
该脚本既适用于网页应用容器,也适用于核心应用容器。运行脚本后,系统会移除旧的日志文件,仅保留容器中最近 30 天的日志文件。
随着存储空间逐渐变满,您的系统运行速度或会开始变慢。这可能是因为多媒体素材文件、消息和大型日志文件过多。系统会自动轮转日志文件,但如果日志文件开始变大,将其删除也不会造成安全问题。
系统会将消息存储在数据库中。您可在必要时删除消息。此外,如果在应用程序设置中将 pass_through
设置为 false,则在遭到明确删除前,所有消息都将保存在本地数据中。
系统会将用户发给您的多媒体素材文件下载至多媒体素材卷。删除哪些多媒体素材文件由公司决定,但通常情况下,删除任何多媒体素材文件都不会造成安全问题。您可以使用 docker inspect your-container-id
来查看多媒体素材卷文件夹的所在位置。
可以,您可以在不接触 WhatsApp 相关表格的情况下,将数据库用于其他用途。
数据库表格会存储应用设置、聊天线程、信息和多媒体素材等应用运行所需的相关信息。
数据库垃圾回收会定期清理 messages
和 messages_reciept_log
表格,以协助数据库管理。
垃圾回收器会保留某些消息,以允许消息成功发送/得以处理。例如,保留在特定时间段内传入的消息可支持业务集成工具将消息标记为已读。
核心应用会以随机的时间间隔执行垃圾回收(例如,每几个小时执行一次)。这样做是为了防止在高可用性堆栈中由于数据库争用而可能出现的性能退化。
垃圾回收与回调队列无关。例如,如果 Webhook 服务器持续 4 天不可用,则会存储回调,以在 Webhook 服务器连接恢复时发送回调。
使用数据库垃圾回收 services
API 端点即可清除 messageStore.messages
和 messageStore.messages_receipt_log
表格中的消息和相应消息回执。
如果您备份当前设置,并在新设备上将其还原,则注册信息应和其余实现一起迁移到新设备中。详情请参阅“备份和恢复设置”文档。
通过 users
端点注销用户可使分配给该帐户的身份验证口令无效。此外,删除用户也有相同的作用,虽然这种做法比较极端。请谨记,通过 users
端点登录用户会返回新的身份验证口令,但并不会使该用户已在使用的身份验证口令无效。任何拥有之前预分配口令的用户均可继续使用该口令,直至口令过期,或通过上述某种方法使其无效为止。
注意:请勿使用 WhatsApp Business API 向同一位收信人重复发送相同消息。
送达率不是 100% 可能有很多原因。其中一些常见情况包括:用户的网络断断续续、用户在一段时间内没有任何活动,或为建立 优质用户体验。
可以通过 WhatsApp 送达的消息会有非常高的送达率。但也存在很多原因可能导致消息送达失败。您可以通过监控回调,了解消息的确切状态。这与通过短信发送消息不同,例如,对于短信,您无法访问最终的送达状态,而再次发送消息可能确实会产生不同的成效。
消息未能成功送达的原因可能是用户的手机停机、没电,或者用户的手机遗失,并在更换新手机时弃用了 SIM 卡。也有可能是公司的客户端出错,因而无法连接到网络,或者是因为回调 (Webhook) 没有送达。您可使用 health
节点监控这些状况。您可以开启服务器接收回调,以便在消息进入 WhatsApp 服务器云时收到通知。
当用户重新连接到网络时,您之前发送的所有消息都会送达给用户。对用户而言,收到多条内容相同的消息会是非常糟糕的体验。因此,用户很可能会将您拉黑或者投诉您。您可能会遭到禁言。
如果您在发送消息后收到 API 发送的消息 ID,则说明您已经完成对此消息的发送。请勿向同一个收信人重复发送相同内容。
如果您发现送达率长期偏低,请提交支持工单至 站内支持。
在发送消息时,只要您获得了消息编号,便意味着系统已将该消息请求存储在数据库中。WhatsApp Business API 客户端会不断尝试发送该消息,直至收到 WhatsApp 服务器的确认为止。这一过程没有结束期限。然后 WhatsApp 服务器会尝试将该消息发送至用户的手机。如果用户的手机不在线,则消息将在 WhatsApp 服务器中存储 30 天,然后失效。
当然可以!请联系您的 WhatsApp 代表,提出此申请。
不能,我们无法保证消息的接收顺序与发送顺序相同。如果排序对您的用例十分重要,我们建议您在侦听到第一条消息的已发送回调后,再触发第二条消息。
If there is a delay in a subset of numbers, then it is likely not an issue affecting the customers integration but rather an issue on the recipients end, these delays in delivery can happen for a number of reasons. See Send Message Performance, Delays for more information.
No this is not possible. Numbers that are registered under WABAs (WhatsApp Business Accounts) can only message regular WhatsApp accounts.
我们并未针对出站或入站的多媒体素材设置清理机制。您可在文件系统中找到这些多媒体素材文件,然后将其手动删除。
如要寻找多媒体素材卷的挂载点,则可运行 Docker 命令。
docker volume inspect whatsappMedia
[ { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/whatsappMedia/_data", "Name": "whatsappMedia", "Options": {}, "Scope": "local" } ]
然后,您可在已接收的 Mountpoint
文件路径中运行 ls
命令,以查看全部入站多媒体素材文件:
ls /var/lib/docker/volumes/whatsappMedia/_data/
如要设置 AWS,您可将多媒体素材卷挂载到主机上的 /mnt/wa/media
路径中。
上传文件大小不能超过 64 MB,也就是说,此限制同样适用于随消息一起发送的任何图片、文档或视频。
删除多媒体素材的时间由您决定。
上传多媒体素材后,您将收到一个多媒体素材编号,您可以使用此编号发送包含已上传多媒体素材元素的消息。发送多媒体素材消息后,WhatsApp Business API 会将多媒体素材解码并上传至 WhatsApp 服务器,该素材会在服务器中留存 14 天。此时,您可以决定是要提供多媒体素材编号以删除该素材,还是保留素材,以备日后使用。您可以根据贵公司的政策或用例自行决定多媒体素材的保留时间,我们的建议是保留 30 天。
如果是图片,则您可将说明文字添加为图片描述。在 Android 和 iPhone 手机上,系统均可显示图片说明文字的完整文本。
如果是文档,则说明文字会取代文件名。系统不会在用户设备上将其显示为描述文本,而是会将其显示为文件名称。iPhone 手机会显示全部文本,而 Android 手机会截取文件名称,这是当前 WhatsApp 在这两种设备上的实现所受到的技术限制所致。
以相册的形式从 WhatsApp Business API 中发送图片时,您需要至少连续发送 4 张图片。如果在接收图片时,用户的对话视图正处于活动状态,则在下次访问时才可使用相册视图。
如果符合以下任何条件,则无法创建相册:
没有,目前我们必须使用 AWS EFS 才能在核心应用和网页应用之间共享媒体卷。
不可以,目前我们不支持改变媒体存储的默认路径 (/usr/local/wamedia/)。所有媒体需存储在默认位置下才能正常工作。
目前需要 7 天时间。如果 7 天后缓存仍未更新,则无论包中是否已存在相应元素,系统均会从服务器上下载最新的语言包。
WhatsApp Business API 客户端通过核心应用容器向您发送 Webhook 回调。因此,您需要对 Webhook 端点进行配置,使其接受核心应用发出的入站请求。
如果 Webhook 未能发送回调,系统则会将其置入重试队列中。系统无法接收在初始回调失败后发出的任何回调。仅在失败的初始回调发送成功后,系统才可接收其余回调。
如果 Webhook 事件由于任何原因未完成投放(例如客户端处于离线状态),或 Webhook 请求返回 HTTP 状态代码而非 200
代码,我们将重新尝试投放 Webhook。我们将继续重新尝试投放,并将延迟时间增加到特定超时(一般为 24 小时,但也可能有所变化),或直到投放成功。
为了确保消息至少能被接收一次(而非恰好一次),用户可能会向 WhatsApp Webhook 发送重复消息。如果这种做法影响了您这一端的消息处理,我们建议您根据消息编号删除重复的 Webhook 消息。
仔细检查 pass_through
应用程序设置。如果您已在 WhatsApp Business API 客户端 v2.29.1
或更高版本中启用 pass_through
,将无法接收任何读取状态回调。
如果您想接收读取状态回调,请禁用 pass_through
应用程序设置。请注意,禁用 pass_through
后,数据库存储空间会快速增加。如需有关管理数据库的详细信息,请参阅数据库管理文档。
此错误由旧版 iOS 客户端中的一个漏洞引起。我们预计随着客户端的总体升级,此类错误会逐渐减少。
这是个已知问题。有时使用 CloudFormation 脚本升级 WhatsApp Business API 客户端也需要升级 RDS DB 堆栈。新的 RDS 堆栈与最初的堆栈主机名称有所不同,因此 Docker 容器无法连接至数据库。解决方案是使用 SSH 登入由 CloudFormation 创建的 EC2 实例,并使用新的主机名称更新 whatsapp.conf
文件,然后重启 Docker 容器,以启用新设置。
当 Docker 桥损坏时,会发生此错误。解决此问题的最佳方法是停用并重启 Docker 服务。您还可以尝试对容器执行 docker restart
命令。
“连接遭拒”错误很可能表示核心应用未在运行。使用 docker ps
查看核心应用是否正在运行。如果其运行,请查看 Docker 日志。核心应用可能无法连接到数据库。确保您的数据库已正确设置。
原因有很多。可能是因为您的核心应用发生故障,或者您的数据库没有正确设置。如果不是这两种情况,请查看核心应用的日志(如果您正在运行多连接,则请查看核心应用的主日志)。如果遇到数据库连接错误,很可能是因为您的数据库连接已用完。请参阅 MySQL 文档或 PostgreSQL 文档,了解关于此错误的更多信息。
我们建议增加数据库连接的数量。1000 个数据库连接应该比较安全,但请您结合实际做出明智的决定。如果错误仍然没有解决,请打开支持请求单。
如果发生此错误,但其声称缺失的必要参数在 json 正文中确有设置,则可能是 json 解析错误。当整个 json 有效负载由于 json 的格式错误而无法解析时,便会出现此错误。请查看参数值中是否存在无效的 json 字符,例如末尾处的回车符。有时在复制参数时会产生额外的空格,这些空格可能包含破坏 json 的字符。
当手机无法读取模板消息时,会出现“structure unavailable”错误。
模板存储在服务器上。当用户使用 messages
节点发送模板消息时,系统仅会将命名空间、语言、元素名称和本地化参数发送至手机,而不会发送整条消息。手机收到这些值后,会试图显示这条消息。
如果显示期间出现任何错误,系统会向回调网址发送 structure unavailable
错误,其中包含收信人和消息编号。命名空间错误、本地化参数不符、元素名称错误等会导致此类错误。
请前往 Facebook 商务管理平台中的“WhatsApp 管理工具”,查看正确的参数数量。再次确认命名空间是否正确无误,而且元素名称存在。
发生此类错误的一个常见原因是没有为所有正在使用的模板创建译文。例如,如果您通常发送 2 个模板,而您为其中一个模板添加了新语言的译文,则请务必也为另一个模板添加该语言的译文。如果计划支持多种语言,则您需要为所有模板提供全部支持语言的译文。
好消息是, structure unavailable
通常源自 messages
API 调用中的错误,可通过更改发送负载来解决。
WhatsApp Business API 客户端的所有组件,自发布之日起,都有 6 个月的有效期。如果您收到此错误,请尽快升级到最新版本。
通常而言,WhatsApp 会进行试验以衡量和了解 WhatsApp Business API 通知对用户体验和整体产品的影响。如果您向其发送信息的用户正在参与此类试验,即使他们已选择接收,也不会收到您的通知。
如果您在设置 AWS 部署时,遇到类似以下内容的错误,请尝试改用不超过 8 个字符的堆栈名称。
国家/地区名称(双字母代码)[AU]:州或省名称(全称)[Some-State]:地点名称(例如,城市)[]:组织名称(例如,公司)[Internet Widgits Pty Ltd]:组织单元名称(例如,部门)[]:常用名(例如服务器 FQDN 或您的姓名)[]:字符串过长,常用名(例如服务器正式域名或您的姓名)长度不得超过 64 个字节 []:错误,生成用于创建 internal-wa-inc-name-LB-123456789.ap-southeast-1.elb.amazonaws.com 的证书请求设备密钥时,出现配置文件中无指定对象的问题
如果未完整填充公司主页,则系统会返回空白的 profile
对象。请升级至 v2.21.4
以解决此问题。
请参阅“商家主页设置”文档,了解关于如何完整填写商家主页的详细信息。
471
错误代码与基于质量的流量限制有关。详情请参阅基于质量的流量限制文档。
以下为消息模板发送端验证错误,及出现此类错误的原因:
template
。详情请参阅媒体消息模板文档。在 v2.29.x
版本之前,可能会因为系统错误而导致传出消息队列数量持续增加。升级至 v2.29.3
可解决此问题。
核心应用将在核心应用容器内检查 /usr/local/waent/data
和 /usr/local/waent/log
目录,以确保系统至少还有 10 MB 存储空间可用,否则核心应用会将此错误视为严重错误。
请检查您的记录和数据目录以确保拥有足够的存储空间。
目前还没有办法做到这一点。如果您无法处理用户通过 WhatsApp 发出的入站响应,我们建议您发送可将其重定向至相应支持渠道的自动回复消息。
您应注册第二个手机号,并启动用于第二个 CloudFormation 堆栈或用于测试的 Docker 实例。如果您有两个使用相同手机号的 WhatsApp Business API 客户端,则服务器会因加密密钥冲突而将您踢出。我们建议您先设置第二个可用于测试非生产实例的环境,然后再在生产客户端上开展任何类型的迁移工作。
贵公司无法在顾客变更其 WhatsApp 手机号时收到通知。在您使用 contacts
节点时,该号码的状态将变为 invalid
。
如果客户的手机号已停用,但客户仍在使用 WhatsApp,则其可以继续使用 WhatsApp,直至运营商重新分配该手机号,或有人再次用其注册为止。
WhatsApp 会谨慎验证给定号码是否属于某台手机。如果用户拥有 WhatsApp 帐户,那便表明他们已确认过此号码,并且后续也没有其他人使用此号码注册 WhatsApp。然而,这并不能保证 SIM 卡所处的实际位置。
另一方面,如果用户的手机丢失或遭窃,则用户也可停用自己的 WhatsApp 帐户。如要进一步了解用户如何停用帐户,请参阅手机丢失与遭窃的常见问题解答。
不可以,WhatsApp Business API 不支持检测是否有多台设备在使用同一个电话号码。
用户可以用文本或多媒体素材文件的形式发送消息负载。
如果是文本,我们确信不会有任何危险。
如果是多媒体素材文件:
auto_download
字段设为空数组。 WhatsApp Business 本地 API 客户端需要使用数据库来存储密钥,以解密企业和客户之间发送的消息。WhatsApp 上的所有消息都使用发送者和接收者密钥作加密处理。客户密钥存储在客户的移动设备中,而企业密钥则存储在企业的数据库中。请参阅 WhatsApp 的安全性获取更多信息。
WhatsApp Business 云端 API 是 Meta 托管企业数据库的替代方案。通过使用云端 API,您可以直接实施 WhatsApp Business API,省去使用自己的服务器托管的费用。详细了解。