如何用Spark和Java发送短信(附代码实例)

236 阅读4分钟

Twilio的宗旨是为通信提供动力,并以任何语言方便快捷地进行通信。

Twilio SMS APIJavaSpark框架的帮助下,你可以用一条短信来回应所有收到的短信。本文将帮助你建立一个具有轻量级框架的Spark应用程序,使你在进一步扩展和开发项目时更有成效。

在这篇文章中,你将学习如何浏览Java IDE来设置和建立一个Java Spark应用程序,并向你的移动设备发送短信。

安装ngrok

Ngrok是一个很好的工具,因为它允许你创建一个临时的公共域,将HTTP/S请求重定向到一个本地端口,比如4567 ,或者其他任何东西,比如8080

访问ngrok网站并登录你的账户。下载ngrok zip文件,并按照网站上的指示操作你相应的操作系统。如果你直接将ngrok下载到你的桌面上,那么你会看到桌面工具栏附近的可执行文件图标,如图所示:

ngrok icon on desktop

根据你解压ngrok zip文件的位置,你可能需要在终端输入./ngrok ,而不是ngrok 。如果你是Windows或Linux用户,为了方便起见,看看如何将ngrok设置在你的系统路径中。

继续测试ngrok,然后按Ctrl+C杀死这个进程,继续学习本教程。

在IntelliJ IDEA中启动一个新的Java项目

打开IntelliJ IDEA,点击创建新项目

IntelliJ IDEA home screen

在左手边选择Gradle,在右手边的框中勾选Java

choose gradle option for new java project

给你的项目取个名字,如 "SmsApp",然后点击完成按钮。

项目设置完成后,你的项目目录结构应该如下图所示:

project directory for the build gradle file

在IDE中打开build.gradle文件,在dependencies 块中添加以下几行:

    implementation group: "com.twilio.sdk", name: "twilio", version: "8.0.+"
    implementation group: "com.sparkjava", name: "spark-core", version: "2.9.3"
    implementation group: "org.slf4j", name: "slf4j-simple", version: "1.7.32"

创建SMS应用程序的Java类

展开项目目录根部src文件夹下的main子文件夹。注意到空的java文件夹:

project directory for the java subfolder

Java文件夹上点击右键,点击新建选项。选择Java类,如下图所示。点击这个选项将提示你给这个类起个名字。继续,将其命名为 "SmsApp":

Create a new Java class in Intellij IDEA

复制并粘贴以下代码到新创建的文件中:

import com.twilio.twiml.MessagingResponse;
import com.twilio.twiml.messaging.Body;
import com.twilio.twiml.messaging.Message;
import static spark.Spark.*;

public class SmsApp {
    public static void main(String[] args) {
        get("/", (req, res) -> "Hello World! ✨ It's fun to use sparkly emojis in code!");
        post("/sms", (req, res) -> {
            res.type("application/xml");
            Body body = new Body
                    .Builder("✨ It's fun to send sparkly texts! ✨")
                    .build();
            Message sms = new Message
                    .Builder()
                    .body(body)
                    .build();
            MessagingResponse twiml = new MessagingResponse
                    .Builder()
                    .message(sms)
                    .build();
            return twiml.toXml();
        });
    }
}

要知道,Java类的文件名必须反映文件内的类名。

在公共的SmsApp 类中,调用了一个main 方法,以便程序中的代码一旦执行就开始。

main 方法定义了两个路由:

  • 一个GET路由,/ ,它用一个字符串信息响应所有对根URL"/" 的请求。
  • 一个POST路由,/sms ,用TwiML标记的SMS消息来响应。创建这个Body 对象是为了保存字符串信息。

请随意改变字符串信息,否则,继续保存文件。

运行Java Spark应用程序

在项目界面上右击SmsApp文件,找到*运行 "SmsApp.main() "*的选项。等待几秒钟,让项目构建,下载项目的依赖性,并进行编译。

Spark自动在4567端口运行应用程序,所以在你的网络浏览器中前往http://localhost:4567/,查看字符串信息:

screenshot of the localhost:4567 spark app

用Twilio设置webhook

打开一个新的终端窗口,用下面的命令启动ngrok,以使Java应用程序在互联网上公开可用:

$ ngrok http 4567

image showing the output of running the "ngrok http 8080" command with forwarding URLS

你的ngrok终端将看起来类似于上面的图片。你可以看到,在 "转发 "部分有一些URL。这些是公共的URL,ngrok用来将请求重定向到我们的Java servlet。

注意:请记住,这个URL不再是有效的,这里只是为了演示而提出的。*

你应该能够看到与你在localhost:4567上一样的视图。

复制以https:// 开始的转发URL,并打开Twilio控制台,在那里我们将告诉Twilio用这个URL发送收到的消息通知。

在Twilio控制台,点击左边的侧边栏探索产品,找到电话号码。点击你想在这个项目中使用的活动电话号码,向下滚动到 "消息"。

在那里,将从ngrok会话中复制的URL粘贴到A MESSAGE COMES IN字段中,并附加/sms ,因为那是端点。在你点击保存按钮之前,确保请求方法被设置为HTTP POST

下面是我的例子,供参考。

input the unique ngrok url webhook with a route directing to sms

在你点击 "保存"按钮之前,确保请求方法被设置为HTTP POST

运行Twilio SMS Spark应用程序

向你的移动设备上的Twilio电话号码发送一条短信。等待几秒钟,你应该在你的设备上看到TwiML消息响应。

screenshot of the example SMS interaction between the java spark app and user