Ejemplos de código en Swift para la API SMS de LabsMobile
A continuación se presentan los ejemplos de código de programación en lenguaje Swift para enviar mensajes SMS a través de la API de la plataforma LabsMobile.
Esta documentación está diseñada para que puedas conectar tus aplicaciones con la plataforma LabsMobile y automatizar el envío de mensajes SMS. El principal objetivo de la integración de estas aplicaciones es el envío de mensajes SMS y comunicaciones relacionadas.
Consejo Recomendamos utilizar nuestra API SMS http/POST en formato JSON para cualquier integración con la plataforma LabsMobile. Pero tenemos otras versiones API que puedes utilizar según tu entorno y requisitos.
Con estos ejemplos podrás realizar la integración de las siguientes funcionalidades:
- Enviar mensajes SMS de forma individual o masiva.
- Consultar el saldo de tu cuenta.
- Recibir las notificaciones de confirmaciones de entrega y/o error que corresponden a los mensajes enviados.
- Obtener notificación y datos de los mensajes recibidos en los números virtuales contratados.
A tener en cuenta
La API SMS de LabsMobile utiliza una URL base común para todas las peticiones: https://api.labsmobile.com
.
Es altamente recomendable emplear una URL que incluya el protocolo HTTPS
en cualquier versión de la API.
La autenticación se realiza con el nombre de usuario y un token API, myUsername:myToken
. Debes crear el token API desde la sección Configuración API de tu cuenta.
Enviar SMS con http/POST
Aquí tienes un ejemplo de código en lenguaje Swift para enviar mensajes SMS utilizando la API SMS http/POST que utiliza el formato JSON
para las variables de intercambio de información.
Como puedes observar, necesitas crear una estructura en formato JSON
que contenga todos los parámetros necesarios para el envío y realizar una llamada HTTP/POST
con estos datos en el cuerpo de la solicitud.
import Foundation let username = "myUsername" let password = "myToken" let loginString = "\(username):\(password)" let loginData = loginString.data(using: .utf8)! let base64LoginString = loginData.base64EncodedString(options: []) let headers = [ "Content-Type": "application/json", "Cache-Control": "no-cache" ] let parameters = [ "message": "Your verification code is 123", "tpoa": "Sender", "recipient": [["msisdn": "12015550123"]] ] as [String: Any] do { let postData = try JSONSerialization.data(withJSONObject: parameters) let request = NSMutableURLRequest(url: NSURL(string: "https://api.labsmobile.com/json/send")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization") let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest) { (data, response, error) in if let error = error { print(error) } else { if let httpResponse = response as? HTTPURLResponse { print(httpResponse) } } } dataTask.resume() } catch { print(error) }
import Foundation let username = "myUsername" let password = "myToken" let loginString = "\(username):\(password)" let loginData = loginString.data(using: .utf8)! let base64LoginString = loginData.base64EncodedString(options: []) let headers = [ "Content-Type": "application/json", "Cache-Control": "no-cache" ] let parameters = [ "message": "Don't miss our Sale! Use code XXXX123 for 20% off.", "tpoa": "Sender", "recipient": [["msisdn": "12015550123"], ["msisdn": "12015550124"], ["msisdn": "12015550125"]] ] as [String: Any] do { let postData = try JSONSerialization.data(withJSONObject: parameters) let request = NSMutableURLRequest(url: NSURL(string: "https://api.labsmobile.com/json/send")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization") let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest) { (data, response, error) in if let error = error { print(error) } else { if let httpResponse = response as? HTTPURLResponse { print(httpResponse) } } } dataTask.resume() } catch { print(error) }
{ "subid": "65f33a88ceb3d", "code": "0", "message": "Message has been successfully sent." }
{ "subid": "65f7f7041385d", "code": "35", "message": "The account has no enough credit for this sending" }
Es posible consultar todos los códigos de error en Documentación API, códigos de error.
Para obtener más detalles sobre los parámetros disponibles y las opciones de configuración, consulta la documentación oficial en:
Enviar SMS con http/GET
Este es un ejemplo de código en lenguaje Swift para enviar mensajes SMS utilizando la API SMS http/GET
.
Como podrás observar, debes pasar una serie de variables GET
en la misma URL y realizar una llamada HTTP
. Es importante codificar todos los valores como URL utilizando la función URLComponents()
y URLQueryItem()
.
Importante La API SMS http/GET transmite las credenciales (username y token API) sin cifrar y de forma no segura. Recomendamos utilizar esta API GET
sólo cuando sea totalmente imprescindible y utilizar en su lugar la API SMS http/POST.
import Foundation let username = "myUsername" let password = "myToken" let msisdns = ["12015550123"] let message = "Your verification code is 123" var components = URLComponents(string: "https://api.labsmobile.com/get/send.php")! components.queryItems = [ URLQueryItem(name: "username", value: username), URLQueryItem(name: "password", value: password), URLQueryItem(name: "message", value: message) ] let msisdnsQuery = msisdns.map { msisdn in URLQueryItem(name: "msisdn", value: msisdn) } components.queryItems?.append(contentsOf: msisdnsQuery) var request = URLRequest(url: components.url!) request.httpMethod = "GET" let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data else { print(String(describing: error)) return } print(String(data: data, encoding: .utf8)!) } task.resume()
import Foundation let username = "myUsername" let password = "myToken" let msisdns = ["12015550123","12015550124","12015550125"] let message = "Don't miss our Sale! Use code XXXX123 for 20% off." var components = URLComponents(string: "https://api.labsmobile.com/get/send.php")! components.queryItems = [ URLQueryItem(name: "username", value: username), URLQueryItem(name: "password", value: password), URLQueryItem(name: "message", value: message) ] let msisdnsQuery = msisdns.map { msisdn in URLQueryItem(name: "msisdn", value: msisdn) } components.queryItems?.append(contentsOf: msisdnsQuery) var request = URLRequest(url: components.url!) request.httpMethod = "GET" let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data else { print(String(describing: error)) return } print(String(data: data, encoding: .utf8)!) } task.resume()
{ "subid": "65f33a88ceb3d", "code": "0", "message": "Message has been successfully sent." }
{ "subid": "65f7f7041385d", "code": "35", "message": "The account has no enough credit for this sending" }
Es posible consultar todos los códigos de error en Documentación API, códigos de error.
Para obtener más detalles sobre los parámetros disponibles y las opciones de configuración, consulta la documentación oficial en:
Consulta de saldo de una cuenta
Con este ejemplo de código en Swift
se puede consultar el saldo de la cuenta utilizando la API SMS
de LabsMobile
Mediante una llamada a este endpoint, puedes obtener información sobre la cantidad de créditos disponibles en tu cuenta de LabsMobile. La conexión se establece a través de una solicitud HTTP/GET
con autenticación en el encabezado de la conexión HTTP
.
import Foundation let username = "myUsername" let password = "myToken" let loginString = "\(username):\(password)" let loginData = loginString.data(using: .utf8)! let base64LoginString = loginData.base64EncodedString(options: []) let headers = [ "Content-Type": "application/json", "Cache-Control": "no-cache" ] do { let request = NSMutableURLRequest(url: NSURL(string: "https://api.labsmobile.com/json/send")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers request.httpBody = nil request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization") let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest) { (data, response, error) in if let error = error { print(error) } else { if let httpResponse = response as? HTTPURLResponse { print(httpResponse) } } } dataTask.resume() } catch { print(error) }
{"code":0,"credits":"10"}
Consulta la documentación completa en:
Recibir estado de mensajes enviados
Este script de ejemplo recibe una llamada por parte de la plataforma LabsMobile cuando un mensaje SMS enviado cambia de estado. Para implementar esta solución, es esencial configurar los parámetros adecuados, la URL de confirmación en el parámetro ackurl
en la petición o la URL por defecto en la Configuración API de tu cuenta.
Por tanto, es necesario publicar un script como este en tu sistema para que nuestra plataforma llame a la URL cuando ocurra un cambio de estado en cualquiera de los mensajes enviados.
El código de ejemplo obtiene los parámetros de la URL utilizando la variable global $_GET
y luego asigna estos parámetros a variables locales.
import Foundation import GCDWebServer class MyWebServer { var webServer: GCDWebServer init() { webServer = GCDWebServer() } func startServer() { webServer.addDefaultHandler(forMethod: "GET", request: GCDWebServerRequest.self) { request in if let queryParams = request.query { let acklevel = queryParams["acklevel"] as? String ?? "" let credits = queryParams["credits"] as? String ?? "" let msisdn = queryParams["msisdn"] as? String ?? "" let status = queryParams["status"] as? String ?? "" let subid = queryParams["subid"] as? String ?? "" let timestamp = queryParams["timestamp"] as? String ?? "" print("Variable acklevel : \(acklevel)") print("Variable credits : \(credits)") print("Variable msisdn : \(msisdn)") print("Variable status : \(status)") print("Variable subid : \(subid)") print("Variable timestamp : \(timestamp)") } return GCDWebServerResponse(statusCode: 200) } webServer.start(withPort: 3000, bonjourName: nil) print("Server started at port 3000") } } let server = MyWebServer() server.startServer() RunLoop.current.run()
Consulta la documentación completa en:
Recepción de mensajes SMS
Una vez contratado un número virtual, podrás recibir mensajes vía API
en una URL específica mediante una llamada HTTP/GET
a un script de tu sistema. Cada mensaje recibido invocará la URL, transmitiendo todos sus datos en variables en formato JSON
Para activar esta funcionalidad se debe informar la URL de recepción de mensajes en la Configuración de tu cuenta.
Es necesario configurar un endpoint en tu sistema para que la plataforma LabsMobile llame a este script cuando se reciba un SMS en cualquiera de los números virtuales contratados.
El código de ejemplo obtiene los parámetros de la URL utilizando la variable global $_GET
y luego asigna estos parámetros a variables locales
import Foundation import GCDWebServer class MyWebServer { var webServer: GCDWebServer init() { webServer = GCDWebServer() } func startServer() { webServer.addDefaultHandler(forMethod: "GET", request: GCDWebServerRequest.self) { request in if let queryParams = request.query { let inbound_number = queryParams["inbound_number"] as? String ?? "" let service_number = queryParams["service_number"] as? String ?? "" let msisdn = queryParams["msisdn"] as? String ?? "" let message = queryParams["message"] as? String ?? "" let timestamp = queryParams["timestamp"] as? String ?? "" print("Variable inbound_number : \(inbound_number)") print("Variable service_number : \(service_number)") print("Variable msisdn : \(msisdn)") print("Variable message : \(message)") print("Variable timestamp : \(timestamp)") } return GCDWebServerResponse(statusCode: 200) } webServer.start(withPort: 3000, bonjourName: nil) print("Server started at port 3000") } } let server = MyWebServer() server.startServer() RunLoop.current.run()
Consulta la documentación completa en:
Recursos de soporte
Recomendamos consultes y tengas en cuenta los siguientes recursos de soporte en tu integración:
- Descripción, manual y ejemplos de código de la API de envío SMS
- Guía técnica de un proceso de validación o autenticación OTP por SMS
- Todas las versiones y funcionalidades de la API de LabsMobile
- Tutorial primeros pasos de una integración API
- Crea una cuenta de prueba
- Recomendaciones y buenas prácticas en cualquier integración
- Plugins, módulos y extensiones
- ¿Necesitas ayuda? Contacta con nuestros técnicos