使用ngrok for kik时只返回404s

时间:2016-08-15 16:20:38

标签: python flask http-status-code-404 bots ngrok

我正在尝试开发一个kik机器人。我使用ngrok将我的localhost隧道传送到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和localhost告诉我" 404找不到"。我按照指示here进行了POST以设置机器人的配置。当我检查kh机器人的webhook时,它显示了ngrok网址。还有什么我需要做的就是能够像普通用户一样向机器人发送消息吗?我知道kik使用" X-Kik-Username"进行身份验证,那么这与它有关吗?

Error messages from ngrok

2 个答案:

答案 0 :(得分:0)

我明白了。我改变了代码中的路由" / incoming"到" /"。这样就可以做出正确的回应。

答案 1 :(得分:0)

我在使用带有404的Django时遇到了类似的问题,因为外部平台中指定的webhook URL被ngrok包含在对本地开发服务器的请求中,因此使用了http://xyz.ngrok.io/https://xyz.ngrok.io/api/v1/webhooks之类的请求。使用-host-header选项可以为我解决此问题:

./ngrok http -host-header=rewrite 127.0.0.1:8000