代码之家  ›  专栏  ›  技术社区  ›  Dmitrij Kultasev

从Viber bot向订阅用户发送消息

  •  0
  • Dmitrij Kultasev  · 技术社区  · 7 年前

    毒蛇

    from flask import Flask, request, Response
    from viberbot import Api
    from viberbot.api.bot_configuration import BotConfiguration
    from viberbot.api.messages.text_message import TextMessage
    
    app = Flask(__name__)
    
    viber = Api(BotConfiguration(
        name='PythonSampleBot',
        avatar='http://www.clker.com/cliparts/3/m/v/Y/E/V/small-red-apple-hi.png',
        auth_token='xxx-xxx-xxx'
    ))
    
    
    @app.route('/', methods=['POST'])
    def incoming():
        user_id = viber.get_account_info()['members'][0]['id']
        print(user_id)
        viber.send_messages(user_id, [
            TextMessage(text="thanks for subscribing!!!!!")
        ])
        return Response(status=200)
    
    
    if __name__ == "__main__":
        context = ('E:\\Docs\\learn_py\\viberbot\\cert.pem',
                   'E:\\Docs\\learn_py\\viberbot\\key.pem')
        app.run(host='0.0.0.0', port=4443, debug=True, ssl_context=context)
    

    :

    import json
    import requests
    
    webhook_url = 'https://xxx.xxx.xxx.xxx:4443'
    
    requests.post(
        webhook_url, data=json.dumps({"text": "Hello World"}),
        headers={'Content-Type': 'application/json'},
        verify='E:\\Docs\\learn_py\\viberbot\\cert.pem'
    )
    

    :

    Cfklv9HOJ6bXZcHMaTl9Gw==
    192.168.1.1 - - [15/Mar/2019 08:44:02] "POST / HTTP/1.1" 500 - Traceback (most recent call last):   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2309, in __call__
        return self.wsgi_app(environ, start_response)   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2295, in wsgi_app
        response = self.handle_exception(e)   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1741, in handle_exception
        reraise(exc_type, exc_value, tb)   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\_compat.py", line 35, in reraise
        raise value   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2292, in wsgi_app
        response = self.full_dispatch_request()   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
        rv = self.handle_user_exception(e)   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
        reraise(exc_type, exc_value, tb)   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\_compat.py", line 35, in reraise
        raise value   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
        rv = self.dispatch_request()   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1799, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)   File "E:\Docs\learn_py\viberbot\app.py", line 21, in incoming
        TextMessage(text="thanks for subscribing!!!!!")   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\viberbot\api\api.py", line 72, in send_messages
        to, self._bot_configuration.name, self._bot_configuration.avatar, message, chat_id)   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\viberbot\api\message_sender.py", line 27, in send_message
        return self._post_request(BOT_API_ENDPOINT.SEND_MESSAGE, payload)   File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\viberbot\api\message_sender.py", line 53, in _post_request
        raise Exception(u"failed with status: {0}, message: {1}".format(result['status'], result['status_message'])) Exception: failed with status: 10, message: webhookNotSet  * Detected change in 'E:\\Docs\\learn_py\\viberbot\\app.py', reloading
    

    更新 :根据建议 明加列格 我加了一句 viber.set_webhook('https://xxx.xxx.xxx.xxx:yyyy') incoming() 函数,现在出现另一个错误:

    Exception: failed with status: 1, message: Result[HttpRequest[POST / HTTP/1.1]@2c67393 > HttpResponse[null 0 null]@72391ae] javax.net.ssl.SSLHandshakeException: General SSLEngine problem

    证书是按照中的建议生成的 this answer :

    openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

    0 回复  |  直到 7 年前
        1
  •  2
  •   mingaleg    7 年前

    既然你有 webhookNotSet 错误消息您应该将bot配置为具有一个:

    ...
    viber = Api(BotConfiguration(
        name='PythonSampleBot',
        avatar='http://www.clker.com/cliparts/3/m/v/Y/E/V/small-red-apple-hi.png',
        auth_token='xxx-xxx-xxx'
    ))
    viber.set_webhook(webhook_url)
    ...
    

    webhook_url

        2
  •  2
  •   wowkin2    5 年前

    您不应该使用自签名证书。
    我可以推荐 Let's Encrypt 服务作为方便和免费的方式获得SSL证书为您的域。

    或者你可以用 ngrok Heroku (它免费提供HTTPS域)。