Python >> Tutoriel Python >  >> Python

Répondre aux SMS avec Python et Bottle

Les applications Python peuvent facilement envoyer des SMS à l'aide d'une API Web. Les applications Web créées avec le framework Bottle peuvent également répondre aux messages texte entrants en gérant les webhooks HTTP POST entrants. Dans cet article, nous expliquerons rapidement comment configurer une application Web Bottle pour gérer les données SMS sous la forme de requêtes HTTP POST.

Outils dont nous aurons besoin

Ce didacticiel fonctionne avec Python 2 ou 3, bien que Python 3 soit recommandé par la communauté pour les nouvelles applications. Installez l'une de ces deux versions de Python sur votre système à utiliser pour cette procédure pas à pas. Nous avons également besoin :

  • pip et virtualenv pour gérer les dépendances des applications
  • Cadre Web de mise en bouteille
  • Ngrok pour la tunnellisation de l'hôte local vers notre application Bottle pendant qu'elle s'exécute sur notre environnement de développement local
  • Compte Twilio gratuit pour utiliser leur API Web SMS
  • Bibliothèque d'assistance open source Twilio Python, version 5.7.0 ou antérieure

Consultez le guide sur la configuration de Python 3, Bottle et Gunicorn sur Ubuntu 16.04 LTS si vous avez besoin d'aide pour configurer votre environnement de développement.

Installation de dépendance d'application

Notre application utilisera une bibliothèque de code d'assistance pour répondre aux SMS entrants.Bottle et la bibliothèque d'assistance sont installables à partir de PyPI dans un virtualenv. Ouvrez votre terminalet utilisez le virtualenv commande pour créer un nouveau virtualenv :

virtualenv replysms

Appelez le activate de virtualenv script, ce qui en fait l'installation "active" de Python. Notez que vous devez le faire dans chaque fenêtre de terminal où vous souhaitez que cet environnement virtuel soit utilisé.

source replysms/bin/activate

L'invite de commande changera après l'activation de virtualenv :

Utilisez le pip commande pour installer les packages Bottle et Twilio Python dans votre environnement virtuel.

pip install bottle twilio==5.7.0

Nous avons installé les dépendances requises, donc maintenant le code Python qui est exécuté avec le virtualenv activé pourra utiliser ces packages. Il est temps de créer notre application Web Bottle et de répondre aux SMS entrants.

Codage de notre application de bouteille

L'application Web Bottle aura deux itinéraires. Un itinéraire nous permettra de tester que l'application est en cours d'exécution. L'autre route gérera et répondra aux requêtes HTTP POST entrantes de Twilio. Créez un nouveau fichier nommé app.py dans votre dans le répertoire où vous souhaitez stocker ce projet Python.

Écrivez le code suivant dans le nouveau app.py dossier. Il existe également un GitHub Gistavec le code que vous pouvez copier et coller.

from bottle import (post, request, response, route, run, )
from twilio import twiml


@route('/')
def check_app():
    # returns a simple string stating the app is working
    return "It works!"


@post('/twilio')
def inbound_sms():
    twiml_response = twiml.Response()
    # grab message from the request. could also get the "To" and 
    # "From" phone numbers as well from parameters with those names
    inbound_message = request.forms.get("Body")
    # we can now use the incoming message text in our Python application
    if inbound_message == "Hello":
        twiml_response.message("Hello from Bottle right back at you!")
    else:
        twiml_response.message("Hi! Not quite sure what you meant, but okay.")
    # we return back the mimetype because Twilio needs an XML response
    response.content_type = "application/xml"
    return str(twiml_response)


if __name__ == '__main__':
    run(host='127.0.0.1', port=5000, debug=True, reloader=True)

Les lignes commençant par # sont des commentaires qui expliquent ce que font les lignes de code en dessous. Les applications Web en bouteille définissent les routes d'URL avec le @route et @post décorateurs, selon le type de requête HTTP que la route doit gérer.

Assurez-vous que votre environnement virtuel est toujours actif afin que l'application puisse utiliser les bibliothèques de code Bottle et Twilio que nous avons installées précédemment. Essayez l'application en l'exécutant avec python app.py .

Ouvrez un navigateur Web et accédez à localhost:5000 (ou 127.0.0.1:5000). Nous devrions voir "Ça marche !" à l'écran.

Cependant, il y a un problème avec notre application Web qui s'exécute sur notre environnement de développement local. Twilio ne peut pas envoyer de requête HTTP POST au serveur d'applications Web à moins qu'un tunnel localhost ne soit créé.

Tunneling Ngrok Localhost

Ngrok est un outil de tunneling local qui relie votre environnement de développement local à une URL externe. Téléchargez et installez la version de Ngrok adaptée à votre système d'exploitation.

Nous pouvons exécuter Ngrok localement et exposer notre application Bottle qui s'exécute sur le port 5000. Exécutez cette commande dans le répertoire où se trouve l'exécutable Ngrok.

./ngrok http 5000

Cool, nous pouvons maintenant utiliser l'URL de transfert afin que Twilio puisse envoyer des requêtes POST à ​​notre application lorsqu'il y a un SMS entrant. Remplacez l'URL dans la zone de texte par votre propre URL de transfert, comme je l'ai fait dans cette capture d'écran.

Maintenant, nous avons juste besoin d'un numéro de téléphone Twilio qui enverra une requête POST à ​​notre application en cas de SMS entrant.

Obtenir un numéro de téléphone

La route de notre application Web Bottle peut répondre aux requêtes POST entrantes, mais nous devons utiliser Twilio pour avoir un numéro de téléphone qui convertira les données SMS entrantes en requête POST. Dans votre navigateur Web, accédez au site Web Twilio et créez un compte gratuit. Vous pouvez également vous connecter à votre compte Twilio existant si vous en avez déjà un.

Le compte d'essai Twilio vous permet d'envoyer et de recevoir des SMS vers votre propre numéro de téléphone validé. Pour envoyer et répondre à des SMS vers et depuis n'importe quel numéro de téléphone, vous devez mettre à niveau votre compte. Les comptes d'essai sont parfaits pour le développement initial avant la mise en ligne de votre application.

Lorsque vous vous inscrivez, vous recevez un numéro de téléphone Twilio gratuit. Nous pouvons configurer ce numéro de téléphone pour transmettre les informations SMS à notre application Web en configurant le webhook de réponse.

Accédez à l'écran de gestion des numéros de téléphone et cliquez sur le numéro de téléphone que vous souhaitez configurer pour répondre aux SMS.

Faites défiler vers le bas et recherchez l'en-tête "Messagerie". Modifiez la zone de texte "Un message arrive" pour saisir l'URL de transfert ngrok plus l'itinéraire "/ twilio", comme indiqué dans la capture d'écran ci-dessous.

Cliquez sur le bouton "Enregistrer" pour que nos modifications prennent effet.

Notre application est prête à fonctionner - il est temps d'essayer notre numéro de téléphone ! Envoyez "Bonjour" ou le texte de votre choix à votre numéro de téléphone. Voici à quoi ressemble le résultat sur mon iPhone.

L'application Web concise Bottle est un bon début pour créer des programmes plus compliqués tels que Choisissez votre propre aventure Présentations ou SMS Slack bots.

Quelle est la prochaine ?

Génial, notre application Bottle répond désormais aux SMS entrants !

Des questions? Contactez-moi via Twitter@fullstackpythonor @mattmakai. Je suis également sur GitHub avec le nom d'utilisateur mattmakai.

Vous voyez quelque chose qui ne va pas dans ce message ? La source de cette page sur GitHuband soumet une pull request.