首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Viber Bot没有启动

Viber Bot没有启动
EN

Stack Overflow用户
提问于 2020-11-19 12:21:48
回答 1查看 780关注 0票数 0

我在服务器上通过gunicornflask运行我的Viber。但是,当我执行curl请求时,会出现错误

代码语言:javascript
运行
复制
* Curl_http_done: called premature == 0
* Connection #0 to host chatapi.viber.com left intact
{"status":1,"status_message":"Result[HttpRequest[POST / HTTP/1.1]@3f742f36 > HttpResponse[HTTP/1.1 500 INTERNAL SERVER ERROR]@16f0ed02] null","chat_hostname":"SN-CHAT-01_"}

当我打开我的网站时

代码语言:javascript
运行
复制
Method Not Allowed

The method is not allowed for the requested URL.

app.py

代码语言:javascript
运行
复制
from flask import Flask, request, Response

from viberbot import Api
from viberbot.api.bot_configuration import BotConfiguration
from viberbot.api.messages import KeyboardMessage
from viberbot.api.messages.text_message import TextMessage
import logging

from viberbot.api.viber_requests import ViberFailedRequest
from viberbot.api.viber_requests import ViberMessageRequest
from viberbot.api.viber_requests import ViberSubscribedRequest

from keyboard import keyboard_menu

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

app = Flask(__name__)
viber = Api(BotConfiguration(
    name='name',
    avatar='https://upload.wikimedia.org/wikipedia/commons/9/9a/Gull_portrait_ca_usa.jpg',
    auth_token='token'
))

@app.route('/', methods=['POST'])
def incoming():
    logger.debug("received request. post data: {0}".format(request.get_data()))
    # every viber message is signed, you can verify the signature using this method
    if not viber.verify_signature(request.get_data(), request.headers.get('X-Viber-Content-Signature')):
        return Response(status=403)

    # this library supplies a simple way to receive a request object
    viber_request = viber.parse_request(request.get_data())

    if isinstance(viber_request, ViberMessageRequest):
        message = TextMessage(text="test", keyboard=keyboard_menu)
        # lets echo back
        viber.send_messages(viber_request.sender.id, [
            message
        ])

    elif isinstance(viber_request, ViberSubscribedRequest):
        viber.send_messages(viber_request.get_user.id, [
            TextMessage(text="thanks for subscribing!")
        ])
    elif isinstance(viber_request, ViberFailedRequest):
        logger.warn("client failed receiving message. failure: {0}".format(viber_request))

    return Response(status=200)

wsgi.py

代码语言:javascript
运行
复制
from app import app

if __name__ == "__main__":
    app.run()

curl

代码语言:javascript
运行
复制
curl -# -i -g -H "X-Viber-Auth-Token:token" -d @viber.json -X POST https://chatapi.viber.com/pa/set_webhook -v

viber.json

代码语言:javascript
运行
复制
{
  "url": "https://my.site.com"
}

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-22 12:16:16

尝试将POST请求发送到该端点,就像Viber服务器会这样做,但使用cURL。这样你就能看到错误了。

或更新根记录器以查看500错误的原因。建议像在文档中那样配置它(有关更多细节,请参见这里 ):

代码语言:javascript
运行
复制
from logging.config import dictConfig

dictConfig({
    'version': 1,
    'formatters': {'default': {
        'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
    }},
    'handlers': {'wsgi': {
        'class': 'logging.StreamHandler',
        'stream': 'ext://flask.logging.wsgi_errors_stream',
        'formatter': 'default'
    }},
    'root': {
        'level': 'INFO',
        'handlers': ['wsgi']
    }
})

app = Flask(__name__)

最后一个想法是:

当我打开我的网站时 方法不允许,请求的URL不允许该方法。

这是因为当您在浏览器中打开该url时,它会发送GET请求,但是端点只接受POST http方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64911570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档