【问题标题】:Telegram constantly send requests to the serverTelegram 不断向服务器发送请求
【发布时间】:2019-04-28 08:02:16
【问题描述】:

我正在使用电报机器人。

我在 BotFather 中注册了我的机器人,在 Google Cloud 上建立了“服务器”,设置了 webHook。

我的机器人工作正常,当我向我的机器人发送一些命令时,它会以预期的方式回复。我无法理解的是来自我的“服务器”(谷歌云)的消息。

当我分析它时,我有一种感觉,电报不断地向我的 API 发送请求,而不是我之前发送的每条消息,而是其中一些。

这是日志:

2019-04-28 07:47:51 default[20190428t121301]  [2019-04-28 07:47:51,838] ERROR in app: Exception on /telegram_notification [POST]
2019-04-28 07:47:51 default[20190428t121301]  Traceback (most recent call last):    File "/env/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app      response = self.full_dispatch_request()    File "/env/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request      rv = self.handle_user_exception(e)    File "/env/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception      reraise(exc_type, exc_value, tb)    File "/env/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise      raise value    File "/env/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request      rv = self.dispatch_request()    File "/env/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request      return self.view_functions[rule.endpoint](**req.view_args)    File "/home/vmagent/app/main.py", line 96, in telegram_notification      chat_id = data['message']['chat']['id']  KeyError: 'message'
2019-04-28 07:47:53 default[20190428t121301]  {'update_id': ...., 'edited_message': {'message_id': 360, 'from': {'id': ..., 'is_bot': False, 'first_name': '...', 'language_code': 'ru'}, 'chat': {'id': ..., 'first_name': '...', 'type': 'private'}, 'date': 1556389741, 'edit_date': 1556389827, 'text': '.......'}}
2019-04-28 07:47:53 default[20190428t121301]  [2019-04-28 07:47:53,191] ERROR in app: Exception on /telegram_notification [POST]
2019-04-28 07:47:53 default[20190428t121301]  Traceback (most recent call last):    File "/env/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app      response = self.full_dispatch_request()    File "/env/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request      rv = self.handle_user_exception(e)    File "/env/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception      reraise(exc_type, exc_value, tb)    File "/env/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise      raise value    File "/env/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request      rv = self.dispatch_request()    File "/env/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request      return self.view_functions[rule.endpoint](**req.view_args)    File "/home/vmagent/app/main.py", line 96, in telegram_notification      chat_id = data['message']['chat']['id']  KeyError: 'message'
2019-04-28 07:47:54 default[20190428t121301]  {'update_id': ....., 'edited_message': {'message_id': 360, 'from': {'id': ..., 'is_bot': False, 'first_name': '....', 'language_code': 'ru'}, 'chat': {'id': ...., 'first_name': '....', 'type': 'private'}, 'date': 1556389741, 'edit_date': 1556389812, 'text': 'Сафмуллин Данил: 3400.0,\nРаевская Вероника: 4000.0'}}fa
2019-04-28 07:47:54 default[20190428t121301]  [2019-04-28 07:47:54,123] ERROR in app: Exception on /telegram_notification [POST]
2019-04-28 07:47:54 default[20190428t121301]  Traceback (most recent call last):    File "/env/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app      response = self.full_dispatch_request()    File "/env/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request      rv = self.handle_user_exception(e)    File "/env/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception      reraise(exc_type, exc_value, tb)    File "/env/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise      raise value    File "/env/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request      rv = self.dispatch_request()    File "/env/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request      return self.view_functions[rule.endpoint](**req.view_args)    File "/home/vmagent/app/main.py", line 96, in telegram_notification      chat_id = data['message']['chat']['id']  KeyError: 'message'
2019-04-28 07:48:00 default[20190428t121301]  {'update_id': 448395744, 'message': {'message_id': 490, 'from': {'id': ..., 'is_bot': False, 'first_name': '...', 'language_code': 'ru'}, 'chat': {'id': ..., 'first_name': '...', 'type': 'private'}, 'date': 1556430040, 'voice': {'duration': 1, 'mime_type': 'audio/ogg', 'file_id': 'AwADAgADFgMAAjgJKEqOtfGGrxO9KgI', 'file_size': 4400}}}
2019-04-28 07:48:00 default[20190428t121301]  [2019-04-28 07:48:00,395] ERROR in app: Exception on /telegram_notification [POST]
2019-04-28 07:48:00 default[20190428t121301]  Traceback (most recent call last):    File "/env/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app      response = self.full_dispatch_request()    File "/env/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request      rv = self.handle_user_exception(e)    File "/env/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception      reraise(exc_type, exc_value, tb)    File "/env/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise      raise value    File "/env/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request      rv = self.dispatch_request()    File "/env/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request      return self.view_functions[rule.endpoint](**req.view_args)    File "/home/vmagent/app/main.py", line 97, in telegram_notification      text = data['message']['text']  KeyError: 'text'

如您所见,有些消息发送了无数次,有时请求只是丢弃,我得到了 Traceback KeyError。

我不明白这种行为。

1) 为什么我收到一些相同的消息? 我自己不会将它发送给我的机器人。没有其他人可以发送它,因为检查了 chat_id。

2) 为什么会有一些 KeyError 的 Traceback? 我认为,根据 API-telegram 文档,Webhook 只允许在某些用户发送消息时发送请求?就像 Telegram 不断向我的服务器发送请求一样..

@app.route('/telegram_notification', methods=['POST'])
def telegram_notification():
    if request.method == "POST":
        data = request.get_json()
        print(data)
        if data is None:
            return jsonify({'success': True})
        # structure of data
        # {'update_id': <int>,
        # 'message':
        #           {'message_id': 138,
        #           'from':
        #               {'id': <int>,
        #               'is_bot': False,
        #               'first_name': '<str>',
        #               'language_code': 'ru'},
        #           'chat':
        #               {'id': <int>,
        #               'first_name': '<str>',
        #               'type': 'private'},
        #           'date': 1556302822,
        #           'text': 'hi'}
        #  }
        # print(data)
        chat_id = data['message']['chat']['id']
        text = data['message']['text']
        if chat_id == <int>:
            # processing
        return jsonify({'success': True})

另外,我不明白,为什么当我删除 Webhook 然后重新设置它,然后重新启动我的“服务器”时,我立即收到了来自我的机器人的十几条消息..

编辑一个

在我的telegram_notification()# proccessing 部分下,我正在请求外部 API

【问题讨论】:

  • 您是否在每次请求后都回复电报?
  • 我是,不是在向我的机器人发送消息后返回它,而是在每一秒后返回它。我在我的日志中看到它。我在没有任何努力的情况下收到对我的 API 的请求

标签: python-3.x flask telegram


【解决方案1】:

我想我明白了。

问题如下。我在telegram_notification() 中与外部 API 建立了连接,当我向我的机器人发送消息时,这导致请求外部 API,我期望得到响应,但外部 API 有时会返回 500 错误或 404 错误并且请求被丢弃。

我认为 Telegram 在经过合理的尝试次数后放弃并停止请求我的 Google Cloud 服务器,但 Telegram 继续尝试并发送请求,但它们放弃了,我在 telegram_notification() 中没有得到任何回报。 因此,我收到 KeyError 和 Telegram 不断向服务器发送请求,直到服务器正确响应。

现在我修复了从我的机器人收到数十条消息的外部 API。

目前我看到了预期的行为。

【讨论】:

  • 我有同样的问题,但答案并不清楚我们如何解决这个问题。 Telegram Docs 说“如果请求不成功,我们将在合理的尝试次数后放弃。”但是在一个 Bot 请求中,我的服务器发送了 500 错误,但过了一段时间我解决了这个问题并重新运行了服务器,但是我仍然收到 Telegram 的旧消息请求
  • @Shailendra2014 嗨!回复晚了非常抱歉。也许你可以重置你的 webhook,然后它会自动停止发送请求
猜你喜欢
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 2014-10-26
  • 2017-04-21
  • 2018-10-04
相关资源
最近更新 更多