
Compartir:
Abdul es desarrollador de Vonage. Ha trabajado en productos de consumo como ingeniero de iOS. En su tiempo libre, le gusta andar en bicicleta, escuchar música y asesorar a aquellos que están comenzando su viaje en la tecnología.
Cómo enviar mensajes SMS con Swift, Vapor y Vonage
Introducción
La SMS API de Vonage te permite enviar mensajes de texto mediante programación. Este tutorial explica cómo usar la SMS API de Vonage con Vapor para enviar un SMS.
Requisitos previos
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Xcode 12 y Swift 5 o superior.
El Caja de herramientas Vapor instalada en su máquina.
Crear un proyecto Vapor
Puede crear un proyecto Vapor utilizando el comando nuevo proyecto vapor new SwiftTextMessage en su terminal. Primero le preguntará si desea utilizar Fluent (pulse n para omitir), y luego si desea utilizar Leaf. Leaf es un lenguaje de plantillas que utilizará para generar páginas HTML dinámicas, así que pulse y para incluirlo. Una vez que el comando haya terminado, cambie el directorio a la carpeta que creó para usted usando cd SwiftTextMessage.
También deberás crear un archivo .env para almacenar las credenciales de tu cuenta API de Vonage. En tu terminal, utiliza el siguiente comando para crear el archivo reemplazando X y Y por tu clave y secreto de API, respectivamente:
Ahora puedes abrir el proyecto en Xcode usando vapor xcode. Una vez abierto Xcode, comenzará a descargar las dependencias en las que se basa Vapor utilizando Swift Package Manager (SPM). Para ver las dependencias, puede abrir el archivo Package.swift archivo .
Por defecto, Xcode ejecuta su aplicación desde un directorio local aleatorio. Dado que va a cargar los recursos locales, es necesario establecer un directorio de trabajo personalizado. Vaya a Producto > Esquema > Editar esquema... y establezca el directorio de trabajo en la carpeta raíz de su proyecto.
Setting custom working directory
Pulsa CMD+R para compilar y ejecutar. Una vez completado, busque su página web en localhost:8080.
Crear una página web
Ahora que tu proyecto está configurado, vas a crear una interfaz para introducir un número de teléfono y un mensaje para el SMS. Abra el archivo index.leaf en Recursos/Vistas y actualízalo:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Send a text message</title>
</head>
<body>
<h1>Send a text message using the Vonage SMS API</h1>
#if(status):
<p> Status of the last SMS: #(status)</p>
#endif
<form action="/send" method="post">
<p>
<label>Phone number E.g. 447000000000</label><br>
<input type="text" name="to">
</p>
<p>
<label>Text message</label><br>
<textarea name="text"> </textarea>
</p>
<button type="submit">Send text</button>
</form>
</body>
</html>El código anterior añade un formulario con entradas para un número de teléfono y un mensaje, y una vez enviado el formulario, enviará una solicitud POST solicitud a /send. Fíjate en el bloque Leaf que empieza por #if(status):. Comprueba si hay un valor para la variable de estado y, si lo hay, añadirá la información de estado adicional. Si construyes y ejecutas (CMD + R), ahora verás tu página actualizada.
Creación de estructuras modelo
Una ventaja de usar Vapor es que puedes apoyarte en la seguridad de tipos del lenguaje Swift. Puedes modelar las entradas y salidas a tu servidor usando que se ajusten al protocolo Codable Vapor tiene un protocolo llamado Content para esto.
Crear una estructura llamada Input que se ajuste a Content en la parte inferior del routes.swift archivo:
struct Input: Content {
let to: String
let text: String
let from = "SwiftText"
var apiKey: String?
var apiSecret: String?
private enum CodingKeys: String, CodingKey {
case to
case text
case from
case apiKey = "api_key"
case apiSecret = "api_secret"
}
}La SMS API de Vonage espera campos en mayúsculas y minúsculas, por lo que los structs tienen la propiedad CodingKeys para asignar los nombres de sus propiedades a su equivalente en mayúsculas y minúsculas. Debajo del Input crea otra estructura para la respuesta que espera la SMS API:
struct Response: Content {
let messages: [Messages]
struct Messages: Content {
let status: String
}
} Enviar el SMS
Para enviar el SMS, debes realizar una llamada al punto final /sms de la SMS API de Vonage. Para ello, debes definir la ruta /send utilizada por el formulario web, analizar los datos del formulario y, a continuación, realizar la llamada. Comienza definiendo la nueva ruta en la función routes función:
app.post("send") { req -> EventLoopFuture<View> in
var input = try req.content.decode(Input.self)
input.apiKey = Environment.get("APIKEY")
input.apiSecret = Environment.get("APISECRET")
}Utiliza el cuerpo del formulario para crear una estructura Input struct y, a continuación, se añaden la clave de API y el secreto desde el archivo .env ya que son campos obligatorios de la SMS API. A continuación, utilizarás la Client APIde Vapor, que permite realizar llamadas HTTP externas, para llamar a la SMS API. Añade la llamada a la ruta de envío:
app.post("send") { req -> EventLoopFuture<View> in
var input = try req.content.decode(Input.self)
input.apiKey = Environment.get("APIKEY")
input.apiSecret = Environment.get("APISECRET")
return req.client.post(URI(scheme: "https", host: "rest.nexmo.com", path: "/sms/json")) { req in
try req.content.encode(input, as: .json)
}.flatMap { response -> EventLoopFuture<View> in
let responseBody = try! response.content.decode(Response.self)
return req.view.render("index", ["status": responseBody.messages.first?.status == "0" ? "ok" : "error"])
}
}La llamada a la función client.post tiene un tipo de retorno de EventLoopFuture<ClientResponse>. A continuación, se asigna a un tipo EventLoopFuture<View> que es el tipo de retorno esperado de la ruta. La función map toma la respuesta de la SMS API y crea una variable de estado para que el renderizador de vistas la utilice en el archivo index.leaf archivo.
Pruébelo
Construye y ejecuta (CMD + R) el proyecto, abre localhost:8080 en tu navegador y, a continuación, introduce un número de teléfono y un mensaje.
Index page of the project
Al hacer clic en el botón enviar enviará los datos a la ruta que definiste anteriormente, realizará la llamada a la API de SMS de Vonage y luego volverá a la página inicial con su estado.
Index page with ok status
¿Y ahora qué?
Puede encontrar el proyecto completo en GitHub.
Puedes hacer más cosas con la SMS API, como comprobar si tu servidor ha entregado correctamente un SMS. Más información en nuestra plataforma para desarrolladores.
