Python-Anfänger haben einen Chat-BOT erstellt, also habe ich versucht, zusammenzufassen, wie man es macht

Kürzlich habe ich ein AI / IOT-Seminar besucht. Wie wäre es mit dem Programmieren, um die Fähigkeiten der Angestellten und nicht der Ingenieure zu verbessern? Es war eine Art Geschichte, aber es genügte mir zu denken, dass ich Python berühren sollte! Vielen Dank! (* '∀')

Deshalb bin ich diesmal ein Anfänger von Python und versuche immer, LINEWORKS BOT in Python zu implementieren!

Produktionsumfeld

Sprache: Python WEB-Framework: Flasche Editor: Visual Studio-Code Server: Lokale Umgebung (ngrok)

Ich habe keinen Verifizierungsserver, daher ist er immer noch lokal (lacht). Ich liebe ngrok! (゚ Д ゚)

Umgebung

Für den detaillierten Bauvorgang habe ich mich auf die Artikel meiner Senioren bezogen! Vielen Dank! (* '▽') Ich werde es hier nicht erklären, also werde ich einen Link ('ω') No Petapeta posten

  1. Installieren Sie Python und Visual Studio Code auf Ihrem PC (https://qiita.com/hashito/items/8f77a61ffdfe9f3d0ecb).
  2. Install Flask
  3. [Veröffentlichen Sie Ihre lokale Datei mit ngrok nach außen](https://qiita.com/proken/items/80d20adcf24b2b53c149#%E3%82%84%E3%82%8A%E3%81%8B%E3%81 % 9F)
  4. [Einstellungen und Bot-Registrierung für die Verwendung von API mit LINEWORKS](https://qiita.com/tokotan/items/f615f4a62219d655436f#developer-console%E3%81%A7api%E3%82%92%E4%BD% BF% E3% 81% 86% E3% 81% 9F% E3% 82% 81% E3% 81% AE% E8% A8% AD% E5% AE% 9A% E3% 81% A8bot% E3% 82% 92% E7% 99% BB% E9% 8C% B2% E3% 81% 99% E3% 82% 8B)

Verwenden Sie für die Rückruf-URL bei der Registrierung von BOT die von ngrok erhaltene URL. Wenn Sie einen eigenen Server haben, verwenden Sie diesen natürlich. Damit sind die Einstellungen abgeschlossen!

Schließlich werden wir den BOT-Body mit Python ~ (* ´Д `) erstellen.

Erhalten Sie eine Nachricht an BOT

Empfangen Sie Nachrichten, die mit Flask an BOT gesendet wurden.

Flask ist Pythons Webframework. In Python scheint Django berühmter und hochfunktioneller zu sein, aber da es persönlich entwickelt wurde, habe ich mich für eine leichte Flasche entschieden.

Ich habe viel Wissen und es hilft wirklich! (* ^ ▽ ^ *)

Lassen Sie uns nun zuerst die empfangene Nachricht auf der Konsole anzeigen. So was.

1585814270.png

b'{"type":"message","source":{"accountId":"xxx@yyy-zzz"},"createdTime":1585813140779,"content":{"type":"text","text":"hoge"}}'

Ich werde den Code schreiben.

bot.py


from flask import Flask, request
app = Flask(__name__)

@app.route('/callback', methods=['POST'])
def callback():
    data = request.get_data()
    print(data)
    return "200 ok"

##Porteinstellung
if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=8000)

Wo ich gestolpert bin

--Um request.get_data () zu verwenden, um eine Nachricht zu empfangen

Es ist die erste Zeile, aber es scheint, dass ich die Nachricht nicht empfangen kann, wenn ich nur den Kolben importiere. Folgen Sie ihm mit ", request" und importieren Sie dann auch die Anfrage.

Ich werde wütend, wenn ich nicht eintrete

Zuerst war ich wütend, als ich die Rückkehr leerte.

TypeError: The view function did not return a valid response. 
The function either returned None or ended without a return statement.

Ich habe es vorerst erhalten! Deshalb habe ich "200 ok" zurückgegeben. … Vielleicht gibt es eine Möglichkeit, es richtig zurückzugeben, wie das Javascript res.send. (.-`ω-)

--Port ist standardmäßig 5000

Wenn Sie in der Porteinstellung nichts tun, ist der Standardwert 5000.

if __name__ == "__main__":
    app.run(debug=True) #Port ist auf 5000 eingestellt

Nein, 5000 ist in Ordnung, aber ngrok hat es auf 8000 gesetzt und es stellte sich heraus, dass "Ich kann keine Verbindung herstellen! (゚ Д ゚)" w

Ich bin darauf gestoßen, aber dank des Wissens meiner Senioren habe ich es selbst gelöst! Vielen Dank! (* '▽')

Fahren wir mit dem nächsten SCHRITT fort!

Antworten Sie, wenn Sie eine Nachricht erhalten

Ich benutze die LINEWORKS-API, um zu antworten, aber einige Leute haben die Bibliothek auf PyPI veröffentlicht! Vielen Dank! (* ^ ▽ ^ *) PyPI - lineworks 0.1.0

Lassen Sie es uns sofort installieren und verwenden.

pip install lineworks

Fügen Sie nach der Installation den Code hinzu, der sich auf das Beispiel bezieht.

lineworks_bot.py


from flask import Flask, request
app = Flask(__name__)

from lineworks import TalkBotApi
api_id = "your api id."
server_api_consumer_key = "your server api consumer key"
server_id = "your server id."
private_key = "your private key."
domain_id = "your domain id."
bot_no = "your bot number."

import json
@app.route('/callback', methods=['POST'])
def callback():
    data = json.loads(request.get_data())
    talk_bot = TalkBotApi(api_id, server_api_consumer_key, server_id, private_key, domain_id, bot_no)
    #Nachricht senden (Papagei zurückgeben)
    talk_bot.send_text_message(send_text=data['content']['text'], account_id=data['source']['accountId'])
    return "200 ok"

##Porteinstellung
if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=8000)

Führen Sie es mit Visual Studio Code aus und Sie können loslegen! Lass uns reden! (* ´ ▽ ` *)

1586240207.png

YES!NINJA! Sie haben den Papagei richtig zurückgegeben! Es ist ein Erfolg ♪

Wo ich gestolpert bin

Dies ist ein Stolperstein, aber wie Sie sehen können, ist der Authentifizierungsschlüssel extrem lang und weist seltsame Zeilenumbrüche auf. Es ist also ein wenig mühsam, " ----- BEGIN PRIVATE KEY ----- \ nMIIEvAIBADANBgkqhkiG9 ... \ n ----- END PRIVATE KEY ----- " \ nund\ n, so dass es wird Legen Sie den Authentifizierungsschlüssel dazwischen und schreiben Sie ihn in eine Zeile.

Verwenden Sie es, nachdem Sie es mit Lasten in der JSON-Bibliothek analysiert haben. Wenn Sie jedoch versuchen, mit data.source.accountId und Parametern wie Javascript damit umzugehen, tritt ein Fehler auf. (Es ist sehr wahrscheinlich, dass meine Methode falsch ist ...) Schreiben Sie daher beim Extrahieren des Inhalts wie oben beschrieben "data ['source'] ['accountId']". Im Beispiel werden "text" und "accountId" in den JSON-Daten extrahiert und verwendet.

Wie auch immer, es ist geschafft! (^ O ^)

abschließend

Vielen Dank, dass Sie bisher bei uns geblieben sind.

Nein, was ich mache, ist das gleiche wie gewöhnlich, aber verschiedene Sprachen sind unterschiedlich. Aber ich habe das Gefühl, ein bisschen miteinander auszukommen!

Mit dieser Dynamik möchte ich BOT entwickeln, das mit APIs für maschinelles Lernen funktioniert. wir sehen uns! (^^) /

Ich habe es als Referenz m (_ _) m verwendet

LINEWORKS Developers Installieren Sie Python und Visual Studio Code unter Windows 10 (Version April 2020) Einfach zu verwendende Flasche LINEbot-Entwicklung, ich möchte den Vorgang in der lokalen Umgebung überprüfen Erste Bot-Entwicklung in LINE WORKS! (Teil 1) Verwenden Sie request.get_data (), um die von Flask veröffentlichten Daten so zu erhalten, wie sie sind Erstellt eine Python-Bibliothek zum Aufrufen der LINE WORKS-API

Recommended Posts

Python-Anfänger haben einen Chat-BOT erstellt, also habe ich versucht, zusammenzufassen, wie man es macht
[Python] Ich habe versucht, eine stabile Sortierung zu implementieren
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Wie man einen lockeren Bot macht
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren
[Git] Ich habe versucht, anhand eines konkreten Beispiels zu verstehen, wie man Git Stash verwendet.
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich habe eine Web-API erstellt
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
[Zaif] Ich habe versucht, den Handel mit virtuellen Währungen mit Python zu vereinfachen
Ich möchte ein Spiel mit Python machen
Ich las "Wie man ein Hacking Lab macht"
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Ein Python-Anfänger hat versucht, bei einem IT-Unternehmen zu praktizieren [Tag 2 Chatbot-Umfrage]
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren [Tag 1 Entwicklungsprozess]
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
Als ich versuchte, eine VPC mit AWS CDK zu erstellen, konnte ich es aber nicht schaffen
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
[Python] Ich habe versucht, eine Shiritori-KI zu erstellen, die den Wortschatz durch Schlachten verbessert
Ich habe versucht, einen Übersetzungs-BOT zu erstellen, der mit Discord unter Verwendung von Googletrans funktioniert
Ich habe die Größenänderung von TensorFlow nicht verstanden und sie daher visuell zusammengefasst.
Beachten Sie, dass ich süchtig danach war, TensowFlow einzurichten
Der tree.plot_tree von scikit-learn war sehr einfach und bequem, daher habe ich versucht, zusammenzufassen, wie man es einfach benutzt.
Ich habe versucht, einen "verdammt großen Literaturkonverter" zu machen.
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
So erstellen Sie ein Python-Paket mit VS Code
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat