【发布时间】:2023-12-13 18:43:02
【问题描述】:
我在this API 的帮助下开发了一个电报机器人,我尝试用 webhook 方法来实现它,首先我用 getUpdated 方法尝试了我的机器人,它就像一个魅力,但是当我将它更新为 webhook ,它似乎不起作用。
我用flask实现了webhook,完全遵循this example,除了ssl证书和IP,因为我有一个https域,所以我没有使用IP和自签名证书,而是使用了我的域。
然后我用邮递员测试了我的 webhook 并使用从 api.telegram.org 获得的数据发送请求,它再次工作,但是当我在 Telegram 应用程序中向我的机器人发送消息时,我在服务器中没有收到任何消息,似乎电报没有按预期发送消息。
编辑:在这里我放了我的代码以进行更多说明
WEBHOOK_HOST = 'mywebsite.com'
WEBHOOK_PORT = '8443'
WEBHOOK_LISTEN = '0.0.0.0'
WEBHOOK_SSL_CERT = "/etc/letsencrypt/live/mywebsite.com/cert.pem"
WEBHOOK_PRIV_CERT = "/etc/letsencrypt/live/mywebsite.com/privkey.pem"
WEBHOOK_URL_BASE = "https://%s:%s" % (WEBHOOK_HOST, WEBHOOK_PORT)
WEBHOOK_URL_PATH = "/%s/" % (TOKEN.get_token())
router = flask.Flask(__name__)
@router.route('/', methods=['GET', 'HEAD'])
def index():
return 'OK'
@router.route(WEBHOOK_URL_PATH, methods=['POST'])
def webhook():
if flask.request.headers.get('content-type') == 'application/json':
json_string = flask.request.json
print json_string["message"]["text"] # here I should get the text of message
return ''
else:
flask.abort(403)
bot.remove_webhook()
time.sleep(3)
bot.set_webhook(url=WEBHOOK_URL_BASE+WEBHOOK_URL_PATH,certificate=open(WEBHOOK_SSL_CERT, 'r'))
router.run(host=WEBHOOK_LISTEN, port=int(WEBHOOK_PORT), ssl_context=(WEBHOOK_SSL_CERT, WEBHOOK_PRIV_CERT), debug=True)
【问题讨论】:
-
是的,我知道,这并不能回答您的问题,但无论如何:也许您想考虑使用this python wrapper?它支持最新的 Telegram API(您的包装器不支持),并且有一个非常好的 Telegram 组,您可以在其中获得即时帮助,并且它的使用频率高于您使用的包装器。只是说...
-
@Endogen 我也会试试那个包装器,谢谢。能把你提到的电报群的链接给我吗?
标签: webhooks python-telegram-bot