post方法是否在Flask中显示所有功能

问题描述 投票:0回答:1

我在我的代码中编写以下两个函数,以便能够处理传入的消息并通过bot响应Messenger上的用户:

@app.route('/', methods=['post'])
def webhook():
    # endpoint for processing incoming messaging events
    data = request.get_json()
    print(data)  # you may not want to log every incoming message in production, but it's good for testing
    if data["object"] == "page":
        for entry in data["entry"]:
            for messaging_event in entry["messaging"]:
                if messaging_event.get("message"):  # someone sent us a message
                    sender_id = messaging_event["sender"]["id"]        # the Facebook ID of the person sending you the message
                    recipient_id = messaging_event["recipient"]["id"]  # the recipient's ID, which should be your page's facebook ID
                    message_text = messaging_event["message"]["text"]  # the message's text
                    responseai = response(message_text, sender_id)
                    send_message(sender_id, responseai)
                if messaging_event.get("delivery"):  # delivery confirmation
                    pass
                if messaging_event.get("optin"):  # optin confirmation
                    pass
                if messaging_event.get("postback"):  # user clicked/tapped "postback" button in earlier message
                    pass
    return "Ok", 200





 @app.route('/', methods=['GET'])
 def verify():
    # when the endpoint is registered as a web hook, it must echo back
    # the 'hub.challenge' value it receives in the query arguments
    if request.args.get("hub.mode") == "subscribe" and request.args.get("hub.challenge"):
        if not request.args.get("hub.verify_token") == os.environs["VERIFY_TOKEN"]:
            return "Verification token mismatch", 403
        return request.args["hub.challenge"], 200

    return "Hello World", 200

当我访问我的Flahost所在的localhost:5000时,浏览器上只显示Hello World。我怎么知道web-hook功能正常?它还应该显示'Ok'吗?

python flask facebook-messenger http-method
1个回答
0
投票

您的浏览器不会发送POST请求,也不会发送一些额外的HTML和Javascript编码。测试钩子是否正常工作的最简单方法是使用curl command-line client

它可以发送GET和POST请求。测试你的GET处理程序是否正常工作:

curl -X GET "localhost:5000/?hub.verify_token=<YOUR_VERIFY_TOKEN>&hub.challenge=CHALLENGE_ACCEPTED&hub.mode=subscribe"

应该产生CHALLENGE_ACCEPTED作为输出。然后测试POST处理程序:

curl -H "Content-Type: application/json" -X POST "localhost:5000/" -d '{"sender":{"id":"<PSID>"}, "recipient":{"id":"<PAGE_ID>"}, "timestamp":1458692752478, "message":{"mid":"mid.1457764197618:41d102a3e1ae206a38", "text":"hello, world!", "quick_reply": {"payload": "<DEVELOPER_DEFINED_PAYLOAD>"}}}'

请参阅Messenger Platform入门文档的Setting Up Your Webhook sectionmessage received event,了解处理消息事件时的预期细节。

另一个选择是write Python tests覆盖相同:

import os
import pytest

import your_flask_module

@pytest.fixture
def client():
    your_flask_module.app.config['TESTING'] = True
    yield your_flask_module.app.test_client()

def test_register(client):
    args = {
        'hub.verify_token': os.environ["VERIFY_TOKEN"],
        'hub.challenge': 'CHALLENGE_ACCEPTED',
        'hub.mode': 'subscribe',
    }
    rv = client.get('/', params=args)
    assert b'CHALLANGE_ACCEPTED' in rv.data

def test_message_event(client):
    event = {
        "sender": {"id": "<PSID>"},
        "recipient": {"id":"<PAGE_ID>"},
        "timestamp": 1458692752478,
        "message": {
            "mid": "mid.1457764197618:41d102a3e1ae206a38",
            "text": "hello, world!",
            "quick_reply": {
                "payload": "<DEVELOPER_DEFINED_PAYLOAD>"
            }
        }
    }
    rv = client.post('/', json=event)
    assert rv.status_code == 200
© www.soinside.com 2019 - 2024. All rights reserved.