1

我正在尝试开发一个kik bot。我使用 ngrok 将我的本地主机隧道连接到 ngrok 服务器。但是,每当我运行我的 python 程序并启动 ngrok 服务器并在我的手机上向机器人发送消息时,它返回的只是 404 错误。这是我的python代码

from flask import Flask, request, Response
import os 
from kik import KikApi, Configuration 
from kik.messages import messages_from_json, TextMessage

app = Flask(__name__)
BOT_USERNAME = os.environ.get('BOT_USERNAME') 
BOT_API_KEY =  os.environ.get('BOT_API_KEY') 

kik = KikApi(BOT_USERNAME, BOT_API_KEY)

kik.set_configuration(Configuration(webhook='my_webhook'))

@app.route('/incoming', methods=['POST'])
def incoming():
    if not kik.verify_signature(request.headers.get('X-Kik-Signature'),    request.get_data()):
    return Response(status=403) 

    messages = messages_from_json(request.json['messages'])

    for message in messages:
        if isinstance(message, TextMessage):
            kik.send_messages([
                TextMessage(
                    to=message.from_user,
                    chat_id=message.chat_id,
                    body=message.body
                )
            ])

return Response(status=200)


if __name__ == "__main__":
    app.run(port=8080, debug=True)

基本上,当我运行这个文件时,ngrok 和本地主机告诉我“404 未找到”。我按照此处的说明进行了 POST 以设置我的机器人配置。当我检查 webhook 的 kik 机器人时,它显示了 ngrok url。我还需要做些什么才能以普通用户的身份向机器人发送消息吗?我知道 kik 使用“X-Kik-Username”进行身份验证,所以这与它有关吗?

来自 ngrok 的错误消息

4

2 回答 2

1

I had a similar problem using Django with 404s because the webhook URL specified in the external platform was included in the request to local dev server by ngrok, so something like http://xyz.ngrok.io/https://xyz.ngrok.io/api/v1/webhooks was used as request. Using -host-header option solved it for me:

./ngrok http -host-header=rewrite 127.0.0.1:8000
于 2020-06-23T16:33:09.193 回答
0

我想到了。我将代码中的路线从“/incoming”更改为“/”。这样就可以做出正确的反应。

于 2016-08-17T16:45:05.143 回答