2016-04-15 35 views

回答

3

我繼續並自己移植它。我想應該分享這些財富。這個片段響應與每封郵件 「給你!」:

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

非常感謝肖恩! 'r = requests.post('https://graph.facebook.com/v2.6/me/messages',json = json_data,params = params)''urllib'相當於什麼? –

+0

本網站http://buddylindsey.com/basic-urllib-get-and-post-with-and-without-data/提供有關該主題的一些信息。我懷疑最終的代碼看起來像這樣: data = urllib.urlencode(json_data); u = urllib.urlopen(「https://graph.facebook.com/v2.6/me/messages?access_token = [access_token]」,data); – Sean

+0

謝謝!我在GAE上運行代碼,所以不能使用'requests'。我使用了你指向的代碼,並以某種方式導致了「錯誤的請求400」。任何想法可能是錯的? –

1

我寫了一個Python客戶端爲Facebook Messenger平臺:messengerbot

1

這是使用fbmq library蟒蛇樣品是工作對我來說:

回聲例如:

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)