itsjafer
itsjafer

Reputation: 41

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:

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!

Upvotes: 4

Views: 2323

Answers (1)

Tharindu Sathischandra
Tharindu Sathischandra

Reputation: 1994

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"
 }
}

Upvotes: 2

Related Questions