2016-06-05 6 views
1

Ich habe die folgende Ansicht unten angegeben:Echo bietet mit FB Messenger und Django

import json, requests 
from pprint import pprint 

from django.shortcuts import render 
from django.http import HttpResponse 
from django.views.generic import View 
from django.views.decorators.csrf import csrf_exempt 


def echo(fb_id, received_message): 
    post_message_url = 'https://graph.facebook.com/v2.6/me/messages?access_token=EAAPZASejNRr4BACmWieSuuFpTcK9ZCZB7sJzdZCnw0WS3lUI6RXIZArgwt8m8Qg9JMm4GZACyIFPCG0CnubFxxfzzRomplntBHhr4ZCKzupGJZCiLjnw9UrUmgQWbCGXi5at9vZBVVmKFYSGfDZCVoY83KIIO62XiFXAr6Ut2OQIS2aAZDZD' 
    reply = json.dumps({ 
     'recipient': {'id': fb_id}, 
     'message': {'text': received_message}, 
    }) 
    status = requests.post(post_message_url, headers={'Content-Type': 'application/json'}, data=reply) 
    pprint(status.json()) 


class FbBotView(View): 

    @csrf_exempt 
    def dispatch(self, request, *args, **kwargs): 
     return View.dispatch(self, self.request, *args, **kwargs) 

    def get(self, request, *args, **kwargs): 
     if self.request.GET['hub.verify_token'] == '25461261': 
      return HttpResponse(request.GET['hub.challenge']) 
     else: 
      return HttpResponse('Error: Incorrect verification token') 

    def post(self, request, *args, **kwargs): 
     incoming_message = json.loads(self.request.body.decode('utf-8')) 

     for entry in incoming_message['entry']: 
      for message in entry['messaging']: 
       if 'message' in message: 
        pprint(message) 
        echo(message['sender']['id'], message['message']['text']) 

     return HttpResponse() 

Das Tutorial gegeben here sagt, dass die Echofunktion innerhalb der FbBotView Klasse sein sollte. Sicher, der Bot schlägt nicht zurück, wenn ich die Echo-Funktion in die Klasse FbBotView setze. Warum ist das der Fall?

Antwort

1

Wenn ich das Tutorial deutlich zu lesen, es sagte außen, aber nicht in ...

# yomamabot/fb_yomamabot/views.py 
# This function should be outside the BotsView class 
def post_facebook_message(fbid, recevied_message):   
    post_message_url = 'https://graph.facebook.com/v2.6/me/messages?access_token=<page-access-token>' 
    response_msg = json.dumps({"recipient":{"id":fbid}, "message":{"text":recevied_message}}) 
    status = requests.post(post_message_url, headers={"Content-Type": "application/json"},data=response_msg) 
    pprint(status.json()) 

und ich denke, der Grund ist, dass Sie die class-based views statt funktionsbasierte Ansichten in Django verwenden, das ist, warum Sie kann nicht die selbstdefinierte Methode in FbBotView haben.