
Partager:
Abdul est défenseur des développeurs chez Vonage. Il a travaillé dans le domaine des produits de consommation en tant qu'ingénieur iOS. Pendant son temps libre, il aime faire du vélo, écouter de la musique et conseiller ceux qui commencent leur parcours dans la technologie.
Comment envoyer des SMS avec Swift, Vapor et Vonage
Introduction
L'API SMS API de Vonage de Vonage vous permet d'envoyer des messages texte par programme. Ce tutoriel explique comment utiliser l'API SMS de Vonage avec Vapor pour envoyer un SMS.
Conditions préalables
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 et Swift 5 ou supérieur.
La boîte à outils Boîte à outils Vapor installée sur votre machine.
Créer un projet vapeur
Vous pouvez créer un projet Vapor en utilisant la commande new project vapor new SwiftTextMessage dans votre terminal. Il vous demandera d'abord si vous souhaitez utiliser Fluent (appuyez sur n pour passer), puis si vous souhaitez utiliser Leaf. Leaf est un langage de template que vous utiliserez pour générer des pages HTML dynamiques, donc appuyez sur y pour l'inclure. Une fois la commande terminée, changez de répertoire dans le dossier qu'elle a créé pour vous en utilisant cd SwiftTextMessage.
Vous devrez également créer un fichier .env pour stocker les informations d'identification de votre compte API Vonage. Dans votre terminal, utilisez la commande suivante pour créer le fichier remplaçant X et Y par votre clé API et votre secret, respectivement :
Vous pouvez maintenant ouvrir le projet dans Xcode en utilisant vapor xcode. Une fois Xcode ouvert, il commencera à télécharger les dépendances sur lesquelles Vapor s'appuie en utilisant le Swift Package Manager (SPM). Pour voir les dépendances, vous pouvez ouvrir le fichier Package.swift fichier.
Par défaut, Xcode exécute votre application à partir d'un répertoire local aléatoire. Comme vous allez charger des ressources locales, vous devez définir un répertoire de travail personnalisé. Allez à Produit > Schéma > Modifier le schéma... et définissez le répertoire de travail comme étant le dossier racine de votre projet.
Setting custom working directory
Appuyez sur CMD+R pour compiler et exécuter. Une fois la compilation terminée, vous trouverez votre page web à l'adresse localhost:8080.
Créer une page web
Maintenant que votre projet est en place, vous allez créer une interface permettant de saisir un numéro de téléphone et un message pour le SMS. Ouvrez le fichier index.leaf sous Ressources/Vues et mettez-le à jour :
<!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>Le code ci-dessus ajoute un formulaire avec des entrées pour un numéro de téléphone et un message, et une fois que le formulaire est soumis, il envoie une POST à /send. Remarquez le bloc Leaf qui commence par #if(status):. Il vérifie la présence d'une valeur pour la variable status et, si elle est définie, il ajoute les informations de statut supplémentaires. Si vous compilez et exécutez (CMD + R), vous verrez maintenant votre page mise à jour.
Créer les structures du modèle
L'un des avantages de l'utilisation de Vapor est que vous pouvez vous appuyer sur la sécurité des types du langage Swift. Vous pouvez modéliser les entrées et les sorties de votre serveur en utilisant des éléments conformes au protocole Codable Vapor dispose d'un protocole appelé Content pour cela.
Créer une structure appelée Input qui se conforme à Content au bas du fichier routes.swift du fichier :
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"
}
}L'API SMS de Vonage s'attend à ce que les champs soient en majuscules. CodingKeys pour faire correspondre les noms de leurs propriétés à leur équivalent en lettres serpentines. Sous la structure Input créez une autre structure pour la réponse attendue par l'API SMS :
struct Response: Content {
let messages: [Messages]
struct Messages: Content {
let status: String
}
} Envoyer le SMS
Pour envoyer le SMS, vous devez faire un appel au point de terminaison de l'API SMS de Vonage. /sms de l'API SMS de Vonage. Pour ce faire, vous devez définir la route /send utilisée par le formulaire web, analyser les données du formulaire, puis effectuer l'appel. Commencez par définir le nouvel itinéraire dans la fonction routes fonction :
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")
}Cette méthode utilise le corps du formulaire pour créer une Input puis la clé et le secret de l'API sont ajoutés à partir du fichier .env car ce sont des champs obligatoires pour l'API SMS. Ensuite, vous utiliserez l API clientde Vapor, qui vous permet de faire des appels HTTP externes, pour appeler l'API SMS. Ajoutez l'appel à la route d'envoi :
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"])
}
}L'appel de fonction client.post a un type de retour de EventLoopFuture<ClientResponse>. Il est ensuite mappé dans un type EventLoopFuture<View> qui est le type de retour attendu de la route. La fonction map prend la réponse de l'API SMS et crée une variable d'état que le moteur de rendu de vue utilisera dans le fichier index.leaf fichier.
Essayez-le
Construisez et exécutez (CMD + R) le projet, ouvrez localhost:8080 dans votre navigateur, puis remplissez un numéro de téléphone et un message.
Index page of the project
En cliquant sur le bouton envoyer enverra les données à l'itinéraire que vous avez défini plus tôt, effectuera l'appel à l'API SMS de Vonage, puis reviendra à la page initiale avec son état.
Index page with ok status
Quelle est la prochaine étape ?
Vous pouvez trouver le projet terminé sur GitHub.
Vous pouvez faire plus avec l'API SMS, par exemple vérifier si votre serveur a réussi à envoyer un SMS. Découvrez-le sur notre plateforme pour les développeurs.
Partager:
Abdul est défenseur des développeurs chez Vonage. Il a travaillé dans le domaine des produits de consommation en tant qu'ingénieur iOS. Pendant son temps libre, il aime faire du vélo, écouter de la musique et conseiller ceux qui commencent leur parcours dans la technologie.
