3

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!

itsjafer
  • 31
  • 2

1 Answers1

1

Your dumped response has "group_chat_created":True and it is a service message which normally doesn't have any text. This messages is created when a group is created (the first message of the group).

Docs says,

Field Type Description
group_chat_created True Optional. Service message: the group has been created

Your bot only receives this type of message if you create the group by adding the bot as a member first (i.e. when the bot is a member of the group when it is created.) Now, by default bot will not read the text messages, so, you can promote the bot as an admin to read the text messages.

As an example, if I create a group with a bot,

{
 "update_id": 989846...,
 "message": {
  "message_id": 15,
  "from": {
   "id": 1521565...,
   "is_bot": false,
   "first_name": "me",
   "username": "abc...",
   "language_code": "en"
  },
  "chat": {
   "id": -560877...,
   "title": "MeAndMyBot...",
   "type": "group",
   "all_members_are_administrators": true
  },
  "date": 1614624584,
  "group_chat_created": true
 }
}

And you can see that,

enter image description here

Now give the appropriate permissions (e.g.: Admin privileges) to access text messages,

enter image description here

Then we can get updates like,

{
 "update_id": 989846...,
 "message": {
  "message_id": 16,
  "from": {
   "id": 1521565...,
   "is_bot": false,
   "first_name": "me",
   "username": "abc...",
   "language_code": "en"
  },
  "chat": {
   "id": -560877...,
   "title": "MeAndMyBot...",
   "type": "group",
   "all_members_are_administrators": true
  },
  "date": 1614625333,
  "text": "Hello there"
 }
}
Tharindu Sathischandra
  • 1,654
  • 1
  • 15
  • 37