- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试从 Viber 机器人向订阅用户发送消息。我可以获得订阅的用户 ID,但是当我发送消息时,出现 500 错误。
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
更新:根据mingaleg的建议,我添加了viber.set_webhook('https://xxx.xxx.xxx.xxx:yyyy')
到 incoming()
函数,现在出现另一个错误:
异常:失败,状态:1,消息:结果[HttpRequest[POST/HTTP/1.1]@2c67393 > HttpResponse[null 0 null]@72391ae] javax.net.ssl.SSLHandshakeException:一般 SSLEngine 问题
证书是按照 this answer 中的建议生成的:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
最佳答案
由于您有一个 webhookNotSet
错误消息,您应该将您的机器人配置为有一个:
...
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
应该是您的 flask 服务器可以访问的那个。
关于python - 从 Viber 机器人向订阅用户发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55177070/
我的对话 fragment 有问题。我想使用 android:onClick 属性,因为在我看来代码更清晰。 在我的布局中,我有以下声明: 现在我的 DialogFragment import an
我正在制作一个使用谷歌地图的应用程序,我的主要 xml 代码 fragment 如下: 我的java代码是: import android.os.Bundle; import com.googl
是否可以在一个应用程序中有两个单独的首选项?我有一个在运行时连接到外部可执行文件(引擎)的应用程序。应用程序有自己的偏好,引擎也有。这两者不能混用,因为下次用户可能会决定加载具有不同偏好的完全不同的引
这是“Google Catalogs”应用程序的快照。我只是想知道我们如何进行这种图像重叠。![enter image description here][1] 最佳答案 您可以使用 FrameLay
我制作了一个 GridView ,其中添加了图像。但我的问题是它显示的 gridview 尺寸非常小,其中只有 3 张图像,就像图片中那样,我想在其中显示 9 张图像。 小号 但我希望 gridvie
我目前正在学习如何在 Android 上创建和使用服务。我查看了 android SDK 以获得进一步的帮助,我发现了 android:enable=[true |假]。 在SDK中是这样说的: Th
在完成我的 Android 游戏时,我希望用户将他/她的分数与高分进行比较。为此,我将当前的最高分存储在 SQLite 数据库中。但我认为我的方法(似乎可行)笨拙且丑陋: //in the final
出于某种原因,谷歌没有为模拟器提供任何通知声音,我找不到任何关于如何加载通知声音的引用。 我遇到过这个线程:How to play ringtone/alarm sound in Android但是除
我的应用有以下样式: true #ffffff true 它在我使用的大多数手机上运行良好。 (LG G5、Nexus 5、Moto G)但是当我在 LeEco Pro
我想确保我的网站阻止 Selenium 和 QTP 等自动化工具。有没有办法做到这一点 ?网站上的哪些设置会导致 Selenium 失败? 最佳答案 适当考虑对原始问题“你到底为什么要这样做?”的评论
我正在处理我的联系表,我希望它尽可能地防止垃圾邮件。我正在使用一些方法作为反击: 使用 JavaScript 正则表达式验证电子邮件的合法性 验证所有字段是否具有足够的值 制作一个不可见的字段来吸引机
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, over
我正在制作一个 android 应用程序,我需要在我的应用程序中显示远程图像我使用以下代码。但图像未显示: for(int i=0;i
我有几个与 Android 操作系统中的 AIML 集成相关的问题。我对 Java 了解不多,但我对 AIML 了解很多。我制作了 AIML 文件,现在我想做的是制作一个可以加载文件并在 GUI 中运
我有一个具有“登录”和“注销”操作的应用程序。用户登录后,在他们注销时堆栈中可能还剩下任意数量的 Activity 。 当用户注销时,我希望重置所有应用程序状态。我清除了我的磁盘缓存和首选项,但在运行
我是 Android 应用程序开发的新手,我正在尝试开发一个可用的应用程序。但是我创建的这个页面自创建以来就出现了问题,我真的希望有人能帮助我解决这个问题。每次我运行这个程序时,应用程序都会关闭。 这
我尝试将 android:imeOptions 设置为 actionSend、actionSearch。但是键盘上没有“发送”或“搜索”按钮,只有普通的“Enter”键。我还尝试设置不同的输入类型。
我想创建一种方法来查看相机坐标的中心是否在某个区域的边界内,如果是,则执行一些操作。 当我尝试这样做时,出现错误:Operator !不能应用于 LatLngBounds。 我也试过 if(temp
我正在尝试将视频录制时长限制为 5 秒。我正在使用默认相机和此代码: intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 5); 现在它在三星 S6 上工
我正在开发一款安卓游戏 https://code.google.com/p/something-soft/我的日志猫说它正试图激发游戏的 Intent ,但随后主线程似乎死了(出现 ActivityN
我是一名优秀的程序员,十分优秀!