Twilio
Twilio es una plataforma basada en la nube que permite a los desarrolladores integrar funciones de voz, mensajería, vídeo y correo electrónico en aplicaciones mediante API. Este ejemplo nos permitirá enviar un SMS usando Spring Boot.
Dependencias
Primero debemos crear nuestro proyecto en Spring Boot, puedes utilizar Spring Initializr. Y instalar las siguientes dependencias:
En Gradle:
implementation group: "com.twilio.sdk", name: "twilio", version : "11.3.2"
En maven:
<dependency>
<groupId>com.twilio.sdk</groupId>
<artifactId>twilio</artifactId>
<version>11.3.2</version>
<scope>compile</scope>
</dependency>
Consulta más información de la dependencia aquí: https://mvnrepository.com/artifact/com.twilio.sdk/twilio/11.3.2
Generar token de Twilio
Para poder enviar los mensajes necesitamos estar autenticados en Twilio, para eso debemos colocar las siguientes variables en el application.properties o application.yml:
twilio:
account-sid: ${TWILIO_ACCOUNT_SID}
auth-token: ${TWILIO_AUTH_TOKEN}
phone-number: ${TWILIO_PHONE_NUMBER}
¿De dónde se obtienen esos datos y el token? Fácil, debemos crear una cuenta en Twilio para después ingresar a la Consola en https://console.twilio.com/ y buscar Account Info donde estarán los datos que necesitamos.

Consola de Twilio
Cliente de Twilio
Ahora crearemos una clase para enviar los mensajes:
import com.twilio.Twilio;
import com.twilio.rest.api.v2010.account.Message;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.twilio.type.PhoneNumber;
@Component
public class TwilioService {
@Value("${twilio.account-sid}")
private String accountSid;
@Value("${twilio.auth-token}")
private String authToken;
@Value("${twilio.phone-number}")
private String fromNumber;
public TwilioService(
@Value("${twilio.account-sid}") String accountSid,
@Value("${twilio.auth-token}") String authToken
) {
Twilio.init(accountSid, authToken);
}
public void send(String to, String messageBody) {
try {
Message.creator(
new PhoneNumber(to),
new PhoneNumber(fromNumber),
messageBody
).create();
} catch (Exception e) {
throw new RuntimeException("Error al enviar SMS con Twilio: " + e.getMessage());
}
}
}
Te explico algunos detalles para que lo entiendas todo:
@Component: Define la clase como un Bean de Spring, permitiendo su inyección en otras partes de la app.@Value: Carga de forma segura las credenciales (SID, Token, Número) desde el archivo de configuración.Constructor: EjecutaTwilio.init(), autenticando la aplicación con el servicio en cuanto se crea el objeto.
Enviar mensajes
Primero debemos recibir el body de una petición para saber a quién se le envía el mensaje y qué contendrá, para eso usaremos un DTO:
import lombok.Data;
@Data
public class MessageDto {
private String to;
private String message;
}
@Data: Es una anotación de Lombok que genera automáticamente en tiempo de compilación: Getters y Setters, toString(), equals(), hashCode() y el constructor.
Ahora, para probar el envío de los mensajes SMS crearé un controlador con un método POST para enviar un SMS a un teléfono.
import com.byandrev.sms.config.TwilioService;
import com.byandrev.sms.dto.MessageDto;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/v1/messages")
@RequiredArgsConstructor
public class MessageController {
private final TwilioService twilioService;
@PostMapping("/")
public ResponseEntity<Void> sendMessage(@RequestBody MessageDto data) {
twilioService.send(data.getTo(), data.getMessage());
return new ResponseEntity<>(HttpStatus.CREATED);
}
}
Para probar debemos hacer una petición post a la ruta /api/v1/messages con el siguiente body:
{
"to": "X",
"message": "Hello from Twilio"
}
- En el
tose debe colocar un numero de celular con un prefijo, por ejemplo +57XXXXXXXX;
Repositorio en Github con todo el código: https://github.com/byandrev/twilio-spring-boot