LINEbot ist 1on1, nicht wahr? Ist es nicht möglich, es einer Gruppe wie einem normalen Bot hinzuzufügen?
Übrigens, LINE Bot erhöht die Hürde, wo ein SSL-Server benötigt wird. Machen wir das schnell mit https-ready GAE. Das Problem ist, wie man die IP während des Meg-Sendens repariert, aber das ist schlammig. Ich werde es später beschreiben.
Ich werde flask verwenden, also lasst uns lib im Projektordner graben und es pip
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"Nackt%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
Lassen Sie / callback
eine LINE-Server-Nachricht senden.
https://developers.line.me/channels/<YOUR-CHANNEL-ID>
Registrieren Sie es in der Rückruf-URL auf der Dev-Konsole von LINE.
https://your-gae.appspot.com:443/callback
Lassen Sie uns die obige GAE-App veröffentlichen und an den Bot twittern. Derzeit erfolgt keine Antwort. Dies liegt daran, dass die IP nicht auf dem LINEbot-Server registriert ist. In GAE sind die IP, die dem veröffentlichten App-Namen zugeordnet ist, und die IP des Servers, auf dem urlfetch ausgeführt wird, angegeben Da sie nicht identisch sind, müssen Sie tatsächlich LINEbot von GAE drücken, um die IP zu untersuchen.
Auf der Protokollierungskonsole von GCP wird Solch eine IP! Ich denke du bekommst einen Fehler wie
. Das ist der eine.
{"statusCode":"427","statusMessage":"Your ip address [Diese Adresse] is not allowed to access this API."}
Die IP-Adresse, die in dieser "diesmaligen Adresse" angezeigt wird, ist in der White List der Dev-Konsole von LINE registriert. Wenn Sie es mehrmals tun, sehen Sie möglicherweise einige Unterschiede. Bitte registrieren Sie sich jedes Mal. In meinem Fall habe ich ungefähr 3 registriert, aber es hat nicht mehr zugenommen. (GAE-Version wird geändert und bereitgestellt)
Jetzt erhalten Sie eine Antwort vom Bot.
Diese Implementierung dient nur zur Überprüfung. Es ist nur einfacher Text. Was passiert also, wenn Sie den Typ ändern, egal ob es sich um ein Video oder ein Bild handelt? Überprüfen Sie bitte das. Der Grund ist, dass es nicht einmal etwas Verkehr verarbeiten kann. Weitere Informationen finden Sie hier
In Zukunft plane ich, mit TQ eine Version zu erstellen, die asynchron übergeben wird.
Recommended Posts