使用 WhatsApp Business 开放平台,可轻松向客户发送 WhatsApp 消息并自动回复。在本文中,我们将探讨使用由 Meta 托管的云端 API 进行身份验证。
首先,我们将生成并使用一个临时访问口令,然后将其换为永久访问口令。本教程假设您正在构建一个服务器端应用程序,且无需采取额外措施来安全存储您的 WhatsApp 应用程序密钥。
我们先来看一下如何管理授权口令和安全访问此 API。
先确保您在 Meta 开发者上拥有开发者帐户。其次,还需要在移动设备上安装 WhatsApp,用以接收发出的测试消息。
您需要一个应用程序来验证自己的身份,然后才能执行身份验证。
登录后,您便会看到 Meta 开发者应用面板。首先,点击“创建应用”。
接下来,需要选择一种应用类型。选择“业务”。
然后,输入应用程序的显示名。如果您拥有可关联应用的业务帐户,请选择此帐户。如果没有,不必担心。Meta 开发者平台创建了一个测试业务帐户,可供您用于测试此 API。完成后,点击“创建应用”。
然后,需要将产品添加到应用中。向下滚动,直到看见“WhatsApp”,点击“设置”按钮:
最后,选择一个现有 Meta 业务帐户或请求平台新建一个帐户,然后点击“继续”:
如此,您的应用便已创建就绪,可供使用了。系统将自动跳转至此应用的面板。
请注意,您有一个临时访问口令。出于安全考虑,此口令将在 24 小时以内过期。但是,您现在可使用此口令测试对 API 的访问。我们稍后将介绍如何生成永久访问口令,以供您的服务器端应用程序使用。另请注意应用的电话号码编号,因为您很快就会用到。
点击“收信人”字段下的下拉列表,然后点击“管理电话号码清单”。
在出现的弹出式窗口中,输入要接收测试消息的 WhatsApp 帐户的电话号码。
然后,在面板页面继续向下滚动,您会看到一个类似下方所示的 curl 调用示例:
curl -i -X POST https://graph.facebook.com/v13.0/<YOUR PHONE NUMBER ID>/messages -H 'Authorization: Bearer <YOUR ACCESS TOKEN>' -H 'Content-Type: application/json' -d '{ "messaging_product": "whatsapp", "to": "<PHONE NUMBER TO MESSAGE>", "type": "template", "template": { "name": "hello_world", \"language\": { \"code\": \"en_US\" } } }'
请注意,Meta 开发者平台插入的是您应用的电话号码编号和访问口令,而不是上方显示的 <YOUR PHONE NUMBER ID> 和 <YOUR ACCESS TOKEN> 占位符。如果您安装了 curl
,请将命令粘贴到您的终端,并运行。您应会在测试设备的 WhatsApp 中收到一条内容为“hello world”的消息。
如果您愿意,可将 curl 请求转换为您所用编程语言的 HTTP 请求,只需创建一个 POST 请求,按以上方式设置授权和内容类型的标头,并在请求正文中加入 JSON 负载即可。
由于本帖子与身份验证有关,我们将着重讲述这一点。请注意,您在授权标头中加入了应用的访问口令。对于向此 API 发出的任何请求,您必须将授权标头设置为 Bearer <YOUR ACCESS TOKEN>
。
切记,您必须使用自己的口令,而不是占位符。如果您之前使用过 JWT 或 OAuth2 口令,那应该能够熟练使用 bearer 口令。如果您从未接触过 bearer 口令,不妨借此了解一下,此口令本质上是一个随机密钥字符串,您作为此口令的持有者,可以向此 API 出示此口令,以证明您有权进行访问。
如果未包含此标头,将导致此 API 返回一个 401 未授权响应代码。
了解您需要在 HTTP 请求的授权标头中使用 bearer 口令很有帮助,但还不够。到目前为止,您看到的唯一访问口令是临时的。您可能希望自己的应用能访问此 API 长达 24 小时以上,因此您需要生成一个有效期更长的访问口令。
幸运的是,Meta 开发者平台可轻松满足这一需求。您只需在自己的业务帐户中添加系统用户以获取访问口令,即可继续访问此 API。要创建系统用户,请执行以下操作:
前往业务设置。
您的访问口令是一个由字母和数字组成的随机字符串。现在,尝试使用刚创建的口令(而不是临时口令),重新运行之前的请求:
curl -i -X POST https://graph.facebook.com/v13.0/<YOUR PHONE NUMBER ID>/messages -H 'Authorization: Bearer <YOUR ACCESS TOKEN>' -H 'Content-Type: application/json' -d '{ "messaging_product": "whatsapp", "to": "<PHONE NUMBER TO MESSAGE>", "type": "template", "template": { "name": "hello_world", \"language\": { \"code\": \"en_US\" } } }'
您的测试设备应该会收到通过此 API 发送的第二条问好消息。
务必牢记,永远不要在移动或桌面应用程序中嵌入应用访问口令。这些口令仅用于与此 API 通信的服务器端应用程序。请像保护任何其他应用程序密钥(如您的数据库凭据)一样保护它们,因为任何拥有这些口令的用户都能以您的企业身份访问此 API。
如果您的应用在 AWS、Azure、GCP 等云端服务提供方平台上运行,这些平台拥有各种工具可安全存储应用密钥。您还可以选择免费提供的密钥存储方式,如 Vault 或 Conjur。尽管这些选择方案可能都适合您,但务必先进行评估,再选择最适合您设置的方案。至少,要考虑将访问口令存储在环境变量中,而不是存储在数据库或文件中,否则在数据泄露期间,这些口令很容易被找到。
在本文中,您已了解如何创建可利用 WhatsApp Business 开放平台的 Meta 开发者应用。您现在已知道云端 API 的 bearer 访问口令的工作原理、如何使用 HTTP 授权标头发送访问口令以及在发送无效访问口令时会发生什么。您还了解了保持访问口令安全的重要性,因为访问口令会允许应用程序访问企业的 WhatsApp 消息功能。
如果您正在考虑为自己的企业构建一个应用以管理 WhatsApp 消息功能,为何不尝试使用由 Meta 托管的云端 API?在知道如何获取和使用访问口令后,您就可以使用这些口令访问此 API 中的任何端点了。