返回开发者新闻

Sending Messages via WhatsApp in Your Java Projects

2022年11月7日发布者:Dmitry Vinnik

WhatsApp Business 开放平台是消息解决方案,可为各商家提供广泛支持。此开放平台可提供各种工具,帮助自动回复客户信息或展示待售产品的目录。

借助 Meta 托管的云端 API(Meta 的 WhatsApp Business 开放平台集成),您的应用可以使用 WhatsApp 发送和接收消息,为客户提供富有吸引力的体验。云端 API 还可轻松扩展,以满足业务量扩大时的临时激增需求。

本文将展示如何构建 Java 应用来发送基于文本的简单消息,然后深入探讨如何使用消息模板发送更详细的消息。如需完整的项目代码,请访问 GitHub

入门指南

在本教程中,第一步是在 Visual Studio Code (VS Code) 中创建全新的 Java 项目,并添加通过云端 API 发送消息的功能。

在开始前,请务必先执行以下操作:

完成以上操作后,在 Meta 开发者中创建应用。首先访问 Meta 开发者,点击我的应用。然后,点击创建应用,选择业务作为应用类型。

提供请求的详细信息,包括应用名称和联系邮箱,然后从下拉菜单中选择业务帐户。创建应用后,向下滚动,然后在 WhatsApp 卡片中点击设置,具体如下所示:

这样,您将前往开始页面,其中包含 Java 应用开始发送 WhatsApp 消息所需的所有信息。而且最重要的是,此页面可提供发送第一条测试消息所需的临时访问口令和预填充 cURL 命令。

现在您已在 Meta 开发者面板中创建应用,可以打开 VS Code 创建新的 Java 应用程序。

在 VSCode 中,打开命令面板(Cmd+P 或 Ctrl+Shift+P)并输入“Create Java Project”,创建新的 Java 项目。

您可以选择自己最喜欢的构建工具,也可以不选择任何工具。在本教程中,您不需要使用任何工具,因此无需选择。

然后,按指示为项目选择位置,并为项目命名。这样会生成一些 Java 样板代码,其主要功能是打印“Hello World!”

现在您已设置并拥有所有必需信息,可以修改 Java 样板代码并发送第一条消息了。

发送示例消息

Meta 开发者面板的开始页面上提供 cURL 请求示例,详细说明了需要调用的网址、应提供的标头,以及要添加作为正文的负载的示例。

内置 java.net 项目包提供创建 HTTP 客户端的功能,您可以使用该项目包将此示例转化为 Java 代码。

接下来,构建并发送请求,然后您可以解析响应。

代码如下所示:

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;

public class App
{
   public static void main( String[] args )
   {
       try {
           HttpRequest request = HttpRequest.newBuilder()
               .uri(new URI("https://graph.facebook.com/v13.0/<YOUR PHONE NUMBER ID>/messages"))
               .header("Authorization", "Bearer <YOUR BEARER TOKEN>")
               .header("Content-Type", "application/json")
               .POST(HttpRequest.BodyPublishers.ofString("{ \"messaging_product\": \"whatsapp\", \"recipient_type\": \"individual\", \"to\": \"<TARGET PHONE NUMBER>\", \"type\": \"template\", \"template\": { \"name\": \"hello_world\", \"language\": { \"code\": \"en_US\" } } }"))
               .build();
           HttpClient http = HttpClient.newHttpClient();
           HttpResponse<String> response = http.send(request,BodyHandlers.ofString());
           System.out.println(response.body());
          
       } catch (URISyntaxException | IOException | InterruptedException e) {
           e.printStackTrace();
       }
   }
}

我们仔细分析一下此代码。请注意,您需要将此代码的某些部分替换为您自己的详细信息。这些内容已使用尖括号进行标记,例如:<YOUR PHONE NUMBER ID>。请确保发送消息的目标号码包含国家/地区代码且格式正确

首先,您要使用创建工具创建 HTTP 请求。您要向创建工具提供 URI 和 2 个标头属性。

然后,您要使用 POST 函数,让创建工具知道这是 POST 请求。此外,您还要在此函数中设置负载正文。在这里,您可以复制和粘贴开始页面上提供的负载正文,但是务必转义双引号。

接下来,您要创建新的 HTTP 客户端,以发送请求。 HttpResponse<String> 对象可捕获响应,并提供用于访问响应状态代码和正文等内容的函数。

您可以右键点击 VS Code 中 JAVA 项目标题下的项目,然后点击运行来运行 Java 应用。

如果各项配置正确,则类似于下方示例的 WhatsApp 消息应已发送至目标电话号码。请注意,Meta 提供的示例模板设置了消息内容。

您的示例消息已成功发送,如此一来,您就可以在不使用消息模板的情况下发送简单的文本消息。

为此,您需要回复使用此模板发送的第一条消息。回复的内容并不重要。完成回复后,您可以修改 POST 请求,提供简单的文本消息负载:

.POST(HttpRequest.BodyPublishers.ofString("{ \"messaging_product\": \"whatsapp\", \"recipient_type\": \"individual\", \"to\": \"<TARGET PHONE NUMBER>\", \"type\": \"text\", \"text\": { \"preview_url\": false, \"body\": \"This is an example of a text message\" } }"))

如您所见,类型属性现已更改为文本。此外,模板对象也已替换为指定所需消息的文本对象。

现在,返回应用程序。您将看到第二条 WhatsApp 文本消息送达:

您现在可以使用云端 API 成功发送简单的文本消息了!

创建自己的消息模板并发送消息

接下来,您将创建自己的消息模板,以便发送更丰富的个性化消息,其中会包含图片和行动号召。

在 Meta 开发者面板的开始页面中,第二步展示一个链接,您可以通过该链接创建自己的消息模板。点击此链接,然后点击创建消息模板。首先,选择交易作为消息类别,然后为消息模板命名并选择语言。

开始构建模板:选择图片作为标头,在正文中填写消息,并动态使用参数更改消息内容。

最后,添加页脚行动号召。在本教程中,使用访问网站行动号召,该行动号召允许您提供网址。这样可将行动号召添加到消息底部,如上方图片预览所示。

为确保您的模板可通过审核,请务必保证此模板遵循建议的守则,并且您已提供数据示例。您可以使用页面顶部的添加示例按钮提供数据。

审核流程需要一点时间,在等待时,您可以修改代码,为使用此新模板做准备:

.POST(HttpRequest.BodyPublishers.ofString("{ \"messaging_product\": \"whatsapp\", \"recipient_type\": \"individual\", \"to\": \"<TARGET PHONE NUMBER>\", \"type\": \"template\", \"template\": { \"name\": \"new_customer_offer\", \"language\": { \"code\": \"en\" }, \"components\":[{\"type\":\"header\",\"parameters\":[{\"type\":\"image\",\"image\":{\"link\":\"<YOUR IMAGE URL>\"}}]}, {\"type\":\"body\",\"parameters\":[{\"type\":\"text\",\"text\":\"John Smith\"}]}] } }"))

同样,与第一个示例相似,如要使用新模板,您只需要更改 HTTP 请求创建工具的 POST 部分以及修改请求正文。新模板的区别在于使用了 2 个组件:标头和正文。

在这些组件数组中,先指定标头组件,并声明图片参数。如此一来,您便可为每条消息提供特定图片网址。如果您需要为不同用户受众细分提供不同图片,此功能很实用。

在正文组件中,您应该使用文本替换构建模板时添加的参数占位符 ({{1}})。现在您已完成设置,可以在面板中检查消息模板是否已通过审核。如果消息模板通过审核,您需要再次运行代码。您将看到一条与模板一致的新消息,具体如下所示:

最佳实践

本帖子介绍了使用云端 API 发送简单文本消息和基于模板消息的入门指南基础知识。在生产应用程序中添加云端 API 时,需遵循一些最佳实践。

首先,必须使用消息模板开始商家发起的对话。在发送简单的文本消息时,您会遇到这种情况,这是因为必须发送示例消息模板并回复此消息,才能正常使用此功能。然后,系统会打开对话,以便进一步发消息。

其次,如果您的应用要调用外部服务,请务必使用 HTTP 客户端提供的异步调用。使用 client.sendAsync 可防止主对话被屏蔽,以便应用程序在等待消息发送时可继续执行其他操作。

您还应考虑如何使用云端 API 进行身份验证。您可以创建永久访问口令,也可以通过云端 API 请求访问口令。无论是哪种方法,您都应该保护敏感详细信息的安全,并避免在应用程序中对这些详细信息进行硬编码。

最后,请务必在应用程序中添加错误处理代码。无法发送消息通常是多种因素造成的,因此应用程序应知道如何处理这些问题。Meta 提供了错误代码及其含义的清单,以便您妥善处理错误。您可能想要编写专门代码,用于处理某些常见或可预测错误,并且提供默认功能来处理发生的任何其他错误。建议您记录这些错误供以后分析使用。

后续步骤

本教程展示了如何构建可通过云端 API 发送消息的 Java 应用程序。您已发送基于文本的简单消息,并已使用定制消息模板发送包含图片和行动号召的较为复杂的消息。

云端 API 是易于使用的 REST API,因此可通过 Java 11 内置 HTTP 资源库轻松集成到 Java 应用程序,以便构建和发送 HTTP 请求。添加 Webhooks 后,您构建的应用程序可以近乎实时地发送自动信息,提供更多与用户互动的方式。