Wednesday, 3 March 2021

Telegram Webhook doesn't send text from Group Chats

I am running a Telegram bot using Webhooks that queries an AWS Lambda function. In a private conversation with just the bot, it functions as expected. In group chats however, the bot fails to respond. In particular, when receiving updates from a group, the Message object is missing the text field (i.e. there is no text associated with messages from group chats).

Here is what I have tried:

  • Setting privacy mode to disabled (such that the bot can access all messages in groups)
  • Giving the bot admin privileges
  • Removing and adding the bot after doing the above
  • Deleting and recreating a whole new bot after doing the above
  • Deleting and setting a webhook

Here is the lambda code (it simply echos back whatever it receives):

import requests
import json

def lambda_handler(event, context):
    # get the request body from API gateway
    body = json.loads(event['body'])

    token = 'my secret token'
    URL = "https://api.telegram.org/bot{}/".format(token)
    chat_id = body['message']['chat']['id']

    # This if statement is triggered for EVERY group chat message the bot receives
    # which is the error I'm trying to debug
    if 'text' not in body['message']:
        return { 'statusCode': 500 }

    # this only works for direct messages
    message = body['message']['text']

    send_url = URL + "sendMessage?text={}&chat_id={}".format(message, chat_id)
    requests.get(send_url)

    response = {
        "statusCode": 200
    };
    return response

Here is what the Message object looks like when received from a group chat (notice that it doesn't have a text field:

{
    "message_id":27,
    "from":{
       "id":id_number,
       "is_bot":False,
       "first_name":"Jafer",
       "last_name":"",
       "username":"username",
       "language_code":"en"
    },
    "chat":{
       "id":-id_number,
       "title":"test",
       "type":"group",
       "all_members_are_administrators":True
    },
    "date":1603138229,
    "group_chat_created":True
 }

Here are some of the resources on stackoverflow that I've already looked at:

Since I'm trying to run the bot in a serverless environment, I cannot use a polling mechanism as suggested here: Telegram Bot - how to get a group chat id?

I would very much appreciate some help understanding why my bot struggles with group chats! Thank you!



from Telegram Webhook doesn't send text from Group Chats

No comments:

Post a Comment