2016-04-15 1 views

Antwort

3

Ich fuhr fort und portierte es selbst. Dargestellt sollte ich die Reichtümer teilen. Diese Code-Schnipsel Antwort auf jede Nachricht mit "Sie":

import json 
import requests 
from django.views.decorators.csrf import csrf_exempt 

FB_MESSENGER_ACCESS_TOKEN = "<Your Access Token>" 


def respond_FB(sender_id, text): 
    json_data = { 
     "recipient": {"id": sender_id}, 
     "message": {"text": text + " to you!"} 
    } 
    params = { 
     "access_token": FB_MESSENGER_ACCESS_TOKEN 
    } 
    r = requests.post('https://graph.facebook.com/v2.6/me/messages', json=json_data, params=params) 
    print(r, r.status_code, r.text) 

#this allows the requst to come in without requiring CSRF token 
@csrf_exempt 
def fb_webhook(request): 
    if request.method == "GET": 
     if (request.GET.get('hub.verify_token') == 'this_is_a_verify_token_created_by_sean'): 
      return HttpResponse(request.GET.get('hub.challenge')) 
     return HttpResponse('Error, wrong validation token') 

    if request.method == "POST": 
     body = request.body 
     print("BODY", body) 
     messaging_events = json.loads(body.decode("utf-8")) 
     print("JSON BODY", body) 
     sender_id = messaging_events["entry"][0]["messaging"][0]["sender"]["id"] 
     message = messaging_events["entry"][0]["messaging"][0]["message"]["text"] 
     respond_FB(sender_id, message) 
     return HttpResponse('Received.') 

And here is the FB Messenger Chatbot port on Gist

+0

Vielen Dank Sean! Was wäre das 'urllib'-Äquivalent für' r = requests.post ('https://graph.facebook.com/v2.6/me/messages', json = json_data, params = params) '? –

+0

Diese Website http://buddylindsey.com/basic-urllib-get-and-post-with-and-without-data/ bietet einige Informationen zum Thema. Ich vermute, dass der endgültige Code in etwa so aussehen würde: data = urllib.urlencode (json_data); u = urllib.urlopen ("https://graph.facebook.com/v2.6/me/messages? Access_token = [access_token]", Daten); – Sean

+0

Danke! Ich lasse den Code auf GAE laufen, also kann ich 'Anfragen' nicht verwenden. Ich habe den Code benutzt, auf den du gedeutet hast, und es führt irgendwie zu einem 'Bad Request 400'. Irgendeine Idee, was könnte falsch sein? –

1

Ich habe ein Python-Client für Facebook Messenger-Plattform geschrieben: messengerbot

1

Dies ist die Python-Probe mit fbmq library dass funktioniert für mich:

Echo Beispiel:

from flask import Flask, request 
from fbmq import Page 

page = fbmq.Page(PAGE_ACCESS_TOKEN) 

@app.route('/webhook', methods=['POST']) 
def webhook(): 
    page.handle_webhook(request.get_data(as_text=True)) 
    return "ok" 

@page.handle_message 
def message_handler(event): 
    page.send(event.sender_id, event.message_text) 
Verwandte Themen