Nous avons créé une application "Félicitations 2.0" qui recueille secrètement les "voix" de "Félicitations pour votre mariage" d'amis et les présente aux mariés. L'histoire originale est un joli blog ici en 2013
Si vous ne l'avez pas lu, veuillez le lire. Je pense que "les programmeurs sont vraiment cool". J'ai été profondément ému par ce blog, j'ai donc fait une copie complète de ce contenu.
Pour résumer brièvement le contenu du blog
--Créez une application téléphonique pour les messages de réponse automatique à l'aide d'une API vocale appelée Twilio
La différence entre le contenu du blog et cette fois est
Bien que le blog ci-dessus et le blog de l'ingénieur du membre planificateur mentionnent le flux de traitement, le code complet du formulaire de travail n'a pas été publié, je vais donc me référer au contenu du blog et faire la même opération On a l'impression qu'il a été implémenté en Python. Le script fragmentaire a été publié sur le blog par les membres ingénieurs.
J'utilise généralement Python pour analyser les données, donc je n'ai jamais utilisé un framework Web comme Flask pour créer quelque chose comme une application, ni un service d'hébergement comme Heroku. était.
C'est pourquoi je vais laisser une note sur les différentes mousses de l'application web (?) Amateur et les points qui ne sont pas expliqués en détail dans le document officiel de l'API Twilio.
Le blog suivant a été utile pour l'enregistrement Twilio, la méthode de facturation, l'achat d'un numéro de téléphone, l'installation d'un exemple de fichier statique sur S3 et la vérification du comportement. Cette fois, nous ne traiterons pas les fichiers statiques, donc vous pouvez continuer. Ce n'est pas grave si vous terminez l'enregistrement à l'API pour le moment.
Twilio est un service API payant (pas de niveau gratuit), qui facture d'abord 2000 yens comme montant minimum, puis facture 1000 yens supplémentaires. Un appel coûte environ 0,1 à 2 yens, donc je pense que les 2000 premiers yens suffisent pour le développement d'une application simple.
Au fait, si vous demandez "Qu'est-ce que S3?", Cette page vous sera utile.
S3 est un serveur de fichiers cloud exploité par Amazon. L'enregistrement de la première carte de crédit est un problème, mais c'est très bon marché et facile à utiliser, alors utilisez-le. (S3 sera une zone de stockage de données vocales pour le guidage téléphonique automatique)
Suivez les pages ci-dessus pour configurer votre environnement de développement local. La principale chose à faire est l'installation suivante.
--Installation de python --Installez virtualenv
vertualenv construit un environnement virtuel. Lorsque vous hébergez un ensemble de scripts d'application Web sur le serveur Heroku, séparez l'environnement de cette application par verticalenv afin que les modules inutiles, etc. ne soient pas mélangés. Installez-le pour qu'il ne soit pas gênant plus tard (voir ci-dessous si vous souhaitez créer un environnement virtuel avec le package anaconda) Les détails de ngrok seront décrits plus loin.
Après avoir configuré l'environnement de développement, jetez un œil au contenu du démarrage rapide ci-dessus pour voir quel type de tâche vous pouvez réellement écrire avec l'API Twilio. (Parce que je suis du genre à ne pas comprendre à moins de le déplacer et de voir comment il se comporte ...)
Lorsqu'un appel arrive, Twilio viendra voir TwiML (semblable à XML) à l'URL spécifiée et exécutera le traitement du format qui y est défini à tout moment.
Si vous regardez le didacticiel ci-dessus, vous pouvez voir comment écrire TwiML et comment le générer dynamiquement, mais il existe quelques anciennes descriptions (des descriptions qui ne correspondent pas aux dernières spécifications de l'API) et les scripts Flask sont placés sur le serveur Web essentiel. La méthode d'hébergement n'est pas conviviale, donc je reçois beaucoup de mousse. .. .. Dans ce tutoriel, je pense qu'il suffit de confirmer que "Comment écrire l'API Twilio est comme ça".
Parmi les fonctions de l'API Twilio, l'application créée cette fois gère principalement les appels entrants, tels que «accepter les appels», «lire les fichiers vocaux enregistrés», «enregistrer les messages des utilisateurs», et «accepter la saisie des numéros». J'utilise.
La séquence réelle des applications est la suivante (citée du blog de hmsk)
Ce qui suit est un didacticiel pour chaque fonction, mais comme je l'ai écrit ci-dessus, veuillez noter que certaines parties ne fonctionnent pas même si vous écrivez selon le didacticiel.
Vous trouverez ci-dessous le script Flask terminé que j'ai écrit en faisant référence à la séquence ci-dessus, au didacticiel et à l'utilisation de la dernière API.
(Le fichier mp3 appelé dans le script est les données vocales pour la réponse automatique installée dans S3.)
Ensuite, testez localement si l'application Web créée (script Flask) fonctionne correctement.
Puisqu'il est gênant, je veux tester le comportement sans déployer (jusqu'au serveur), mais dans ce cas, ngrok
est pratique. C'est gratuit alors utilisons-le.
DL le ngrok qui correspond à votre système d'exploitation à partir de la Page officielle. Sur Mac, brew install ngrok
est ok
Décompressez le fichier DL
$ unzip /path/to/ngrok.zip
Après cela, si l'affichage est confirmé avec ./negrok help
etc., c'est ok
Afin d'utiliser réellement ngrok
, vous devez vous enregistrer en tant qu'utilisateur en vous inscrivant depuis la page officielle de ngrok (gratuitement).
Après vous être enregistré en tant qu'utilisateur et vous être connecté, exécutez ./ngrok authtoken (suivi d'une chaîne de caractères)
affiché sur l'écran Get Started dans le terminal. Je vais
(Peut-être que cet enregistrement d'utilisateur et cet enregistrement de jeton d'authentification ne sont pas obligatoires)
Après avoir terminé toutes les opérations ngrok, exécutez le .py du script Flask que vous souhaitez exécuter. (Une fois exécuté, il sera prêt à être affiché sur localhost: 5000)
Avec Flask en cours d'exécution, exécutez ./ngrok http 5000
dans une fenêtre séparée.
Ensuite, sur l'écran nouvellement lancé
Forwarding http://6813xaa9.ngrok.io -> localhost:5000
Forwarding https://6813xaa9.ngrok.io -> localhost:5000
Puisque quelque chose comme ceci est écrit, enregistrez l'URL affichée (soit http ou https) dans la section "Webhook" de l'écran de gestion de l'API twilio et enregistrez-la. Ce que vous faites localement sera désormais traité comme s'il s'exécutait sur un serveur Web.
Après cela, lorsque vous appelez le numéro de téléphone, le processus écrit dans Flask doit être exécuté.
Au fait, ngrok renvoie une URL aléatoire à chaque démarrage. Si vous souhaitez résoudre ce problème, veuillez vous reporter à l'élément «Les chaînes de caractères aléatoires sont gênantes» sur cette page. (* Cependant, à partir d'avril 2017, vous devrez peut-être devenir membre payant pour obtenir une URL fixe?)
Si vous avez un script python qui crée un TwiML pour un comportement statique (par exemple, il suffit de lire automatiquement le mp3 spécifié lorsque vous recevez un appel), placez-le dans S3 et placez l'URL du script sur la page de gestion de l'API Twilio. Vous pouvez le faire en vous inscrivant.
Cependant, si vous souhaitez effectuer des traitements compliqués (comme cette fois) tels que modifier le traitement en fonction du nombre saisi par l'utilisateur, installez un script python sur un serveur externe et de manière dynamique TwiML en fonction du contenu d'entrée de l'utilisateur. Doit être généré.
EC2 d'Amazon Web Service (AWS) et Google App Engine (GAE) de Google Cloud Platform (GCP) peuvent être utilisés à bas prix comme options pour le serveur externe pour installer le script, mais cette fois, le processus cible est simple. Pour cette raison, j'ai décidé d'utiliser Heroku, qui est facile à installer et peut être utilisé gratuitement. Heroku est un service qui vous permet d'exécuter des applications en poussant simplement un ensemble de scripts Web gérés par git vers un serveur Heroku spécifié.
Pour la marche à suivre pour exécuter une application web (Django ou Flask) écrite en Python sur Heroku, je me suis référé au tutoriel officiel ci-dessous.
Le flux général du didacticiel est
--Créez un compte Heroku
heroku create
--Pousser le script dans le référentiel créé avec git push heroku master
heroku open
C'est comme ça. Facile. À propos, comme l'opération du système de base de données n'est pas effectuée dans l'application créée cette fois, tous les processus d'installation tels que SQLAlchemy et psycopg2 sont ignorés.
Les fichiers minimum qui doivent être envoyés à Heroku pour exécuter l'application sont les trois suivants.
--main.py ・ ・ ・ Fichier du corps principal dans lequel le script de Flask est écrit (ici, le nom du fichier est uniquement main.py) --Procfile ・ ・ ・ Fichier dans lequel sont écrites les commandes d'exécution de main.py (les détails seront décrits plus tard) --requirements.txt ・ ・ ・ Fichier de liste des modules importés par main.py
(Attention) Le traitement suivant est effectué après être entré dans l'environnement virtuel séparé pour l'application par verticalenv ou anaconda.
Enregistrez un compte Heroku http://www.heroku.com/
Installez l'outil CLI Heroku pour votre système d'exploitation à partir ici.
Après l'enregistrement de l'utilisateur et l'installation de la CLI, heroku login
dans le terminal
% heroku login
#->Entrez le mot de passe de l'ID heroku
Placez le répertoire contenant le script python (script Flask) que vous souhaitez déployer sur le serveur Heroku sous contrôle git
$ cd /path/to/dir
$ git init
Créez d'abord requirements.txt et Procfile dans le même répertoire.
$ pip freeze > requirements.txt
(Si vous n'avez pas installé gunicorn, pip install gunicorn
)
(La partie "principale" correspond au nom du fichier Flask)
$ touch Procfile
$ echo web: gunicorn main:app --log-file - >> Procfile
heroku create
dans le (même) répertoire que git init
$ heroku create <Tout nom d'application> --buildpack heroku/python
heroku create
émettra l'URL Heroku
Enregistrez cette URL dans la section webook de la console API twilio (notez qu'il est facile de l'oublier)
Pousser
le script vers heroku
$ git add -A
$ git commit -m “hogehoge”
$ git push heroku master
Flux de lettres rugueux Il est poussé à maîtriser en toute sécurité, et s'il n'y a pas d'erreur, c'est ok
$ heroku open
Ensuite, si le contenu poussé est correct, l'application doit être affichée dans le navigateur.
Si cela a fonctionné localement mais que cela n'a pas fonctionné,
(La plupart du temps, il y a quelque chose qui ne va pas avec le Procfile)
La série de contenus ci-dessus a été soigneusement organisée dans Cet article de Qiita et a été utile.
Il semble que la commande d'exécution de l'application poussée vers Heroku devrait être écrite dans ce qu'on appelle Procfile (Les détails sur Procfile sont écrits ici (https://github.com/herokaijp/devcenter/wiki/procfile) Cependant, même si vous ne le comprenez pas, vous pouvez l'écrire comme suit).
Lors de l'écriture d'un Procfile en utilisant quelque chose appelé gunicorn, j'ai essayé d'imiter ce blog.
Par exemple, si vous souhaitez exécuter un script Flask nommé main.py sur Heroku, Procfile
Il semble que vous n'ayez besoin que d'écrire et d'enregistrer la ligne web: gunicorn main: app --log-file -
. (Pas python main.py
.)
(Gunicorn
semble être recommandé d'utiliser ceci dans divers articles, donc je ne suis pas vraiment sûr, mais je l'utilise pour le moment. Si vous n'utilisez pas gunicorn
, Flask et django seront sur le port 5000 Il semble y avoir un problème en se levant)
Vérifiez les applications actuellement transmises à Heroku (jusqu'à 5 dans le niveau gratuit)
$ heroku apps
Supprimer les applications inutiles
$ heroku destroy --app <nom de l'application>
#->Saisissez à nouveau le nom de l'application pour confirmation
Vérifiez le script en cours d'exécution sur le serveur d'heroku (le temps restant qui peut être démarré dans le cadre libre est également affiché)
$ heroku ps
Vérifier le journal
$ heroku logs #- Vous pouvez voir la queue du journal avec l'option queue
Voir ici pour les autres CLI Heroku
En chemin, j'ai réalisé que le numéro de téléphone que j'avais acheté chez Twilio ne pouvait pas être répondu de l'étranger, alors j'ai fini par demander à un ami vivant à l'étranger de m'envoyer la source sonore enregistrée par l'application d'enregistrement vocal. La signification d'en faire une application pour téléphone. .. .. Peut-être que le numéro de téléphone que j'ai acheté était limité au Japon? (Je n'ai pas enquêté en détail)
Les données de message de l'utilisateur enregistrées par l'API se trouvent à la destination de connexion depuis https://jp.twilio.com/login/kddi-web. Vous pouvez faire du DL etc. à partir de la console. (Je n'ai pas vérifié combien de messages peuvent être enregistrés, mais dans mon cas, j'ai confirmé que 60 ont été enregistrés.)
Je pense que vous pouvez choisir mp3 ou WAV comme format de stockage de données. Dans mon cas, j'avais l'habitude de télécharger des données audio avec mp3. Si vous souhaitez découper la partie de début ou la partie inférieure des données vocales et les modifier facilement, c'est gratuit et pratique. Vous pouvez facilement couper la voix sur le navigateur (pas de nombre maximum de fichiers particulier).
Notez que le fichier m4a généré par l'application enregistreur vocal iPhone en standard ne peut pas être lu avec le verbe de lecture de l'API twilio! (Mp3 est sûr)
--Référence: https://jp.twilio.com/docs/api/twiml/play
Pour ceux qui veulent couper l'environnement avec anaconda au lieu de vertualenv (généralement je pense que verticalenv devrait être utilisé)
Voici comment créer un environnement avec anaconda et y entrer et en sortir
--Référence: Création d'un environnement python pour ceux qui souhaitent devenir data scientists 2016
$ conda create -n <Nom de l'environnement> python=<version> <Écrivez les bibliothèques que vous souhaitez installer séparées par des espaces>
Exemple: conda create -n py_ver2 python = 2.7 numpy scipy pandas jupyter
Il est également possible de créer un nouvel environnement en collectant des environnements anaconda (création d'un environnement virtuel d'anaconda avec anaconda)
$ conda create -n anaconda2 python=2.7 anaconda
Afficher une liste d'environnements virtuels créés avec la conda actuellement existante
$ conda env list
Entrez dans l'environnement virtuel
$ source activate <Nom de l'environnement>
Sortez de l'environnement virtuel
$ source deactivate
Pages référencées autres que les liens ci-dessus
J'ai écrit le contexte de la création de cette application sur mon blog personnel. Si tu es intéressé.
Recommended Posts