[PYTHON] Créez un bot LINE avec GoogleAppEngine / py. Version nue simple

LINEbot est 1on1, n'est-ce pas? N'est-il pas possible de l'ajouter à un groupe comme un bot commun?

En passant, LINE bot soulève l'obstacle où un serveur SSL est requis. Faisons cela rapidement avec GAE prêt pour https. Le problème est de savoir comment réparer l'IP pendant l'envoi de méga, mais c'est flou. Je le décrirai plus tard.

Bibliothèque Python

J'utiliserai flask, alors creusons lib dans le dossier du projet et pipons-le

sh


$ pip install -t lib flask

Source GAE

python



#!/usr/bin/env python
# -*- coding: utf-8 -*-

import logging
import urllib
import json
from google.appengine.ext import vendor
vendor.add('lib')
from google.appengine.api import urlfetch

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/')
def index():
  return 'hello my line bot'

@app.route('/callback', methods=["POST"])
def linebot():
  args = json.loads(request.get_data().decode('utf-8'))
  logging.debug('kick from line server,\n %s'%(args['result']))
  for msg in args['result']:
    kickBot( msg["content"]["from"], msg["eventType"], msg["content"]["text"] )
  return "{}"

def kickBot(tgt_id, event_type, msg_data):
  url = "https://trialbot-api.line.me/v1/events"
  form_fields = {
      "to": [str(tgt_id)],
      "toChannel": 1383378250,
      "eventType": 138311608800106203,
      "content":{
        "contentType":1,
        "toType":1,
        "text":u"Nu%s !"%(msg_data)
        }
      }
  logging.debug(form_fields)
  form_data = urllib.urlencode(form_fields)
  result = urlfetch.fetch(
    url=url,
    payload=json.dumps(form_fields,ensure_ascii=False),
    method=urlfetch.POST,
    headers={
                'Content-type':'application/json; charset=UTF-8',
                'X-Line-ChannelID':'<YOUR-ID>',
                'X-Line-ChannelSecret':'<YOUR-SECRET>',
                'X-Line-Trusted-User-With-ACL':'<YOUR-ACL>?',
            }
    )
  if result.status_code == 200:
    logging.debug(result.content)
  else:
    logging.debug(result.content)

yaml


application: <YOUR-GAE-NAME>
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.app

Paramètres du bot LINE

Paramètres de rappel

Demandez à / callback d'envoyer un message au serveur LINE. https://developers.line.me/channels/<YOUR-CHANNEL-ID> Enregistrez-le dans l'URL de rappel sur la console de développement de LINE.

https://your-gae.appspot.com:443/callback

Comment enregistrer une adresse IP de liste blanche

Lançons l'application GAE ci-dessus et tweetons au bot. Aucune réponse ne vient à ce stade. En effet, l'adresse IP n'est pas enregistrée sur le serveur LINEbot. Dans GAE, l'adresse IP associée au nom de l'application publiée et l'adresse IP du serveur sur lequel urlfetch est exécutée sont Comme ils ne sont pas les mêmes, vous devez réellement frapper LINEbot de GAE pour enquêter sur l'adresse IP.

Sur la console de journalisation de GCP, "Une telle adresse IP! Je pense que vous obtenez une erreur du type `. C'est le bon.

{"statusCode":"427","statusMessage":"Your ip address [Cette adresse] is not allowed to access this API."}

L'adresse IP qui apparaît dans cette "adresse cette fois" est enregistrée dans la liste blanche de la console de développement de LINE. Si vous le faites plusieurs fois, vous constaterez peut-être des différences. Veuillez vous inscrire à chaque fois. Dans mon cas, j'en ai enregistré environ 3 mais cela n'a plus augmenté. (La version GAE est modifiée et déployée)

Vous obtiendrez maintenant une réponse du bot.

スクショ.png

Mise en garde

Cette implémentation est juste pour vérifier. C'est juste un simple texte, alors que se passe-t-il si vous changez de type, que ce soit une vidéo ou une image? S'il te plaît vérifie le. La raison en est qu'il ne peut même pas gérer du trafic. Vérifiez ici pour plus de détails

À l'avenir, je prévois d'utiliser TQ pour créer une version qui sera transmise de manière asynchrone.

Recommended Posts

Créez un bot LINE avec GoogleAppEngine / py. Version nue simple
Créer un bot LINE WORKS avec Amazon Lex
Créer un LINE BOT (chat)
Faire un bot d'analyse morphologique de manière lâche avec LINE + Flask
[Super facile] Faisons un LINE BOT avec Python.
Faisons un langage simple avec PLY 1
Faisons un bot Twitter avec Python!
Les débutants en Python ont décidé de créer un bot LINE avec Flask (commentaire approximatif de Flask)
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
Créer un bot Twitter Trend avec heroku + Python
Créer un LINE BOT avec Minette pour Python
Créez un simple générateur d'images par points avec Flask
J'ai créé un Bot LINE avec Serverless Framework!
Créer un LINE BOT
[AWS] J'ai créé un BOT de rappel avec LINE WORKS
J'ai créé un bot de livre de compte de ménage avec LINE Bot
Créez un Slackbot simple avec un bouton interactif en python
Essayez de créer un jeu simple avec Python 3 et iPhone
Créer un robot LINE de retour de perroquet avec AWS Cloud9
J'ai essayé de faire LINE BOT avec Python et Heroku
[Pour jouer] Essayez de faire de Yuma un robot LINE (Python)
Qu'est-ce que Dieu? Créez un chatbot simple avec python
Faisons un robot Discord.
Créez une application d'apprentissage automatique avec ABEJA Platform + LINE Bot
Comment faire un simple jeu Flappy Bird avec Pygame
Jusqu'à ce que Django retourne quelque chose avec un robot de ligne!
Créez un Twitter BOT avec le SDK GoogleAppEngine pour Python
Faites une loterie avec Python
Faire un feu avec kdeplot
Créons un bot LINE en utilisant divers services [ngrok edition]
[AWS] J'ai créé un BOT de rappel avec LINE WORKS (implémentation)
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
Créez un simple OMR (lecteur de feuille de marque) avec Python et OpenCV
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
[Python] Créez votre propre bot LINE
Faisons une interface graphique avec python.
Faites un son avec le notebook Jupyter
Comment créer un bot slack
Faisons une rupture de bloc avec wxPython
Créer un système de recommandation avec python
Créer un filtre avec un modèle django
[LINE bot] Je suis un ranger! Partie 2
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Créer un itérateur de modèle avec PySide
Faire un joli graphique avec plotly
Créer un bot LINE avec Django
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
Comment créer un bot LINE à intelligence artificielle avec l'API de messagerie Flask + LINE
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
Tweet la météo avec bot
Créer un fichier power simple avec Python
Lecteur RSS simple réalisé avec Django
Faisons un jeu de shiritori avec Python
Afficher le temps d'attente de Disney avec le bot LINE