L'histoire de la mise en œuvre du sujet Facebook Messenger Bot avec python

Avez-vous lu l'article de TechCrunch? Vous n'avez pas lu? Alors ceci? Aussi ici ou ici / facebook-messenger-ai /) ou ici ou [ici](http://qiita.com/naoyashiga / items / 6c663f6e773490934312). Les articles augmentent rapidement. Ce sont tous les articles du 4/13. Si vous ne l'avez pas lu, veuillez le lire. Et si vous ne le savez pas, vous pouvez être impressionné. ** Vous pouvez désormais transformer Facebook Messenger en Bot. ** ** Vous pouvez le faire en un rien de temps avec un petit ajustement de l'API Facebook.

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

Comment puis-je faire?

Si vous lisez ici, tout est écrit, mais si vous lisez l'anglais, cela sera expliqué de manière appropriée pour ceux qui ont de l'urticaire. Je vais. Cela dit, il n'y a pas grand-chose à faire. Pour que je puisse comprendre aussi. À propos, cette fois, il est implémenté avec python × Tornado.

  1. Créez une application Facebook et une page Facebook comme vous le souhaitez.
  2. Authentifiez l'URL utilisée dans le webhook
  3. Écrivez un programme pour recevoir et envoyer des messages

Regardons-les dans l'ordre

1. Créez une application Facebook et une page Facebook comme vous le souhaitez.

Je l'ai fait vraiment correctement. Cette fois, c'est un essai de bot. Catégorie d'application? Je pense que WWW est bien. Après l'avoir fait, l'écran de réglage de l'application? S'il vous plaît allez à. スクリーンショット 2016-04-22 16.27.17.png Deuxième à partir du bas. Messenger-> Démarrer スクリーンショット 2016-04-22 17.04.35.png

Il y a un endroit pour sélectionner une page Facebook, alors définissez la page que vous avez créée précédemment. Vous obtiendrez un jeton d'accès pour la page.

2. Authentifiez l'URL utilisée dans le webhook

Qu'est-ce qu'un webhook? Vous ne le saviez pas, il semble que c'est une fonction qui vous permet de frapper n'importe quelle URL en cas de changement (http://blog.manaten.net/entry/573) Lorsqu'un message arrive au messager qui s'est transformé en robot, il semble être publié sur l'URL définie. Donc, vous devez d'abord authentifier l'URL.

Pour le moment, j'ai écrit un programme qui traite d'abord l'authentification. Utilisez Tornado avec python. Apparemment, il y a beaucoup de 5000 ports, donc 5000. FB official avait un processus pour js, donc je l'ai corrigé en python.

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()

Écrivez jusqu'à ce point et confirmez qu'il démarre au port 5000. Définissons l'URL du webhook.

Dans l'URL [http: // localhost: 5000 / webhook](http: // localhost: 5000 / webhook), le jeton sert à l'authentification, donc tout va bien, mais donnez-lui la même valeur que \ <VERIFY_TOKEN> utilisée dans la variable python. S'il vous plaît. Cette fois, j'ai utilisé quelque chose comme "test_fb". Vérifiez et enregistrez le champ de saisie suivant comme vous le souhaitez ... スクリーンショット 2016-04-22 17.12.42.png ···ne peux pas. On dit que c'est le https.

Que faire maintenant

Que devrais-je faire? Je veux juste l'utiliser pendant un certain temps, mais c'est fastidieux de le donner au serveur. [https: // localhost: 5000](https: // localhost: 5000) ne fonctionne pas (cela n'a pas fonctionné).

Conclusion

Il existe une application super utile appelée ngrok dans le monde. Le grand avantage est que vous pouvez temporairement exposer un port de votre hôte local au monde extérieur. De plus, il émet également une URL https. Génial. Les utilisateurs de Mac peuvent entrer avec brew install ngrok. Je suis entré, mais je ne suis pas allé bien, alors je l'ai docilement lâché de ngrok official. Il est sûr de suivre → ici pour l'utilisation. Officiel le plus fort. ./ngrok http 5000 Frappé スクリーンショット 2016-04-22 17.15.08.png Si une telle chose sort, vous gagnez. L'adresse transmise (partie ca27a10a) est assignée pour être différente à chaque fois, mais si vous l'essayez juste pour le moment, il ne devrait y avoir aucun problème. Définissez l'adresse https attribuée à l'URL du webhook plus tôt. Vous devriez pouvoir gagner ce temps.

3. Écrivez un programme pour recevoir et envoyer des messages

Il semble qu'une authentification soit requise avant l'envoi et la réception. curl -ik -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=<PAGE_ACCESS_TOKEN> \ <PAGE_ACCESS_TOKEN> est un jeton d'accès pour la page facebook. {"success":true} C'est ce qui ressort. Prêt quand ça sort ok

FB Official a un exemple de code pour js. Comme vous pouvez le voir, lorsqu'un message arrive, un message sera envoyé à l'URL du webhook. Par contre, lors de l'envoi d'un message, postez-le sur https://graph.facebook.com/v2.6/me/messages. Si vous arrivez ici, tout ce que vous avez à faire est d'écrire le code. Je posterai le code que j'ai écrit pour le moment. \ <VERIFY_TOKEN> est l'URL pour l'authentification du webhook. Cette fois "test_fb". \ <PAGE_ACCESS_TOKEN> est un jeton d'accès à la page facebook comme ci-dessus.

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()

Le contenu du programme est extrêmement simple. Lorsqu'un message vole, ajoutez-y "echo:" et renvoyez-le. c'est tout. Vous pouvez créer un Bot avec juste cela (pour le moment). Je viens de récupérer ce que j'ai frappé. Mais c'est amusant.

c'est tout. Je vous remercie pour votre travail acharné. Veuillez nous envoyer une vie de bot amusante.

Recommended Posts

L'histoire de la mise en œuvre du sujet Facebook Messenger Bot avec python
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
L'histoire de Python et l'histoire de NaN
L'histoire du rubyiste aux prises avec Python :: Dict data with pycall
L'histoire de la création d'un bot de boîte à questions avec discord.py
Le 14 mars est le jour du rapport de circonférence. L'histoire du calcul du ratio de circonférence avec python
L'histoire de la création d'un pilote standard pour db avec python.
L'histoire de la visualisation des balises Qiita populaires avec Bar Chart Race
L'histoire de la création d'un module qui ignore le courrier avec python
Vérifier l'existence du fichier avec python
L'histoire de la manipulation des variables globales Python
L'histoire du traitement A du blackjack (python)
L'histoire de la création d'un Bot qui affiche les membres actifs dans un canal spécifique de Slack avec Python
L'histoire de l'apprentissage profond avec TPU
Préparer l'environnement d'exécution de Python3 avec Docker
Mathématiques Todai 2016 résolues avec Python
[Note] Exportez le html du site avec python.
Calculez le nombre total de combinaisons avec python
Vérifiez la date du devoir de drapeau avec Python
Traitement d'image? L'histoire du démarrage de Python pour
L'histoire de la lecture des données HSPICE en Python
Convertir le code de caractère du fichier avec Python3
[Python] Déterminez le type d'iris avec SVM
le zen de Python
L'histoire de sys.path.append ()
Extraire le tableau des fichiers image avec OneDrive et Python
L'histoire de Python sans opérateurs d'incrémentation et de décrémentation.
L'histoire de l'arrêt du service de production avec la commande hostname
Apprenez Nim avec Python (dès le début de l'année).
L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs
Détruire l'expression intermédiaire de la méthode sweep avec Python
Visualisez la gamme d'insertions internes et externes avec python
L'histoire de FileNotFound en Python open () mode = 'w'
Calculer le coefficient de régression d'une analyse de régression simple avec python
Résumé du flux de base de l'apprentissage automatique avec Python
Obtenez l'état de fonctionnement de JR West avec Python
L'histoire de la conversion automatique du langage de TypeScript / JavaScript / Python
J'ai essayé de trouver l'entropie de l'image avec python
Essayez de gratter les données COVID-19 Tokyo avec Python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
L'histoire de la construction de Zabbix 4.4
Une note sur l'utilisation de l'API Facebook avec le SDK Python
Vers la retraite de Python2
Unifier l'environnement de l'équipe de développement Python en commençant par Poetry
Visualisez les résultats des arbres de décision réalisés avec Python scikit-learn
Sakura L'histoire du fonctionnement de la bouteille Python sur Internet
Calculez des millions de chiffres dans la racine carrée de 2 avec python
L'histoire de l'introduction de Jedi (package de complétion automatique de python) dans emacs
J'ai écrit la grammaire de base de Python dans Jupyter Lab
Exécutons la commande à temps avec le bot discord
Exécutez l'intelligence de votre propre bibliothèque python avec VScode.
J'ai évalué la stratégie de négociation du système boursier avec Python.
Touchons l'API de Netatmo Weather Station avec Python. #Python #Netatmo
Histoire de trébucher avec le tableau Python