Telegram Bot: come ottenere un ID chat di gruppo?


170

Ho usato telegram_bot e ho cercato di ottenere l'id groupChat per inviare notifiche alla chat di gruppo, ma non so quali metodi devo usare per questo.

Per ottenere l'ID chat che uso a message.chat.id quando il bot ha partecipato alla chat ma che devo usare per ottenere l'id chat di gruppo non riesce a trovare /


1
Gestisco un bot per questo. Spero che questo aiuto sarà, check this < stackoverflow.com/a/37396871/6223024 >
kardian Fredy

Risposte:


227

Per ottenere l'ID chat di gruppo, procedi come segue:

  1. Aggiungi il Telegram BOT al gruppo.

  2. Ottieni l'elenco degli aggiornamenti per il tuo BOT:

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

    Ex:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. Cerca l'oggetto "chat":

{ "Update_id": 8393, "messaggio": { "message_id": 3, "da": { "id": 7474, "first_name": "AAA"}, "chat": { "id": ", titolo ":" "}," data ": 25497," new_chat_participant ": {" id ": 71," first_name ":" NAME", "username": "YOUR_BOT_NAME"}}}

Questo è un esempio della risposta quando aggiungi il tuo BOT in un gruppo.

  1. Usa "id" dell'oggetto "chat" per inviare i tuoi messaggi.

1
puoi fornire un esempio?
Roman Podpryatov,

2
@WannaBeCoder, puoi aggiungere un BOT a un gruppo come qualsiasi altro membro: vai alle proprietà del tuo gruppo, fai clic su Aggiungi membro, quindi usa l'icona di ricerca per cercare il nome del BOT. MA, tieni presente che dopo le recenti modifiche ai gruppi di Telegrams, devi essere un "amministratore" di gruppo per aggiungere un nuovo membro, siano essi BOT o meno.
Maverick_Java,

37
Per gruppo appena creato getUpdatesrichiesta restituisce {"ok":true,"result":[]}anche se cerco di inviare mucchio di messaggi al bot gruppo e menzione via @e qualche "comandi", casuali /my_id, /start, /help. Qualche idea su cosa fare? - AGGIORNAMENTO: OK, la rimozione del bot dal gruppo e l'aggiunta del bot hanno risolto questo problema (inoltre ha stampato l'ID della chat nel gruppo) --- sembra che il bot non possa essere aggiunto durante la creazione del gruppo.
Rutsky,

8
questo restituisce: {"ok": true, "risultato": []}
Tom

3
Ciao Tom. Hai già provato la soluzione rutsky: "la rimozione del bot dal gruppo e l'aggiunta del bot hanno risolto questo problema (ha anche stampato l'id chat nel gruppo) --- sembra che il bot non possa essere aggiunto durante la creazione del gruppo"? Ho riscontrato lo stesso problema un paio di volte e rimuovere il bot dal gruppo e aggiungerlo di nuovo ha sempre risolto il problema. Fammi sapere se questo non ti aiuterà.
Maverick_Java,

136

Ecco la sequenza che ha funzionato per me dopo aver lottato per diverse ore:

Supponiamo che il nome del bot sia my_bot .

1- Aggiungi il bot al gruppo.
Vai al gruppo, fai clic sul nome del gruppo, fai clic su Aggiungi membri, nella casella di ricerca cerca il tuo bot in questo modo: @my_bot, seleziona il tuo bot e fai clic su Aggiungi.

2- Invia un messaggio fittizio al bot.
Puoi usare questo esempio: /my_id @my_bot
(Ho provato alcuni messaggi, non tutti i messaggi funzionano. L'esempio sopra funziona bene. Forse il messaggio dovrebbe iniziare con /)

3- Vai al seguente URL: https://api.telegram.org/botXXX:YYYY/getUpdates
sostituisci XXX: AAAA con il token bot

4- Cerca "chat": {"id": - zzzzzzzzzz,
-zzzzzzzzzz è il tuo ID chat (con il segno negativo).

5- Test: puoi provare a inviare un messaggio al gruppo con un ricciolo:

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

Se perdi il passaggio 2, non ci sarebbero aggiornamenti per il gruppo che stai cercando. Inoltre, se ci sono più gruppi, puoi cercare il nome del gruppo nella risposta ("titolo": " nome_gruppo ").

Spero che questo ti aiuti.


2
Eccellente suddivisione su come ottenere un BOT configurato.
fear_matrix,

Ho inviato un messaggio al bot ma non ha funzionato all'istante, aspettando alcuni secondi (o probabilmente minuti) e provando di nuovo ad arricciare ha funzionato.
LiveWireBT

4
Non riesco a far funzionare il mio bot nel gruppo, ottengo {"ok": true, "result": []} nel browser. Spero che qualcuno mi possa aiutare
TheMrkt

1
Questo ha funzionato per me. Una cosa, se hai webhooks configurati, devi disabilitarlo. Grazie!
Erich García,

3
@TheMrkt Sembra, come detto apadana, che sendind un messaggio che inizia con /like /test somethingrende getUpdates felice.
e2-e4,

100

A partire da marzo 2020, semplicemente:

  • Invita @RawDataBot nel tuo gruppo.

Dopo esserti unito, verrà generato un file JSON in cui il tuo ID chat si troverà in message.chat.id .

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

Assicurati di calciare @RawDataBot dal tuo gruppo in seguito.


3
Dove dovrebbe essere output di @RawDataBot? Ho aggiunto il bot al mio gruppo, ma non è successo niente. Aggiornamento: devi avere un nome utente impostato in Telegram, altrimenti non succede nulla.
Frank Meulenaar il

1
Di gran lunga il modo più semplice per raggiungere questo obiettivo. Grazie!
suchanoob,

1
@Cherona: l'ho appena verificato. Ma sembra che il client Web sia cambiato in modo tale che invitare il bot sia un po 'più difficile di quanto non fosse in passato. Ecco come puoi farlo: Cerca RawDataBot nel campo di ricerca. Fai clic sul contatto per avviare una sessione di chat. Fai clic sul titolo della chat per aprire "Informazioni di contatto". Fai clic su "Aggiungi al gruppo" e scegli il gruppo. Emetterà immediatamente le informazioni come prima. Spero che funzioni per te.
eivamu,

42

Dopo la metà del 2018:
1 :) Invita @getidsbo o @RawDataBotal tuo gruppo e ottieni l'ID del tuo gruppo nel campo ID chat inviato.

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 :) usa un Messenger non ufficiale come Plus Messenger e vedi l'ID del tuo gruppo nelle informazioni sul gruppo / canale.

Prima della metà del 2018: (non utilizzare)
1: Vai a ( https://web.telegram.org )
2: Vai a Gorup e trova il tuo link di Gorup ( https://web.telegram.org/#/im ? p = g154513121 )
3: Copia quel numero dopo g e metti un (-) Prima di quello -154513121
4: invia il tuo messaggio a Gorup bot.sendMessage(-154513121, "Hi")
Ho testato ora e lavora come un incantesimo


1
Molto semplice. Grazie! Testato in Notifica avviso Grafana. Fin qui tutto bene.
Adrian Nicolaiev,

@Sedric Heidarizarei cosa succede se questo non è un numero come questo ( web.telegram.org/#/im?p=@welcomeworld )
Marx Babu,

2
"@welcomeworld" è il nome utente del tuo canale, puoi inoltrare un messaggio a "@getidsbot" e ottenere il tuo ID
Sedric Heidarizarei,

ha fatto lo stesso ma si è verificato un errore OverflowError: Python int troppo grande per la conversione in SQLite INTEGER ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')
vinod

Ho aggiornato la mia risposta, questo metodo non funziona più, usa temporaneamente il After mid-2018metodo.
Sedric Heidarizarei,

9

È possibile ottenere l'ID chat in questo modo.

Durante una chat privata con il tuo bot, invia un messaggio casuale. Cercherai questo messaggio più tardi.

Ottieni il tuo token API da bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Quindi, sul tuo browser fai una richiesta con quell'URL:

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

La richiesta restituisce una risposta json, nel testo json cerca il tuo random messagee ottieni l'ID chat in quell'oggetto.


8

Usando Python e Telethon è molto facile ottenere l'ID della chat. Questa soluzione è la migliore per coloro che lavorano con l'API telegram.

Se non hai Telethon, esegui questo:

pip install telethon

Se non si dispone di un'app registrata con telegramma, registrarne una: inserisci qui la descrizione dell'immagine il collegamento è questo: https://my.telegram.org/

Quindi eseguire il codice seguente:

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))

Potresti voler inviare un messaggio al tuo gruppo in modo che il gruppo venga visualizzato in cima all'elenco.


7

È possibile recuperare l'ID gruppo allo stesso modo. Appare nel corpo del messaggio come message.chat.ided è di solito un numero negativo, dove le chat normali sono positive.

Gli ID gruppo e gli ID chat possono essere recuperati solo da un messaggio ricevuto, non ci sono chiamate disponibili per recuperare gruppi attivi ecc. Devi ricordare l'ID gruppo quando ricevi il messaggio e memorizzarlo nella cache o in qualcosa di simile.


Qualcun altro può confermare che questo è vero? Sto per dire di sì dopo aver letto i documenti. Mi piacerebbe essere in grado di ottenere il chat_id dal link del gruppo al fine di soddisfare i miei requisiti.
PrimeTimeTran

1

creare un bot o, se già creato, impostare come segue:

ha accesso ai messaggi

apparentemente, indipendentemente da quanti anni / nuovo il gruppo Telegram ha:

  1. aggiungi un bot al gruppo
  2. rimuove il bot dal gruppo
  3. aggiungi nuovamente il bot al gruppo

  4. creare un file di script ed eseguire un getUpdatesesempio di metodo:

    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 funzione registra nella console quanto segue:
[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. Il gruppo di Telegram chat_id può essere estratto dal messaggio sopra "chat":{"id":-1001202656383,"title"

Spero che questo aiuti (HTH)


0

il bot riceve il seguente messaggio originato su un gruppo Telegram con un bot coesistente:

estrarre i dati come richiesto

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 );
}  

/* Contenuti

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

0

IMHO il modo migliore per farlo è usare TeleThon, ma dato che la risposta di apadana è obsoleta e irreparabile, scriverò qui la soluzione funzionante:

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())

questo frammento ti darà le prime 10chat nel tuo Telegram.

ipotesi:

  • hai telethone nest_asyncioinstallato
  • hai api_ide api_hashda my.telegram.org

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 );
}

quando un post proviene da un gruppo, sono disponibili diverse informazioni tramite un oggetto JSON che è possibile estrarre informazioni rilevanti per l'uso dell'utente L'esempio sopra illustra come ottenere contenuti chat_id sia un oggetto
Trajano Roberto

0

Se stai implementando il tuo bot, conserva un nome di gruppo memorizzato -> id table e chiedilo con un comando. Quindi puoi anche inviare per nome.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.