我目前正在学习本教程。-带有Python教程#3的Telegram Bot:创建Bot和Webhook |项目
我已经设置了一个烧瓶服务器使用以下python代码:
from flask import Flask
from flask import request
from flask import Response
import json
app = Flask(__name__)
@app.route('/', methods=['POST', 'GET'])
def index():
if request.method == 'POST':
print(request)
message = request.json()
with open('telegram_request.json', 'w', encoding='utf-8') as filename:
json.dump(message, filename, ensure_ascii=False, indent=4)
# prevents telegram from spamming
return Response('Ok', status=200)
else:
return """
<h1> Flask Server </h1>
<h2> Up and running </h2>
"""
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=8443)
我在我的路由器中端口8443进行了转发,使服务器对外界可见(教程中的隧道步骤)。 域名“myprivatedomain.com:8443”现在重定向/指向设置的烧瓶服务器。
我正确设置了Telegram- api webhook,从Telegram得到以下响应代码:
在发送电报前的聊天:没有错误。 在聊天中发送消息后,出现以下错误:
根据本教程,您可以在Telegram发出POST请求时编写.json文件(参见示例:here)。我想保存Telegram webhook提供的message对象(如教程视频所示)。使用webhook获取更新比不断查询getUpdates()方法更好;该方法还返回旧消息。
我试着补充:
ssl_context='adhoc'
来
app.run(debug=True, host='0.0.0.0', port=8443)
使连接HTTPS。 虽然使用这个ssl_context,加载主页也是不可能的…
当用户在Telegram聊天中发送消息时——> Python会保存消息对象的.json文件。 问题来源StackOverflow 地址:/questions/59383792/python-flask-server-getting-code-400-errors-post-request-sent-from-telegram-w
为此需要启用SSL。Telegram正在尝试与服务器启动一个SSL会话,但你没有启用SSL,所以你看到了错误的请求。 ssl_context='adhoc'可能适用于测试应用程序,但我也有一个预感,telegram需要一个有效的SSL证书,而不仅仅是一个adhoc(或自签名证书)。请注意视频中URL左侧的锁以及缺少安全警告,该警告将与无效或自签名证书一起出现。 要确保SSL工作正常,请将ssl_context设置为adhoc,启动应用程序,并浏览到https://myprivatedomain.com:8443/index。如果您能浏览到它,那么Telegram也能浏览到它,当然是在获得有效证书之后。 接下来,要获得有效(且免费)的SSL证书,可以使用LetsEncrypt。 一旦您拥有了有效的SSL证书和密钥文件,您就可以将ssl_context参数传递给app.run,其中包含证书文件路径的元组和密钥文件的路径(“/path/to/fullchain”)。pem”、“路径/ / privkey.pem”) 完整运行的函数应该是这样的
app.run(debug=True, host='0.0.0.0', port=8443, ssl_context=("/path/to/fullchain.pem", "/path/to/privkey.pem"))
或者,您可以使用Apache或Nginx来使用SSL保护您的站点,并反向代理到您的bot。这些选项通常会在最终产品中使用,所以我理解,如果您现在不想使用它们,但这是一个很好的实践。 希望有帮助。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。