使用 FB Messenger 和 Django 的 Echo 机器人

Echo bot using FB Messenger and 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()

给出的教程 here 说 echo 函数应该在 FbBotView class 中。果然,当我将 echo 函数放入 class FbBotView 时,机器人无法回显。为什么会这样?

如果我看清楚了教程,它说的是外面而不是里面...

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

我认为原因是您在 Django 中使用 class-based views 而不是基于函数的视图,这就是为什么您不能在 FbBotView.[=13 中使用自定义方法的原因=]