Telegram Bot: ¿cómo obtener una identificación de chat grupal?

170

He estado usando telegram_bot e intenté obtener la identificación de groupChat para enviar notificaciones al chat grupal, pero no sé qué métodos debo usar para ello.

Para obtener la identificación del chat, utilizo message.chat.id cuando el bot participó en el chat pero que tengo que usar para obtener la identificación del chat grupal no puedo encontrar /

Podpryatov romano
fuente
1
Administro un bot para esto. Espero que esto ayude, verifique esto < stackoverflow.com/a/37396871/6223024 >
fredy kardian

Respuestas:

227

Para obtener la identificación del chat grupal, haga lo siguiente:

  1. Agregue el Telegram BOT al grupo.

  2. Obtenga la lista de actualizaciones para su BOT:

    https://api.telegram.org/bot<YourBOTToken>/getUpdates
    

    Ex:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. Busque el objeto "chat":

{"update_id": 8393, "message": {"message_id": 3, "from": {"id": 7474, "first_name": "AAA"}, "chat": {"id":, "title ":" "}," date ": 25497," new_chat_participant ": {" id ": 71," first_name ":" NAME "," username ":" YOUR_BOT_NAME "}}}

Esta es una muestra de la respuesta cuando agrega su BOT a un grupo.

  1. Use el "id" del objeto "chat" para enviar sus mensajes.
Maverick_Java
fuente
1
¿Puedes dar un ejemplo?
Roman Podpryatov
2
@WannaBeCoder, puede agregar un BOT a un grupo como cualquier otro miembro: vaya a las propiedades de su grupo, haga clic en agregar miembro, luego use el icono de búsqueda para buscar el nombre del BOT. PERO, tenga en cuenta que desde los cambios recientes en los grupos de Telegrams, debe ser un "administrador" del grupo para agregar un nuevo miembro, ya sean BOT o no.
Maverick_Java
37
Para el grupo de nueva creación getUpdatessolicitud devuelve {"ok":true,"result":[]}incluso si intento enviar montón de mensajes al grupo bot y mención vía @y algunos "comandos" al azar /my_id, /start, /help. ¿Alguna idea de qué hacer? - ACTUALIZACIÓN: OK, eliminar el bot del grupo y agregar el bot nuevamente solucionó este problema (también imprimió la identificación del chat en el grupo) --- parece que el bot no se puede agregar durante la creación del grupo.
rutsky
8
esto devuelve: {"ok": verdadero, "resultado": []}
Tom
3
Hola Tom. ¿Ya probaste la solución rutsky: "eliminar el bot del grupo y volver a agregar el bot solucionó este problema (también imprimió la identificación del chat en el grupo) --- parece que el bot no se puede agregar durante la creación del grupo"? Me he enfrentado al mismo problema un par de veces, y eliminar el bot del grupo y agregarlo nuevamente siempre resolvió el problema. Avísame si esto no te ayudará.
Maverick_Java
136

Aquí está la secuencia que funcionó para mí después de luchar durante varias horas:

Suponga que el nombre del bot es my_bot .

1- Agrega el bot al grupo.
Vaya al grupo, haga clic en el nombre del grupo, haga clic en Agregar miembros, en el cuadro de búsqueda busque su bot de la siguiente manera: @my_bot, seleccione su bot y haga clic en Agregar.

2- Enviar un mensaje ficticio al bot.
Puede usar este ejemplo: /my_id @my_bot
(Intenté algunos mensajes, no todos funcionan. El ejemplo anterior funciona bien. Tal vez el mensaje debería comenzar con /)

3- Vaya a la siguiente url: https://api.telegram.org/botXXX:YYYY/getUpdates
reemplace XXX: AAAA con su token bot

4- Busque "chat": {"id": -
zzzzzzzzzz , -zzzzzzzzzz es su id de chat (con el signo negativo).

5- Prueba: puedes probar enviando un mensaje al grupo con un rizo:

curl -X POST "https://api.telegram.org/botXXX:YYYY/sendMessage" -d "chat_id=-zzzzzzzzzz&text=my sample text"

Si omite el paso 2, no habrá ninguna actualización para el grupo que está buscando. Además, si hay varios grupos, puede buscar el nombre del grupo en la respuesta ("título": " nombre_grupo ").

Espero que esto ayude.

apadana
fuente
2
Excelente ruptura sobre cómo configurar un BOT.
fear_matrix
Envié un mensaje al bot, pero no funcionó al instante, esperé unos segundos (o probablemente minutos) y volví a funcionar.
LiveWireBT
44
No puedo hacer que mi bot funcione en el grupo, obtengo {"ok": verdadero, "resultado": []} en el navegador. Espero que alguien pueda ayudarme
TheMrkt
1
Esto funcionó para mí. Una cosa, si tiene webhooks configurados, debe deshabilitarlo. ¡Gracias!
Erich García
3
@TheMrkt Parece, como dijo apadana, que enviar un mensaje que comienza con /like /test somethinghace felices a getUpdates.
e2-e4
100

A partir de marzo de 2020, simplemente:

  • Invita a @RawDataBot a tu grupo.

Al unirse, generará un archivo JSON donde se ubicará su ID de chat en message.chat.id .

"message": {
    "chat": {
        "id": -210987654,
        "title": ...,
        "type": "group",
        ...
    }
    ...
}

Asegúrese de eliminar a @RawDataBot de su grupo después.

eivamu
fuente
3
¿Dónde debería @RawDataBot generar esto? Agregué el bot a mi grupo, pero no pasó nada. Actualización: debe tener un nombre de usuario configurado en Telegram, de lo contrario no pasa nada.
Frank Meulenaar
1
Con mucho, la forma más fácil de lograr esto. ¡Gracias!
suchanoob
1
@ Cherona: acabo de volver a verificarlo. Pero parece que el cliente web ha cambiado de tal manera que invitar al bot es un poco más difícil de lo que solía ser. Así es como puede hacerlo: busque RawDataBot en el campo de búsqueda. Haga clic en el contacto para iniciar una sesión de chat. Haga clic en el título del chat para abrir "Información de contacto". Haga clic en "Agregar al grupo" y elija el grupo. Inmediatamente generará la información como antes. Espero que funcione para ti.
Eivamu
42

Después de mediados de 2018:
1 :) Invite a @getidsbo o @RawDataBota su grupo y obtenga su identificación de grupo en el campo de identificación de chat enviado.

Message
 ├ message_id: 338
 ├ from
 ┊  ├ id: *****
 ┊  ├ is_bot: false
 ┊  ├ first_name: 사이드
 ┊  ├ username: ******
 ┊  └ language_code: en
 ├ chat
 ┊  ├ id: -1001118554477    // This is Your Group id
 ┊  ├ title: Test Group
 ┊  └ type: supergroup
 ├ date: 1544948900
 └ text: A

2 :) use un Messenger no oficial como Plus Messenger y vea la identificación de su grupo en la información del grupo / canal.

Antes de mediados de 2018: (no usar)
1: Ir a ( https://web.telegram.org )
2: Ir a su Gorup y encontrar su enlace de Gorup ( https://web.telegram.org/#/im ? p = g154513121 )
3: Copie ese número después de g y ponga un (-) Antes de eso -154513121
4: Envíe su mensaje a Gorup Probé bot.sendMessage(-154513121, "Hi")
ahora y trabaje como un encanto

Sedric Heidarizarei
fuente
1
Muy simple. ¡Gracias! Probado en Grafana Alert Notification. Hasta aquí todo bien.
Adrian Nicolaiev
@Sedric Heidarizarei, ¿y si este no es un número como este? ( Web.telegram.org/#/im?p=@welcomeworld )
Marx Babu
2
'@welcomeworld' es el nombre de usuario de tu canal, puedes reenviar un mensaje a '@getidsbot' y obtener tu identificación
Sedric Heidarizarei
hizo lo mismo pero se encontró con el error OverflowError: Python int demasiado grande para convertir a SQLite INTEGER ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')
vinod
Actualicé mi respuesta, este método ya no funciona, use el After mid-2018método temporalmente .
Sedric Heidarizarei
9

Puede obtener ID de chat de esta manera.

En el chat privado con su bot, envíe un mensaje aleatorio. Buscarás este mensaje más tarde.

Obtenga su token API de bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Luego, en su navegador, haga una solicitud con esa URL:

https://api.telegram.org/botXXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY/getUpdates

La solicitud devuelve una respuesta json, en el texto json busque su random messagey obtenga la identificación de chat en ese objeto.

Yigit Yuksel
fuente
8

Usando python y telethon es muy fácil obtener id de chat. Esta solución es la mejor para quienes trabajan con la API de telegramas.

Si no tienes telethon, ejecuta esto:

pip install telethon

Si no tiene una aplicación registrada con Telegram, registre una: ingrese la descripción de la imagen aquí El enlace es este: https://my.telegram.org/

Luego ejecute el siguiente código:

from telethon import InteractiveTelegramClient
from telethon.utils.tl_utils import get_display_name

client = InteractiveTelegramClient('session_id', 'YOUR_PHONE_NUMBER', api_id=1234YOURAPI_ID, api_hash='YOUR_API_HASH')

dialog_count = 10
dialogs, entities = client.get_dialogs(dialog_count)
for i, entity in enumerate(entities):
                    i += 1  # 1-based index
                    print('{}. {}. id: {}'.format(i, get_display_name(entity), entity.id))

Es posible que desee enviar un mensaje a su grupo para que el grupo aparezca en la parte superior de la lista.

apadana
fuente
7

Puede recuperar la identificación del grupo de la misma manera. Aparece en el cuerpo del mensaje como message.chat.idy generalmente es un número negativo, donde los chats normales son positivos.

Las ID de grupo y las ID de chat solo se pueden recuperar de un mensaje recibido, no hay llamadas disponibles para recuperar grupos activos, etc. Debe recordar la ID de grupo cuando reciba el mensaje y almacenarlo en la memoria caché o algo similar.

Chris Brand
fuente
¿Alguien más puede confirmar que esto es cierto? Estoy cerca de decir que sí después de leer los documentos. Me gustaría poder obtener el chat_id del enlace del grupo para cumplir con mis requisitos.
PrimeTimeTran
1

cree un bot, o si ya está creado, establezca lo siguiente:

tiene acceso a mensajes

aparentemente, independientemente de la antigüedad / nuevo del grupo de Telegram:

  1. agregar un bot al grupo
  2. eliminar bot del grupo
  3. agregue bot nuevamente al grupo

  4. cree un archivo de script y ejecute un getUpdatesejemplo de método:

    var vApiTokenTelegram = "1234567890:???>yg5GeL5PuItAOEhvdcPPELAOCCy3jBo"; // @?????Bot API token
    var vUrlTelegram = "https://api.telegram.org/bot" + vApiTokenTelegram;

    function getUpdates() {
        var response = UrlFetchApp.fetch(vUrlTelegram + "/getUpdates");
        console.log(response.getContentText());
    }
  1. La función registrará en la consola lo siguiente:
[20-04-21 00:46:11:130 PDT] {"ok":true,"result":[{"update_id":81329501,
"message":{"message_id":975,"from":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"chat":{"id":-1001202656383,"title":"R\u00e1dioRN - A voz da na\u00e7\u00e3o!","type":"supergroup"},"date":1587454914,"left_chat_participant":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"},"left_chat_member":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"}}},{"update_id":81329502,
"message":{"message_id":976,"from":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"chat":{"id":-1001202656383,"title":"R\u00e1dioRN - A voz da na\u00e7\u00e3o!","type":"supergroup"},"date":1587454932,"new_chat_participant":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"},"new_chat_member":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"},"new_chat_members":[{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"}]}}]}
  1. El grupo de telegramas chat_id se puede extraer del mensaje anterior "chat":{"id":-1001202656383,"title"

Espero que esto ayude (HTH)

Trajano Roberto
fuente
0

El bot recibe el siguiente mensaje originado en un grupo de Telegram que tiene un bot coexistente:

extraer datos según sea necesario

function doPost(e) {
    var contents = JSON.parse(e.postData.contents);
    //  GmailApp.sendEmail(Session.getEffectiveUser().getEmail(), "Telegram Bot Update", JSON.stringify(contents, null, 4));
    var chat_id = contents.message.chat.id;
    var text = contents.message.text;
    var name = contents.message.from.first_name + " " +  contents.message.from.last_name;
    var sResponse = telegramBotMachine( chat_id, text, name );
}  

/ * contenido

{
    "update_id": 20383255,
    "message": {
        "message_id": 147,
        "from": {
            "id": 999999999,
            "is_bot": false,
            "first_name": "Trajano",
            "last_name": "Roberto",
            "username": "TrajanoRoberto",
            "language_code": "en"
        },
        "chat": {
            "id": -666666666,
            "title": "Test Ataque Media Flamengo",
            "type": "group",
            "all_members_are_administrators": true
        },
        "date": 1585450075,
        "text": "Menu"
    }
}
Trajano Roberto
fuente
0

En mi humilde opinión, la mejor manera de hacer esto es usar TeleThon, pero dado que la respuesta de apadana está desactualizada, escribiré la solución de trabajo aquí:

import os
import sys
from telethon import TelegramClient
from telethon.utils import get_display_name

import nest_asyncio
nest_asyncio.apply()

session_name = "<session_name>"
api_id = <api_id>
api_hash = "<api_hash>"
dialog_count = 10 # you may change this

if f"{session_name}.session" in os.listdir():
    os.remove(f"{session_name}.session")

client = TelegramClient(session_name, api_id, api_hash)

async def main():
    dialogs = await client.get_dialogs(dialog_count)
    for dialog in dialogs:
        print(get_display_name(dialog.entity), dialog.entity.id)

async with client:
    client.loop.run_until_complete(main())

este fragmento te dará los primeros 10chats en tu Telegram.

Suposiciones

  • tienes telethone nest_asyncioinstalado
  • tienes api_idy api_hashdesde my.telegram.org
Foad
fuente
0
function doPost(e) {
    var contents = JSON.parse(e.postData.contents);
    //  GmailApp.sendEmail(Session.getEffectiveUser().getEmail(), "Telegram Bot Update",     JSON.stringify(contents, null, 4));
    var chat_id = contents.message.chat.id;
    var text = contents.message.text;
    var name = contents.message.from.first_name + " " +  contents.message.from.last_name;
    var sResponse = telegramBotMachine( chat_id, text, name );
}
Trajano Roberto
fuente
cuando una publicación se origina en un grupo, hay varias piezas de información disponibles a través de un objeto JSON. Puede extraer información relevante para su uso. El ejemplo anterior ilustra cómo obtener contenido de chat_id es un objeto
Trajano Roberto
0

Si está implementando su bot, mantenga almacenado un nombre de grupo -> tabla de id, y pregúntelo con un comando. Entonces también puedes enviar por nombre.

Angelo Dureghello
fuente