텔레 그램 봇은 다음 코드를 실행하지 않고 계속 응답합니다 (웹훅 사용).

루시

GAE에서 멀티 플레이어 게임을 위해 텔레 그램 봇을 호스팅하려고하는데 여기에서 웹 후크가 사용됩니다. 내 데이터베이스 부분은 다음과 같습니다.

class Game(ndb.Model):
    chat_id = ndb.IntegerProperty(required = True)
    mission_num = ndb.IntegerProperty(default =1)
    round_num = ndb.IntegerProperty(default =1)

class Player(ndb.Model):
    user_id = ndb.IntegerProperty(required=True)
    player_role = ndb.StringProperty (
    choices = ['spy','resistance'])

웹 후크 핸들러 아래의 코드 부분 :

        if text.startswith('/'):
        if text == '/start':
            reply('Bot enabled')
            setEnabled(chat_id, True)
        elif text == '/stop':
            reply('Bot disabled')
            setEnabled(chat_id, False)
        elif text == '/newgame':
            if chat_type == 'group':
                existing_game = Game.query (Game.chat_id == chat_id).get()
                if existing_game:
                    reply ("game is alr intitiated liao")
                else:
                    ##create a new game here 
                    #still stuck here 
                    ##========================##
                    #reply("keep replying this line")
                    ##========================##
                    new_game = Game (
                        chat_id = chat_id,
                        id = chat_id
                        )    
                    curr_game_key = new_game.put()

                    new_player = Player (
                        parent = curr_game_key,
                        user_id = fr_user_id,
                        id = fr_user_id)
                    new_player.put()
                    reply("waiting for more friends to join")
            else:
                reply('game must be conducted within a group chat! jio more friends!')
        else:
            reply('What command?')
    else:
        if getEnabled(chat_id):
            reply('I got your message! (but I do not know how to answer)')
        else:
            logging.info('not enabled for chat_id {}'.format(chat_id))

문제는 그룹 채팅에서 '/ newgame'을 보내면 아무 것도 나에게 다시 보내지지 않는다는 것입니다. 다음 줄의 주석 처리를 제거하면 내 봇이 계속해서 "이 줄에 계속 답장"을 보냅니다.

#reply("keep replying this line")

회신 기능 :

def reply(msg=None, img=None):
        if msg:
            resp = urllib2.urlopen(BASE_URL + 'sendMessage', urllib.urlencode({
                'chat_id': str(chat_id),
                'text': msg.encode('utf-8'),
                'disable_web_page_preview': 'true',
                'reply_to_message_id': str(message_id),
            })).read()
        elif img:
            resp = multipart.post_multipart(BASE_URL + 'sendPhoto', [
                ('chat_id', str(chat_id)),
                ('reply_to_message_id', str(message_id)),
            ], [
                ('photo', 'image.jpg', img),
            ])
        else:
            logging.error('no msg or img specified')
            resp = None

        logging.info('send response:')
        logging.info(resp)

오류:

Internal Server Error
The server has either erred or is incapable of performing the requested operation.

Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~orbitaltest2/1.393734187774164753/main.py", line 66, in get
    self.response.write(json.dumps(json.load(urllib2.urlopen(BASE_URL + 'getUpdates'))))
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 410, in open
    response = meth(req, response)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 409: Conflict

66 행이 속한 핸들러에 대한 코드 :

class GetUpdatesHandler(webapp2.RequestHandler):
    def get(self):
        urlfetch.set_default_fetch_deadline(60)
        self.response.write(json.dumps(json.load(urllib2.urlopen(BASE_URL + 'getUpdates'))))

완전히 초보자, 어떤 제안이라도 감사합니다!

알렉산더 트라 키 메녹

웹훅에서 어떤 상태 코드와 어떤 콘텐츠가 반환되는지 확인해야합니다.

답장하는 방법은 2 가지가 있습니다.

  1. Telegram API 호출
  2. 웹훅 호출에 대한 응답으로 JSON 반환

소스 코드를 제공하지 않았기 때문에 reply()정확히 무엇이 잘못되었는지 말하기가 어렵습니다.

어쨌든 웹훅은 HTTP 상태 코드 200을 반환해야합니다. Telegram이 내부 오류로 처리하지 않으면 메시지를 다시 보내려고합니다. 이것이 당신이 반복되는 전화를 받고 "미친 듯이 응답하는"이유입니다.

대부분의 경우 호출 reply("keep replying this line")은 성공했지만 문제가 발생하면 Telegram이 잘못된 응답을받습니다.

try/except블록을 추가 하고 예외를 기록합니다.

로그를 확인하고 필요한 경우 추가 로깅을 넣으십시오. 예를 들어 웹훅에서 HTTP 응답 콘텐츠를 로깅하고 있습니다. 도움이됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

사용자가 텔레 그램 봇에 유효한 응답을 할 때까지 함수와 핸들러를 반복하는 방법은 무엇입니까?

분류에서Dev

웹 브라우저를 닫은 후에도 Exchange 마이그레이션 코드를 계속 실행하고 싶습니다.

분류에서Dev

스레드 / 응용 프로그램을 고정하지 않고 메서드 실행 속도를 늦추는 방법은 무엇입니까?

분류에서Dev

텔레 그램, 슬랙, 스카이프를 시작 응용 프로그램에 넣으면 실행되지 않습니다.

분류에서Dev

텔레 톤 텔레 그램에서 오래된 세션을 복원하고 다시 연결할 수있는 방법 (코드를 다시 보내지 않고)

분류에서Dev

Skype 봇이 웹훅의 응답을 표시하지 않지만 API AI에 포함 된 사용자 지정 페이로드에 대한 올바른 결과를 표시합니다.

분류에서Dev

텔레 그램 봇에 대한 가져 오기를 사용하여 API 호출에서 다시 줄

분류에서Dev

일부 텔레 그램 채널은 왜 이름을 사용하고 다른 채널은 사용하지 않습니까?

분류에서Dev

(텔레 그램 봇) JSON 게시 요청이 작동하지 않습니다.

분류에서Dev

사용자가 응답하지 않은 이벤트 수를 계산합니다.

분류에서Dev

OpenGL은 인텔 그래픽 카드를 사용하여 매우 낮은 프레임 속도에서 실행됩니다.

분류에서Dev

Python 텔레 봇이 다른 사용자와 작동하지 않음

분류에서Dev

StreamReader를 실행하면 응용 프로그램이 응답하지 않습니다.

분류에서Dev

데이터베이스를로드하려고하면 응용 프로그램이 계속 충돌합니다.

분류에서Dev

웹 사이트를위한 새로운 텔레 그램 "버튼"이 있습니다-blogspot에서 사용하려면 도움이 필요합니다

분류에서Dev

mongoose를 사용하여 mongodb에서 레코드를 업데이트하려고합니다. 내 응용 프로그램은 Node.js 및 Express 4를 사용하고 있습니다.

분류에서Dev

mongoose를 사용하여 mongodb에서 레코드를 업데이트하려고합니다. 내 응용 프로그램은 Node.js 및 Express 4를 사용하고 있습니다.

분류에서Dev

python3에서 응용 프로그램을 시작한 다음 다른 코드를 계속하십시오.

분류에서Dev

모든 사용자에게 작동하지 않는 텔레 그램 봇

분류에서Dev

'inline_keyboard'(PHP)를 사용하여 텔레 그램 봇을 어떻게 작성합니까?

분류에서Dev

powershell이 cmd에서 실행되어 프로그램을 시작하고 종료합니다. 프로그램은 계속 실행되지만 powershell은

분류에서Dev

내 프로그램이 멈추지 않고 계속 실행되기를 원합니다.

분류에서Dev

코드를 사용하지 않고 Windows 시작시 WPF 응용 프로그램을 실행하는 방법

분류에서Dev

내 응용 프로그램은 프론트 엔드에 의해 주어진 요청에 응답하고 CORS의 예외를 throw하지 않습니다

분류에서Dev

파이썬 텔레 봇이 예기치 않은 응답을 받았습니다

분류에서Dev

Node.js는 텔레 그램 봇 웹 소켓에서 데이터를 복원 할 수 없습니다.

분류에서Dev

winxp에는 4GB의 RAM이 있고 1.77GB를 사용하고 있지만 프로그램은 계속 메모리로 페이징합니다. 왜?

분류에서Dev

winxp에는 4GB의 RAM이 있고 1.77GB를 사용하고 있지만 프로그램은 계속 메모리로 페이징합니다. 왜?

분류에서Dev

웹에 텔레 그램 봇을 배포하는 가장 쉬운 방법은 무엇입니까?

Related 관련 기사

  1. 1

    사용자가 텔레 그램 봇에 유효한 응답을 할 때까지 함수와 핸들러를 반복하는 방법은 무엇입니까?

  2. 2

    웹 브라우저를 닫은 후에도 Exchange 마이그레이션 코드를 계속 실행하고 싶습니다.

  3. 3

    스레드 / 응용 프로그램을 고정하지 않고 메서드 실행 속도를 늦추는 방법은 무엇입니까?

  4. 4

    텔레 그램, 슬랙, 스카이프를 시작 응용 프로그램에 넣으면 실행되지 않습니다.

  5. 5

    텔레 톤 텔레 그램에서 오래된 세션을 복원하고 다시 연결할 수있는 방법 (코드를 다시 보내지 않고)

  6. 6

    Skype 봇이 웹훅의 응답을 표시하지 않지만 API AI에 포함 된 사용자 지정 페이로드에 대한 올바른 결과를 표시합니다.

  7. 7

    텔레 그램 봇에 대한 가져 오기를 사용하여 API 호출에서 다시 줄

  8. 8

    일부 텔레 그램 채널은 왜 이름을 사용하고 다른 채널은 사용하지 않습니까?

  9. 9

    (텔레 그램 봇) JSON 게시 요청이 작동하지 않습니다.

  10. 10

    사용자가 응답하지 않은 이벤트 수를 계산합니다.

  11. 11

    OpenGL은 인텔 그래픽 카드를 사용하여 매우 낮은 프레임 속도에서 실행됩니다.

  12. 12

    Python 텔레 봇이 다른 사용자와 작동하지 않음

  13. 13

    StreamReader를 실행하면 응용 프로그램이 응답하지 않습니다.

  14. 14

    데이터베이스를로드하려고하면 응용 프로그램이 계속 충돌합니다.

  15. 15

    웹 사이트를위한 새로운 텔레 그램 "버튼"이 있습니다-blogspot에서 사용하려면 도움이 필요합니다

  16. 16

    mongoose를 사용하여 mongodb에서 레코드를 업데이트하려고합니다. 내 응용 프로그램은 Node.js 및 Express 4를 사용하고 있습니다.

  17. 17

    mongoose를 사용하여 mongodb에서 레코드를 업데이트하려고합니다. 내 응용 프로그램은 Node.js 및 Express 4를 사용하고 있습니다.

  18. 18

    python3에서 응용 프로그램을 시작한 다음 다른 코드를 계속하십시오.

  19. 19

    모든 사용자에게 작동하지 않는 텔레 그램 봇

  20. 20

    'inline_keyboard'(PHP)를 사용하여 텔레 그램 봇을 어떻게 작성합니까?

  21. 21

    powershell이 cmd에서 실행되어 프로그램을 시작하고 종료합니다. 프로그램은 계속 실행되지만 powershell은

  22. 22

    내 프로그램이 멈추지 않고 계속 실행되기를 원합니다.

  23. 23

    코드를 사용하지 않고 Windows 시작시 WPF 응용 프로그램을 실행하는 방법

  24. 24

    내 응용 프로그램은 프론트 엔드에 의해 주어진 요청에 응답하고 CORS의 예외를 throw하지 않습니다

  25. 25

    파이썬 텔레 봇이 예기치 않은 응답을 받았습니다

  26. 26

    Node.js는 텔레 그램 봇 웹 소켓에서 데이터를 복원 할 수 없습니다.

  27. 27

    winxp에는 4GB의 RAM이 있고 1.77GB를 사용하고 있지만 프로그램은 계속 메모리로 페이징합니다. 왜?

  28. 28

    winxp에는 4GB의 RAM이 있고 1.77GB를 사용하고 있지만 프로그램은 계속 메모리로 페이징합니다. 왜?

  29. 29

    웹에 텔레 그램 봇을 배포하는 가장 쉬운 방법은 무엇입니까?

뜨겁다태그

보관