Отправка SMS на Java с помощью Twilio

Отправка SMS на Java с помощью Twilio

1. Вступление

Отправка SMS-сообщений является важной частью многих современных приложений. Существует множество вариантов использования SMS-сообщений: двухфакторная аутентификация, оповещения в реальном времени, чат-роботы и многое другое.

В этом руководстве мы создадим простое приложение Java, которое отправляет SMS-сообщения с использованиемTwilio.

Существует ряд сервисов, которые предоставляют возможности SMS, напримерNexmo,Plivo, AmazonSimple Notification Service (SNS),Zapier и другие.

Используя клиент Twilio Java,we can send an SMS message in just a few lines of code.

2. Настройка Twilio

To get started we’ll need a Twilio account. Они предлагают пробную учетную запись, которой достаточно для тестирования каждой функции их платформы.

В рамках настройки учетной записи мы также должны создать номер телефона. Это важно, потому что пробная учетная запись требует подтвержденного номера телефона для отправки сообщений.

Twilio предлагаетquick setup tutorial для новых учетных записей. После того, как мы завершим настройку учетной записи и подтвердим наш номер телефона, мы можем начать отправлять сообщения.

3. Введение в TwiML

Прежде чем писать пример приложения, давайте кратко рассмотрим формат обмена данными, используемый для сервисов Twilio.

TwiML - это проприетарный язык разметки, основанный на XML. Элементы в сообщении TwiML отражают различные действия, которые мы можем предпринять в отношении телефонии: сделать телефонный звонок, записать сообщение, отправить сообщение и т. Д.

Вот пример сообщения TwiML для отправки SMS:


    
        Sample Twilio SMS
    

И вот еще один пример сообщения TwiML, которое делает телефонный звонок:


    
        415-123-4567
    

Оба эти примера тривиальны, но они дают нам хорошее представление о том, как выглядит TwiML. Он состоит из глаголов и существительных, которые легко запомнить и которые напрямую связаны с действием, которое мы выполняем с телефоном.

4. Отправка SMS на Java с помощью Twilio

Twilio предоставляет богатый Java-клиент, который упрощает взаимодействие с их сервисами. Instead of having to write code that builds TwiML messages from scratch, we can use an out-of-the-box Java client.

4.1. зависимости

Мы можем загрузить зависимость напрямую изMaven Central или добавив следующую запись в наш файлpom.xml:


    com.twilio.sdk
    twilio
    7.20.0

4.2. Отправка смс

Для начала рассмотрим пример кода:

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
Message message = Message.creator(
    new PhoneNumber("+12225559999"),
    new PhoneNumber(TWILIO_NUMBER),
    "Sample Twilio SMS using Java")
.create();

Давайте разберем код в приведенном выше примере на ключевые части:

  • ВызовTwilio.init() требуется один раз для настройки среды Twilio с нашим уникальным идентификатором учетной записи и токеном.

  • ОбъектMessage - это Java-эквивалент элемента TwiML<Message>, который мы видели ранее.

  • Message.creator() требует 3 параметра: на номер телефона, с номера телефона и тело сообщения.

  • Методcreate() обрабатывает отправку сообщения

4.3. Отправка MMS

The Twilio API also supports sending multimedia messages. Мы можем смешивать и сопоставлять текст и изображения, чтобы это работало, принимающий телефон должен поддерживать обмен мультимедийными сообщениями:

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
Message message = Message.creator(
    new PhoneNumber("+12225559999"),
    new PhoneNumber(TWILIO_NUMBER),
    "Sample Twilio MMS using Java")
.setMediaUrl(
    Promoter.listOfOne(URI.create("http://www.domain.com/image.png")))
.create();

5. Статус сообщения отслеживания

В предыдущих примерах мы не проверяли, действительно ли сообщение было доставлено. ОднакоTwilio provides a mechanism for us to determine whether a message was successfully delivered or not.

5.1. Коды состояния сообщения

При отправке сообщения оно всегда будет иметь один из статусов:

  • Queued - Twilio получил сообщение и поставил его в очередь для доставки

  • Sending - сервер в процессе отправки вашего сообщения ближайшему восходящему поставщику услуг в сети.

  • Sent - сообщение было успешно принято ближайшим оператором восходящего направления

  • Delivered - Twilio получил подтверждение доставки сообщения от восходящего оператора связи и, возможно, с телефона-получателя, если он доступен

  • Failed - сообщение не может быть отправлено

  • Undelivered - сервер получил квитанцию ​​о доставке, указывающую, что сообщение не было доставлено

Обратите внимание, что для последних двух статусов мы можем найти код ошибки с более подробной информацией, которая поможет нам решить проблемы с доставкой.

Клиент Twilio Java предлагает синхронные и асинхронные методы для получения статуса. Давайте посмотрим.

5.2. Проверка статуса доставки (синхронно)

Создав объектMessage, мы можем вызватьMessage.getStatus(), чтобы узнать, в каком статусе он сейчас находится:

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
ResourceSet messages = Message.reader().read();
for (Message message : messages) {
    System.out.println(message.getSid() + " : " + message.getStatus());
}

Обратите внимание, чтоMessage.reader().read() выполняет удаленный вызов API, поэтому используйте его с осторожностью. By default, it returns all messages we’ve sent, но мы можем фильтровать возвращенные сообщения по номерам телефонов или диапазону дат.

5.3. Проверка статуса доставки (асинхронно)

Поскольку получение статуса сообщения требует удаленного вызова API, это может занять много времени. Чтобы избежать блокировки текущего потока, Java-клиент Twilio также предоставляет асинхронную версиюMessage.getStatus().read().

Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
ListenableFuture> future = Message.reader().readAsync();
Futures.addCallback(
    future,
    new FutureCallback>() {
        public void onSuccess(ResourceSet messages) {
            for (Message message : messages) {
                System.out.println(message.getSid() + " : " + message.getStatus());
             }
         }
         public void onFailure(Throwable t) {
             System.out.println("Failed to get message status: " + t.getMessage());
         }
     });

Он использует интерфейс GuavaListenableFuture для обработки ответа от Twilio в другом потоке.

6. Заключение

В этой статье мы узнали, как отправлять SMS и MMS с использованием Twilio и Java.

Хотя TwiML является основой всех сообщений на серверы Twilio и с них, Java-клиент Twilio делает отправку сообщений невероятно простой.

И, как всегда, полную кодовую базу для этого примера можно найти в нашемGitHub repository.