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.
J'utiliserai flask, alors creusons lib dans le dossier du projet et pipons-le
sh
$ pip install -t lib flask
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
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
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.
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