https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-receive-sms-delivery-receipts-with-asp-net-core-mvc-dr/Blog_SMS-Delivery-Receipts_1200x600.png

Comment recevoir des accusés de réception de SMS avec ASP.NET Core MVC

Publié le May 5, 2021

Temps de lecture : 7 minutes

Après l'envoi d'un SMS, il est bon de valider que le message a été livré à sa destination. Heureusement, il s'agit d'une fonctionnalité que vous pouvez facilement créer avec ASP.NET. Dans cet exemple, nous recevrons un webhook de l'API SMS de Vonage et nous imprimerons le JSON de ce webhook sur la console.

Exemple de repo

Si vous voulez sauter le pas-à-pas et simplement jouer avec l'exemple, le code est disponible sur GitHub.

Conditions préalables

  • La dernière version du NET Core 3.1 SDK

  • Soit Visual Studio 2019, soit Visual Studio pour Mac, soit Visual Studio Code - j'utiliserai Visual Studio Code pour cette démo.

  • J'envoie un SMS avec la Nexmo CLI. Vous pouvez l'utiliser, ou vous pouvez même ajouter votre propre logique d'envoi à cette application!

  • Facultatif - J'ai utilisé ngrok pour tester cette démo

    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.

Créer l'application

Créer l'application

Ouvrez votre console et naviguez jusqu'au répertoire dans lequel vous souhaitez créer le projet. Lorsque vous êtes dans le bon répertoire, exécutez la commande :

dotnet new mvc -n ReceiveDlrAspNet

Aujourd'hui cd dans ReceiveDlrAspNet et ajoutez le paquetage Vonage à l'aide de la commande suivante :

dotnet add package Vonage

Ouvrez ce répertoire dans VS Code.

Ajouter l'itinéraire

Ensuite, nous allons ajouter la route du récépissé de livraison à notre contrôleur principal. Ouvrez Controllers\HomeController.cs et ajoutez ce qui suit à la HomeController et ajoutez ce qui suit à la classe

[HttpPost("/webhooks/dlr")]
public async Task<IActionResult> HandleDlr()
{
    using(var reader = new System.IO.StreamReader(Request.Body))
    {
        var json = await reader.ReadToEndAsync();
        Console.WriteLine(json);
    }
    return NoContent();
}

Essais

Du point de vue du développement, c'est tout ce que nous avions à faire, alors passons aux tests. Nous allons tester ceci avec ngrokqui nous permet de construire un tunnel accessible au public vers notre application. C'est utile lorsque nous avons besoin d'exposer des points de terminaison HTTP accessibles au public à nos applications. Si vous allez tester ceci avec IIS Express, vous voudrez bien consulter notre explicatif sur le sujet car il y a des considérations particulières à prendre en compte. En résumé, nous devons ajouter une option --host-header au démarrage de ngrok.

Configurer Kestrel ou IIS Express

Ouvrir Properties\launchSettings.json. Vous remarquerez deux objets ici : iisSettings et profiles. profiles a deux éléments, IIS Express et ReceiveDlrAspNet (en supposant que c'est le nom que vous avez donné à votre projet). Si vous utilisez IIS Express, modifiez la valeur de l'élément applicationUrl de l'objet iisSettings en http://localhost:5000 et définissez l'objet sslPort à 0. Si vous utilisez kestrel (comme moi), allez-y et supprimez la section https://localhost:5001 de l'objet ReceiveDlrAspNet de l'objet. Dans les deux cas, l'application fonctionnera sur localhost:5000ce qui nous permettra de faire suivre les messages par ngrok.

Démarrer l'application

Dans votre terminal, exécutez la commande dotnet run.

Démarrer Ngrok

Démarrez ngrok en utilisant la commande suivante :

ngrok http --host-header="localhost:5000" 5000

Un écran semblable à celui-ci s'affiche :

ngrokngrok

Si vous naviguez vers l'adresse de redirection pour HTTP (dans mon cas http://2ad8b960630f.ngrok.iomais la partie 2ad8b960630f varie selon le plan gratuit de ngrok), vous verrez la page de bienvenue générique pour une application ASP.NET Core. Nous n'avons modifié aucune des vues, ce qui signifie que votre application est en place et accessible !

Configurez vos Webhooks

La dernière chose à faire avant d'être prêt à recevoir des webhooks est d'indiquer à Vonage où envoyer les webhooks - dans mon cas, je veux qu'ils soient envoyés au point de terminaison accessible à l'adresse http://2ad8b960630f.ngrok.io/webhooks/dlr. Pour ce faire, accédez à la page du tableau de bord et définissez le paramètre Delivery receipts à l'adresse de votre propre point de terminaison. Définissez également le paramètre HTTP Method à POST-JSONcar nous supposons qu'il s'agit d'une requête POST avec une charge utile JSON.

Dashboard settingsDashboard settings

Cliquez sur le bouton d'enregistrement, et vous êtes configuré pour recevoir des accusés de réception par SMS !

Envoyer un SMS

Pour cet exemple, j'envoie un SMS avec la CLI de nexmo. C'est aussi simple que de lancer :

nexmo sms -f VONAGE_NUMBER YOUR_CELLPHONE_NUMBER "Testing DLR"

Entrez confirm pour envoyer, et dans la console où votre application est exécutée, vous verrez quelque chose du genre :

Delivery receipt exampleDelivery receipt example

Ressources

  • Le code de ce tutoriel se trouve sur GitHub

Partager:

https://a.storyblok.com/f/270183/384x384/73d57fd8eb/stevelorello.png
Steve LorelloAnciens de Vonage

Ancien développeur .NET Advocate @Vonage, ingénieur logiciel polyglotte full-stack, AI/ML