J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~

introduction

J'ai participé au stage d'été de Sai Seed Co., Ltd. et j'ai développé LINE Chatbot. Depuis que la version officielle de l'API de messagerie a été annoncée par LINE le 29/09/2016, cette fois j'ai créé un bot qui répond automatiquement avec la version officielle. Cet article [J'ai créé Chatbot avec l'API LINE Messaging et Python (1)] (http://qiita.com/Kosuke-Szk/items/eea6457616b6180c82d) C'est une continuation de. Cette fois, nous décrirons la construction du serveur et l'enregistrement de l'URL Webhook.

Code source

Le code source est disponible sur github. https://github.com/Sciseed/yukko-line-bot

Environnement de développement

・ MAC OS X 10.10.3 ・ Python 3.4.0 ・ Django 1.8.14

Les choses nécessaires

compte .heroku ・ Ceinture porte-outils Heroku ・ Virtualenv

Créer une application vide avec django

Créer un répertoire pour les applications

$ mkdir bottest $ cd bottest

Construction d'environnement virtuel

$ virtualenv virenv $ source virenv/bin/activate

Installez django-toolbelt

$ pip install django-toolbelt

Créer un projet Django

$ django-admin.py startproject bottest

Créer une application Django

$ cd bottest $ python manage.py startapp bot

paramètres de gunicorn

Puisque gunicorn est inclus dans django-toolbelt, utilisez-le ``

Créer un Procfile

Créez un fichier Procfile (sans extension) au niveau supérieur de l'application et écrivez le contenu suivant

web: gunicorn bottest.wsgi bot:app --log-file -

spécification de version de python

Créez un fichier texte appelé runtime.txt dans la même hiérarchie que Procfile et écrivez-le comme suit.

runtime.txt


python-3.4.0

Cela reconnaîtra la version python lors de l'exécution de l'application sur heroku (travail requis pour la série 3.X)

Essayez de démarrer un serveur local

$ python manage.py runserver

Dans cette spécification, les données de message sont uniquement échangées via une API externe, il n'est donc pas nécessaire de conserver les données en interne et aucune base de données n'est utilisée. On vous demandera donc une migration, mais ce n'est pas nécessaire. http://127.0.0.1:8000/ Pour vérifier le fonctionnement.

Déployer sur heroku

gestion git

$ git init
$ git add .
$ git commit -m "Initial commit"

Créer un référentiel dans heroku $ heroku create [nom de l'application] Déployer sur heroku $ git push heroku master Vérifier si déployé $ heroku open

Tester l'URL du webhook

Tapez l'URL de l'application heroku dans l'URL du webhook pour vérifier. (Au moment du test, l'application elle-même ne doit rien faire à la demande) image En cas d'échec, vous serez informé de l'état de l'erreur. En cas de succès, rien ne s'affiche.

Cette fois heroku logs -t En affichant le journal avec, vous pouvez vérifier comment la méthode de vérification POST est traitée. Si 200 est renvoyé dans l'état HTTP, il réussit.

Test du client LINE

Parlons au bot depuis l'application LINE. En cas de succès, vous devriez voir un message texte lancé avec la méthode POST du journal d'heroku.

J'étais accro à

・ La demande POST a été rejetée par csrf tout le temps django a pris des mesures pour protéger les applications Web des attaques CSRF (Cross site request for geries). En gros, c'est une fonction qui n'accepte pas les requêtes POST autres que l'itinéraire normal. Pour cette raison, par exemple, si vous lancez un POST à l'application avec curl, et bien sûr que vous essayez de vérifier à partir de LINE, vous obtiendrez une erreur. Puisqu'il s'agit d'un test, désactivez temporairement la protection CSRF

settings.py


    MIDDLEWARE_CLASSES = [
                 ...
    'django.middleware.csrf.CsrfViewMiddleware', #<=Commentez ici
                 ...
]

-Lors du passage de la vérification de l'API LINE, j'avais implémenté l'implémentation pour ajouter un traitement à la requête depuis le début, donc même si je lançais la requête de LINE, l'erreur continuait à revenir et j'en souffrais. (La réponse selon la spécification de format de réponse LINE n'a pas pu être retournée) Par conséquent, au moment du test, il est préférable de ne pas implémenter la partie traitement de la requête, mais de voir uniquement la réception de la requête POST et la simple réponse à celle-ci dans le journal. -J'ai eu du mal car j'ai fait une erreur dans le format de l'en-tête lorsque j'ai fait une demande à l'API LINE. (Il n'a pas été envoyé correctement au format dictionnaire.) Si une erreur est renvoyée, veuillez également vérifier que l'en-tête et le corps sont décrits dans le bon format.

référence

Comment déployer l'application Django sur heroku en seulement 5 minutes Ne perdez pas contre Ruby! Comment exécuter Python (Django) sur Heroku

Recommended Posts

J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai fait un Line-bot avec Python!
J'ai essayé de créer LINE-bot avec Python + Flask + ngrok + LINE Messaging API
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
Création du wrapper d'API Qiita Python "qiipy"
J'ai créé un LINE BOT qui renvoie une image de riz terroriste en utilisant l'API Flickr
J'ai effectué un processus de connexion / déconnexion en utilisant Python's Bottle.
[API LINE Messaging] Créez un menu riche avec Python
[Python] J'ai créé un LINE Bot qui détecte les visages et effectue le traitement de la mosaïque.
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
J'ai créé un lecteur de flux rapide en utilisant feedparser en Python
J'ai créé un démon avec Python
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
J'ai créé un jeu appelé Battle Ship en utilisant pygame et tkinter
J'ai créé une bibliothèque Python pour appeler l'API de LINE WORKS
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
J'ai créé une bibliothèque de wrapper Python pour l'API de reconnaissance d'images docomo.
J'ai créé un chat chat bot avec Tensor2Tensor et cette fois cela a fonctionné
J'ai fait un programme de gestion de la paie en Python!
J'ai fait un compteur de caractères avec Python
J'ai essayé de dessiner une ligne en utilisant une tortue
Débutant: j'ai créé un lanceur à l'aide d'un dictionnaire
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai fait une carte hexadécimale avec Python
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
Démarrez un serveur Web en utilisant Bottle et Flask (j'ai également essayé d'utiliser Apache)
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
Je souhaite créer une application Web en utilisant React et Python flask
J'ai créé un robot musical en utilisant discord.py et l'API Google Drive (testé avec Docker → déployé sur Heroku)
J'ai fait un robot de remplacement de tampon avec une ligne
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé la détection d'objets en utilisant Python et OpenCV
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
Créer une carte Web en utilisant Python et GDAL
J'ai créé un Bot LINE avec Serverless Framework!
J'ai essayé de lire un fichier CSV en utilisant Python
Lancer un serveur Web avec Python et Flask
Préparer un pseudo serveur API à l'aide d'actions GitHub
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
J'ai créé un programme cryptographique César en Python.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
[LINE Messaging API] Je souhaite envoyer un message du programme à tout le monde LINE
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!