Die Geschichte der Implementierung des Themas Facebook Messenger Bot mit Python

Haben Sie den Artikel von [TechCrunch] gelesen (http://jp.techcrunch.com/2016/04/13/20160412agents-on-messenger/)? Hast du nicht gelesen? Dann dies? Auch hier oder hier / facebook-messenger-ai /) oder hier oder hier / items / 6c663f6e773490934312). Artikel nehmen rasant zu. Dies sind alle Artikel vom 13.04. Wenn Sie es nicht gelesen haben, lesen Sie es bitte. Und wenn Sie es nicht wissen, können Sie beeindruckt sein. ** Sie können jetzt Facebook Messenger in einen Bot verwandeln. ** **. Mit ein wenig Optimierung der Facebook-API können Sie dies in kürzester Zeit tun.

スクリーンショット 2016-04-22 14.01.49.png

wie kann ich?

Wenn Sie [hier] lesen (https://developers.facebook.com/docs/messenger-platform/quickstart), ist alles geschrieben, aber wenn Sie Englisch lesen, wird es für diejenigen mit Urtikaria angemessen erklärt. Ich werde. Trotzdem gibt es wenig zu tun. Also konnte ich auch verstehen. Dieses Mal ist es übrigens mit Python × Tornado implementiert.

  1. Erstellen Sie eine Facebook-App und eine Facebook-Seite nach Ihren Wünschen.
  2. Authentifizieren Sie die im Webhook verwendete URL
  3. Schreiben Sie ein Programm zum Empfangen und Senden von Nachrichten

Schauen wir sie uns der Reihe nach an

1. Erstellen Sie eine Facebook-App und eine Facebook-Seite nach Ihren Wünschen.

Ich habe es wirklich richtig gemacht. Diesmal ist es ein Bot-Versuch. App-Kategorie? Ich denke, WWW ist in Ordnung. Nachdem Sie es gemacht haben, wird der Einstellungsbildschirm der Anwendung? Bitte gehe zu. スクリーンショット 2016-04-22 16.27.17.png Zweiter von unten. Messenger-> Start スクリーンショット 2016-04-22 17.04.35.png

Hier können Sie eine Facebook-Seite auswählen. Legen Sie daher die zuvor erstellte Seite fest. Sie erhalten ein Zugriffstoken für die Seite.

2. Authentifizieren Sie die im Webhook verwendete URL

Was ist ein Webhook? Wussten Sie nicht, dass es sich anscheinend um eine Funktion handelt, mit der Sie bei Änderungen auf eine beliebige URL zugreifen können (http://blog.manaten.net/entry/573)? Wenn eine Nachricht an den Messenger kommt, der sich in einen Bot verwandelt hat, scheint sie an die festgelegte URL zu posten. Zuerst müssen Sie die URL authentifizieren.

Zur Zeit habe ich ein Programm geschrieben, das zuerst die Authentifizierung verarbeitet. Verwenden Sie Tornado mit Python. Anscheinend gibt es viele 5000 Ports, also 5000. FB-Beamter hatte einen Prozess für js, also habe ich ihn auf Python behoben.

server.py


# -*- coding: utf-8 -*-
import tornado.ioloop
import tornado.web
import json

verify_token = <VERIFY_TOKEN>

class WebHookHandler(tornado.web.RequestHandler):
    def get(self):
        if self.get_argument("hub.verify_token", "") == verify_token:
            self.write(self.get_argument("hub.challenge", ""));
        else:
            self.write('Error, wrong validation token');


application = tornado.web.Application([
    (r"/webhook", WebHookHandler)
])


if __name__ == "__main__":
    application.listen(5000)
    tornado.ioloop.IOLoop.instance().start()

Schreiben Sie bis zu diesem Punkt und bestätigen Sie, dass es an Port 5000 gestartet wird. Legen wir die URL für den Webhook fest.

Die URL lautet [http: // localhost: 5000 / webhook](http: // localhost: 5000 / webhook), und das Token dient zur Authentifizierung. Alles ist in Ordnung, aber machen Sie den gleichen Wert wie \ <VERIFY_TOKEN>, der in der Python-Variablen verwendet wird. Bitte. Diesmal habe ich so etwas wie "test_fb" verwendet. Überprüfen und speichern Sie das folgende Eingabefeld nach Ihren Wünschen ... スクリーンショット 2016-04-22 17.12.42.png ···kann nicht. Es soll das https sein.

Was nun

Was soll ich machen? Ich möchte es nur für eine Weile verwenden, aber es ist mühsam, es dem Server zu geben. [https: // localhost: 5000](https: // localhost: 5000) funktioniert nicht (es hat nicht funktioniert).

Fazit

Es gibt eine super nützliche Anwendung namens ngrok auf der Welt. Das Tolle ist, dass Sie einen Port Ihres lokalen Hosts vorübergehend der Außenwelt aussetzen können. Darüber hinaus wird eine https-URL ausgegeben. Toll. Mac-Benutzer können mit Brew Install Ngrok teilnehmen. Ich trat ein, aber ich ging nicht gut, also ließ ich es gehorsam von ngrok offiziell fallen. Es wird sicher → hier zur Verwendung folgen. Offiziell am stärksten. ./ngrok http 5000 Schlagen スクリーンショット 2016-04-22 17.15.08.png Wenn so etwas herauskommt, gewinnen Sie. Die weitergeleitete Adresse (Teil ca27a10a) wird jedes Mal anders zugewiesen. Wenn Sie sie jedoch vorerst nur ausprobieren, sollte dies kein Problem darstellen. Stellen Sie die der Webhook-URL zuvor zugewiesene https-Adresse ein. Sie sollten in der Lage sein, diese Zeit zu sparen.

3. Schreiben Sie ein Programm zum Empfangen und Senden von Nachrichten

Es scheint, dass vor dem Senden und Empfangen eine Authentifizierung erforderlich ist. curl -ik -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=<PAGE_ACCESS_TOKEN> \ <PAGE_ACCESS_TOKEN> ist ein Zugriffstoken für die Facebook-Seite. {"success":true} Das kommt heraus. Bereit, wenn es in Ordnung kommt

FB Official enthält Beispielcode für js. Wie Sie sehen können, wird ein Beitrag bei einer Nachricht an die URL des Webhooks gesendet. Wenn Sie eine Nachricht senden, senden Sie sie andererseits an https://graph.facebook.com/v2.6/me/messages. Wenn Sie hierher kommen, müssen Sie nur den Code schreiben. Ich werde den Code, den ich geschrieben habe, vorerst veröffentlichen. \ <VERIFY_TOKEN> ist die URL für die Webhook-Authentifizierung. Diesmal "test_fb". \ <PAGE_ACCESS_TOKEN> ist ein Zugriffstoken auf die Facebook-Seite wie oben.

server.py


#!/bin/env python
# -*- coding: utf-8 -*-
import tornado.ioloop
import tornado.web
import json
import requests

verify_token = <VERIFY_TOKEN>
token = <PAGE_ACCESS_TOKEN>

def sendTextMessage(sender, text):
  if len(text) <= 0:
      return
  url = 'https://graph.facebook.com/v2.6/me/messages'
  headers = {'content-type': 'application/json'}
  data = {
        "recipient": {
            "id":sender
        },
        "message":  {
          "text":"echo: " + text
        }
  }
  params = {"access_token":token}

  r = requests.post(url, params=params, data=json.dumps(data), headers=headers)
  #print r.text

class WebHookHandler(tornado.web.RequestHandler):
    def get(self):
        if self.get_argument("hub.verify_token", "") == verify_token:
            self.write(self.get_argument("hub.challenge", ""));
        else:
            self.write('Error, wrong validation token');
    def post(self):
        print "receive!"
        data = json.loads(self.request.body)
        print data
        messaging_events = data["entry"][0]["messaging"]
        text = ""
        for event in messaging_events:
            sender = event["sender"]["id"];
            if ("message" in event and "text" in event["message"]):
                text = event["message"]["text"];
                sendTextMessage(sender, text)


application = tornado.web.Application([
    (r"/webhook", WebHookHandler)
])

if __name__ == "__main__":
    application.listen(5000)
    tornado.ioloop.IOLoop.instance().start()

Der Inhalt des Programms ist sehr einfach. Wenn eine Nachricht gesendet wird, fügen Sie "echo:" hinzu und geben Sie sie zurück. das ist alles. Mit genau dem können Sie (vorerst) einen Bot erstellen. Ich bekomme gerade zurück, was ich getroffen habe. Aber es macht Spaß.

das ist alles. Danke für deine harte Arbeit. Bitte senden Sie uns ein lustiges Bot Life.

Recommended Posts

Die Geschichte der Implementierung des Themas Facebook Messenger Bot mit Python
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
Die Geschichte von Python und die Geschichte von NaN
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Der 14. März ist der Tag des Umfangsverhältnisses. Die Geschichte der Berechnung des Umfangsverhältnisses mit Python
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Die Geschichte der Visualisierung beliebter Qiita-Tags mit Bar Chart Race
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Überprüfen Sie die Existenz der Datei mit Python
Die Geschichte der Manipulation globaler Python-Variablen
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
Die Geschichte des tiefen Lernens mit TPU
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
2016 Todai Mathematik mit Python gelöst
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Bildverarbeitung? Die Geschichte, Python für zu starten
Die Geschichte des Lesens von HSPICE-Daten in Python
Konvertieren Sie den Zeichencode der Datei mit Python3
[Python] Bestimmen Sie den Typ der Iris mit SVM
der Zen von Python
Die Geschichte von sys.path.append ()
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Die Geschichte des Stoppens des Produktionsdienstes mit dem Befehl hostname
Lerne Nim mit Python (ab Anfang des Jahres).
Die Geschichte des Teilens der Pyenv-Umgebung mit mehreren Benutzern
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Holen Sie sich mit Python den Betriebsstatus von JR West
Die Geschichte der automatischen Sprachkonvertierung von TypeScript / JavaScript / Python
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Die Geschichte des Baus von Zabbix 4.4
Ein Hinweis zum Aufrufen der Facebook-API mit dem Python SDK
Auf dem Weg zum Ruhestand von Python2
Vereinheitlichen Sie die Umgebung des Python-Entwicklungsteams, beginnend mit Poetry
Visualisieren Sie die Ergebnisse von Entscheidungsbäumen, die mit Python scikit-learn erstellt wurden
Sakura Die Geschichte, wie die Python-Flasche im Internet funktioniert hat
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Die Geschichte der Einführung von Jedi (automatisches Vervollständigungspaket von Python) in Emacs
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Lassen Sie uns den Befehl pünktlich mit dem Bot der Zwietracht ausführen
Führen Sie die Intelligenz Ihrer eigenen Python-Bibliothek mit VScode aus.
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
Stolpern Geschichte mit Python-Array