
Partager:
Benjamin Aronov est un défenseur des développeurs chez Vonage. C'est un bâtisseur de communauté qui a fait ses preuves, avec une formation en Ruby on Rails. Benjamin apprécie les plages de Tel Aviv, où il vit. Sa base à Tel Aviv lui permet de rencontrer et d'apprendre de certains des meilleurs fondateurs de startups du monde. En dehors de la technologie, Benjamin aime voyager à travers le monde à la recherche du parfait pain au chocolat.
Comment recevoir des SMS avec Ruby on Rails
Temps de lecture : 4 minutes
Maintenant que votre application Ruby on Rails peut envoyer des SMS et suivre les statuts des messagesl'étape suivante consiste à gérer les messages entrants. Après tout, quel est l'intérêt d'envoyer des SMS si vous ne pouvez pas recevoir de réponses ? Dans cet article, nous vous montrons exactement comment procéder.
Dans ce tutoriel, vous apprendrez à recevoir un SMS entrant en mettant en œuvre un point de terminaison webhook dans Ruby on Rails.
TL;DR Passez à l'étape suivante et trouvez tout le code de code de démarrage rapide sur GitHub.
Conditions préalables
Ruby on Rails installé sur votre machine
Numéro virtuel Vonage
Pour acheter un numéro de téléphone virtuel, rendez-vous sur votre tableau de bord API et suivez les étapes ci-dessous.
Purchase a phone number
Accédez à votre tableau de bord API
Naviguez vers CONSTRUIRE & GERER > Numbers > Acheter des Numbers.
Choisissez les attributs nécessaires et cliquez sur Rechercher
Cliquez sur le bouton Acheter à côté du numéro désiré et validez votre achat
Pour confirmer que vous avez acheté le numéro virtuel, allez dans le menu de navigation de gauche, sous CONSTRUIRE & GÉRER, cliquez sur Numéros, puis sur Vos Numéros
Comment fonctionne le SMS entrant ?
Vous vous demandez peut-être comment un SMS passe du téléphone d'un utilisateur à votre application Rails. De la même manière que pour les accusés de réception dans l'article précédent, Vonage s'occupe de l'interaction avec le réseau mobile. Ensuite, il transmet ces informations à un webhook que vous définissez dans votre application Vonage. Dans ce tutoriel, nous utiliserons ngrok pour gérer le webhook et le transmettre à notre application Rails.
Diagram illustrating the inbound SMS process, where a user sends a message through the Vonage platform, which then forwards the message to an application via a webhook.
Comment exposer une application Ruby on Rails avec ngrok
Vous pouvez utiliser ngrok pour exposer publiquement et en toute sécurité votre serveur local via HTTP. Ainsi, dans un onglet séparé de votre serveur rails, ouvrez un tunnel ngrok sur le port 3000.
ngrok http 3000Veillez à ajouter l'URL de votre ngrok en tant qu'élément de config.host dans votre fichier development.rb dans votre fichier development.rb. Nous allons utiliser la variable d'environnement VONAGE_SERVER_HOSTNAMEpour rendre notre application plus dynamique.
Pour plus d'aide, voir Comment démarrer et utiliser ngrok dans Rails.
# config/environments/development.rb
Rails.application.configure do
config.hosts << ENV['VONAGE_SERVER_HOSTNAME']
Si vous n'avez pas créé de fichier .env auparavant, assurez-vous de le faire à la racine de votre application et ajoutez vos informations d'identification Vonage et l'URL ngrok :
VONAGE_APPLICATION_ID='XXXX'
VONAGE_PRIVATE_KEY='./private.key'
VONAGE_SERVER_HOSTNAME='XXXXXX.ngrok.app
>> Sécurisez vos données d'identification
>> Ne livrez jamais les fichiers .env à votre dépôt ! Assurez-vous que .env est dans votre .gitignore.
Nous devons maintenant mettre à jour notre application Vonage (des articles précédents) dans le tableau de bord du développeur. Cliquez sur 'edit'. Maintenant, mettez à jour l'URL entrante sous les capacités de messages. Ajoutez votre URL ngrok suivie de /inbound_sms.
Une fois que vous aurez appuyé sur save, ngrok transmettra les requêtes faites au point de terminaison /inbound_sms à votre application Rails ! Mais il y a un petit problème : notre application Rails n'a pas ce point de terminaison.
Comment gérer un SMS entrant WebHooks dans Rails
Maintenant que Vonage transmet une charge utile SMS à l'application /inbound_sms mettons à jour notre application et créons une route pour le gérer.
# config/routes.rb
Rails.application.routes.draw do
resources :inbound_sms, only: [:create]
....remaining routes...Lorsqu'un SMS a été envoyé à votre numéro virtuel Vonage, Vonage en informe votre application en envoyant un webhook. La charge utile typique d'un SMS entrant ressemble à ceci.
{
"to": "12013508504",
"from": "12013508506",
"channel": "sms",
"message_uuid": "a1610e97-a045-4d04-933b-5e570fe51691",
"timestamp": "2025-02-23T18:21:41Z",
"usage": {
"price": "0.0059",
"currency": "EUR"
},
"message_type": "text",
"text": "Testing",
"context_status": "none",
"origin": {
"network_code": "42507"
},
"sms": {
"num_messages": "1",
"count_total": "1"
}
} Comment stocker un message SMS à partir de Rails
Maintenant que nous disposons de toutes les informations nécessaires basées sur notre modèle SMS tel que défini précédemment, nous pouvons créer une certaine logique pour stocker nos SMS entrants. Nous allons également ajouter une fonctionnalité amusante pour montrer que notre code fonctionne. Générons un nouveau contrôleur pour gérer cela.
rails g controller InboundSms createÀ l'intérieur de notre contrôleur, nous aurons une simple fonction create qui analyse le webhook et entre un SMS dans notre base de données. Vous noterez que nous avons mis is_inbound à true.
# app/controllers/inbound_sms_controller.rb
class InboundSmsController < ApplicationController
skip_before_action :verify_authenticity_token
def create
sms = Sms.create(
to: params[:to],
from: params[:from],
text: params[:text],
message_uuid: params[:message_uuid],
is_inbound: true
)
# Send a reply
# reply sms
# Return an empty HTTP 200 status regardless
head :ok
end
end
Pour prouver que nous avons bien reçu le SMS, nous enverrons une réponse à l'expéditeur. Amusons-nous un peu, en montrant le texte original d'abord sans les voyelles, puis en binaire.
private
def reply(sms)
consonants = sms.text.delete("aeiouAEIOU")
binary = sms.text.unpack1('B*')
message = Vonage::Messaging::Message.sms(message: "Your message without vowels is #{consonants} and your message in binary is #{binary}")
vonage.messaging.send(
from: sms.to,
to: sms.from,
**message
)
end
La méthode de réponse repose sur le client Vonage, nous devons donc l'initialiser comme nous l'avons fait dans le premier article.
vonage = Vonage::Client.new(
application_id: ENV["VONAGE_APPLICATION_ID"],
private_key: ENV["VONAGE_PRIVATE_KEY"]
)Voir comment tout le code s'articule dans le fichier complet inbound_sms_controller.rb complet.
Conclusion
Nous vous félicitons ! Vous avez réussi à créer une application SMS Ruby on Rails capable de recevoir des messages entrants à l'aide d'un webhook Vonage. Vous avez ainsi terminé la partie SMS du cours Ruby on Rails Quickstart. Nous ajouterons des capacités vocales avec l'API Voice de Vonage dans les prochains tutoriels.
Si vous avez des questions ou souhaitez demander une fonctionnalité pour l'application Quickstart, rejoignez la conversation sur le site Vonage. Communauté Vonage ou contactez-nous sur X (anciennement Twitter). Nous serions ravis d'entendre ce que vous allez construire !
Partager:
Benjamin Aronov est un défenseur des développeurs chez Vonage. C'est un bâtisseur de communauté qui a fait ses preuves, avec une formation en Ruby on Rails. Benjamin apprécie les plages de Tel Aviv, où il vit. Sa base à Tel Aviv lui permet de rencontrer et d'apprendre de certains des meilleurs fondateurs de startups du monde. En dehors de la technologie, Benjamin aime voyager à travers le monde à la recherche du parfait pain au chocolat.