Telegramm-Bot - Wie bekomme ich eine Gruppen-Chat-ID?

170

Ich habe telegram_bot verwendet und versucht, die groupChat-ID zu erhalten, um Benachrichtigungen an den Gruppenchat zu senden, weiß aber nicht, welche Methoden ich dafür verwenden muss.

Um die Chat-ID zu erhalten, verwende ich message.chat.id, wenn der Bot am Chat teilgenommen hat, aber die ich zum Abrufen der Gruppen-Chat-ID verwenden muss, kann / nicht finden

Roman Podpryatov
quelle
1
Ich verwalte einen Bot dafür. Ich hoffe, das wird helfen, überprüfen Sie diese < stackoverflow.com/a/37396871/6223024 >
fredy kardian

Antworten:

226

Gehen Sie wie folgt vor, um die Gruppenchat-ID zu erhalten:

  1. Fügen Sie der Gruppe den Telegramm-BOT hinzu.

  2. Holen Sie sich die Liste der Updates für Ihren BOT:

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

    Ex:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. Suchen Sie nach dem "Chat" -Objekt:

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

Dies ist ein Beispiel für die Antwort, wenn Sie Ihren BOT einer Gruppe hinzufügen.

  1. Verwenden Sie die "ID" des "Chat" -Objekts, um Ihre Nachrichten zu senden.
Maverick_Java
quelle
1
Kannst du ein Beispiel geben?
Roman Podpryatov
2
@WannaBeCoder, Sie können wie jedes andere Mitglied einen BOT zu einer Gruppe hinzufügen: Gehen Sie zu Ihren Gruppeneigenschaften, klicken Sie auf Mitglied hinzufügen und verwenden Sie das Suchsymbol, um nach dem Namen des BOT zu suchen. ABER denken Sie daran, dass Sie seit den letzten Änderungen an Telegrammgruppen ein Gruppenadministrator sein müssen, um ein neues Mitglied hinzuzufügen, unabhängig davon, ob es sich um BOTs handelt oder nicht.
Maverick_Java
37
Für neu erstellte Gruppe getUpdatesAnfrage zurückkehrt , {"ok":true,"result":[]}auch wenn ich versuche paar Nachrichten an die Gruppe und Erwähnung bietet über zu senden @und einige zufälligen „Befehle“ /my_id, /start, /help. Irgendwelche Ideen, was zu tun ist? - UPDATE: OK, das Entfernen des Bots aus der Gruppe und das Hinzufügen des Bots zurück haben dieses Problem behoben (auch die Chat-ID in der Gruppe wurde gedruckt). Es sieht so aus, als ob während der Gruppenerstellung kein Bot hinzugefügt werden kann.
Rutsky
8
dies gibt zurück: {"ok": true, "result": []}
Tom
3
Hallo Tom. Haben Sie bereits die Rutsky-Lösung ausprobiert: "Das Entfernen des Bots aus der Gruppe und das Hinzufügen des Bots hat dieses Problem behoben (auch die Chat-ID in der Gruppe wurde gedruckt). Es sieht so aus, als ob der Bot während der Gruppenerstellung nicht hinzugefügt werden kann." Ich habe ein paar Mal das gleiche Problem gehabt, und das Entfernen des Bots aus der Gruppe und das erneute Hinzufügen hat das Problem immer gelöst. Lassen Sie mich wissen, wenn Ihnen dies nicht hilft.
Maverick_Java
136

Hier ist die Sequenz, die für mich funktioniert hat, nachdem ich einige Stunden gekämpft habe:

Angenommen, der Botname lautet my_bot .

1- Fügen Sie den Bot zur Gruppe hinzu.
Gehen Sie zur Gruppe, klicken Sie auf Gruppenname, klicken Sie auf Mitglieder hinzufügen, suchen Sie im Suchfeld nach Ihrem Bot wie folgt: @my_bot, wählen Sie Ihren Bot aus und klicken Sie auf Hinzufügen.

2- Senden Sie eine Dummy-Nachricht an den Bot.
Sie können dieses Beispiel verwenden: /my_id @my_bot
(Ich habe einige Nachrichten ausprobiert, aber nicht alle Nachrichten funktionieren. Das obige Beispiel funktioniert einwandfrei. Vielleicht sollte die Nachricht mit / beginnen.)

3- Gehen Sie zur folgenden URL: https://api.telegram.org/botXXX:YYYY/getUpdates
Ersetzen Sie XXX: JJJJ durch Ihren Bot-Token

4- Suchen Sie nach "chat": {"id": - zzzzzzzzzz,
-zzzzzzzzzz ist Ihre Chat-ID (mit dem negativen Vorzeichen).

5- Testen: Sie können das Senden einer Nachricht an die Gruppe mit einer Locke testen:

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

Wenn Sie Schritt 2 verpassen, gibt es kein Update für die gesuchte Gruppe. Auch wenn mehrere Gruppen vorhanden sind, können Sie in der Antwort nach dem Gruppennamen suchen ("title": " group_name ").

Hoffe das hilft.

Apadana
quelle
2
Hervorragende Aufschlüsselung, wie ein BOT konfiguriert wird.
Angst_matrix
Ich habe eine Nachricht an den Bot gesendet , aber es hat nicht sofort funktioniert. Ich habe ein paar Sekunden (oder wahrscheinlich Minuten) gewartet und versucht, Curl erneut zu versuchen.
LiveWireBT
4
Ich kann meinen Bot nicht in der Gruppe zum Laufen bringen, ich bekomme {"ok": true, "result": []} im Browser. Hoffe, jemand kann mir helfen
TheMrkt
1
Das hat bei mir funktioniert. Wenn Sie Webhooks konfiguriert haben, müssen Sie diese deaktivieren. Vielen Dank!
Erich García
3
@TheMrkt Wie gesagt, Apadana, dass das Senden einer Nachricht, die mit /like /test somethingbeginnt, getUpdates glücklich macht.
e2-e4
99

Ab März 2020 einfach:

  • Laden Sie @RawDataBot in Ihre Gruppe ein.

Beim Beitritt wird eine JSON-Datei ausgegeben, in der sich Ihre Chat-ID unter message.chat.id befindet .

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

Stellen Sie sicher, dass Sie anschließend @RawDataBot aus Ihrer Gruppe entfernen.

eivamu
quelle
3
Wo soll @RawDataBot dies ausgeben? Ich habe den Bot zu meiner Gruppe hinzugefügt, aber nichts ist passiert. Update: In Telegram muss ein Benutzername festgelegt sein, sonst passiert nichts.
Frank Meulenaar
1
Bei weitem der einfachste Weg, dies zu erreichen. Vielen Dank!
Suchanoob
1
@Cherona: Ich habe es gerade noch einmal überprüft. Es scheint jedoch, dass sich der Webclient so geändert hat, dass das Einladen des Bots etwas schwieriger ist als früher. So geht's: Suchen Sie im Suchfeld nach RawDataBot. Klicken Sie auf den Kontakt, um eine Chat-Sitzung zu starten. Klicken Sie auf den Chat-Titel, um "Kontaktinformationen" zu öffnen. Klicken Sie auf "Zur Gruppe hinzufügen" und wählen Sie die Gruppe aus. Die Informationen werden sofort wie zuvor ausgegeben. Hoffe es funktioniert bei dir.
Eivamu
42

Nach Mitte 2018:
1 :) Lade @getidsbo oder @RawDataBotdeine Gruppe ein und erhalte deine Gruppen-ID im Feld "Gesendete Chat-ID".

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 :) Verwenden Sie einen inoffiziellen Messenger wie Plus Messenger und sehen Sie Ihre Gruppen-ID in den Gruppen- / Kanalinformationen.

Vor Mitte 2018: (nicht verwenden)
1: Gehe zu ( https://web.telegram.org )
2: Gehe zu deinem Gorup und finde deinen Link zu Gorup ( https://web.telegram.org/#/im) ? p = g154513121 )
3: Kopiere diese Zahl nach g und setze ein (-) davor -154513121
4: Sende deine Nachricht an Gorup bot.sendMessage(-154513121, "Hi")
Ich habe jetzt getestet und arbeite wie ein Zauber

Sedric Heidarizarei
quelle
1
Sehr einfach. Vielen Dank! Getestet in Grafana Alert Notification. So weit, ist es gut.
Adrian Nicolaiev
@Sedric Heidarizarei was ist, wenn dies keine Zahl wie diese ist ( web.telegram.org/#/im?p=@welcomeworld )
Marx Babu
2
'@welcomeworld' ist Ihr Kanal-Benutzername. Sie können eine Nachricht an '@getidsbot' weiterleiten und Ihre ID erhalten
Sedric Heidarizarei
hat das gleiche getan, ist aber auf den Fehler OverflowError gestoßen: Python int zu groß, um in SQLite INTEGER konvertiert zu werden ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')
vinod
Ich habe meine Antwort aktualisiert. Diese Methode funktioniert nicht mehr. Verwenden Sie die After mid-2018Methode vorübergehend .
Sedric Heidarizarei
9

Auf diese Weise können Sie die Chat-ID erhalten.

Senden Sie im privaten Chat mit Ihrem Bot eine zufällige Nachricht. Sie werden diese Nachricht später suchen.

Holen Sie sich Ihr API-Token von bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Stellen Sie dann in Ihrem Browser eine Anfrage mit dieser URL:

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

Die Anfrage gibt eine JSON-Antwort zurück. Suchen Sie im JSON-Text Ihre random messageund erhalten Sie die Chat-ID in diesem Objekt.

Yigit Yuksel
quelle
8

Mit Python und Telethon ist es sehr einfach, eine Chat-ID zu erhalten. Diese Lösung ist am besten für diejenigen geeignet, die mit der Telegramm-API arbeiten.

Wenn Sie kein Telethon haben, führen Sie Folgendes aus:

pip install telethon

Wenn Sie keine registrierte App mit Telegramm haben, registrieren Sie eine: Geben Sie hier die Bildbeschreibung ein Der Link lautet wie folgt: https://my.telegram.org/

Führen Sie dann den folgenden Code aus:

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

Möglicherweise möchten Sie eine Nachricht an Ihre Gruppe senden, damit die Gruppe oben in der Liste angezeigt wird.

Apadana
quelle
7

Sie können die Gruppen-ID auf die gleiche Weise abrufen. Es wird im Nachrichtentext als angezeigt message.chat.idund ist normalerweise eine negative Zahl, bei der normale Chats positiv sind.

Gruppen-IDs und Chat-IDs können nur aus einer empfangenen Nachricht abgerufen werden. Es sind keine Anrufe zum Abrufen aktiver Gruppen usw. verfügbar. Sie müssen sich die Gruppen-ID merken, wenn Sie die Nachricht empfangen und im Cache oder ähnlichem speichern.

Chris Brand
quelle
Kann jemand anderes bestätigen, dass dies wahr ist? Ich bin kurz davor, nach dem Lesen der Dokumente Ja zu sagen. Ich möchte in der Lage sein, die chat_id über den Gruppenlink abzurufen, um meine Anforderungen zu erfüllen.
PrimeTimeTran
1

Erstellen Sie einen Bot oder setzen Sie ihn wie folgt ein:

hat Zugriff auf Nachrichten

anscheinend unabhängig davon, wie alt / neu die Telegrammgruppe ist:

  1. Fügen Sie der Gruppe einen Bot hinzu
  2. Entfernen Sie den Bot aus der Gruppe
  3. Füge der Gruppe erneut einen Bot hinzu

  4. Erstellen Sie eine Skriptdatei und führen Sie ein getUpdatesMethodenbeispiel aus:

    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. Die Funktion muss Folgendes an der Konsole protokollieren:
[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. Die Telegrammgruppe chat_id kann aus der obigen Nachricht extrahiert werden "chat":{"id":-1001202656383,"title"

Hoffe das hilft (HTH)

Trajano Roberto
quelle
0

Der Bot erhält die folgende Nachricht, die von einer Telegrammgruppe stammt, in der ein Bot gleichzeitig existiert:

Daten nach Bedarf extrahieren

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

/* Inhalt

{
    "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
quelle
0

IMHO der beste Weg , dies zu tun , wird unter Verwendung von Telethon, aber wenn man bedenkt , dass die Antwort von Apadana irreparabel veraltet ist, werde ich die Arbeitslösung hier schreiben:

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

Dieses Snippet gibt Ihnen die ersten 10Chats in Ihrem Telegramm.

Annahmen:

  • Sie haben telethonund nest_asyncioinstalliert
  • Sie haben api_idund api_hashvon my.telegram.org
Foad
quelle
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
quelle
Wenn ein Beitrag aus einer Gruppe stammt, sind über ein JSON-Objekt mehrere Informationen verfügbar. Sie können relevante Informationen für Ihre Verwendung extrahieren. Das obige Beispiel zeigt, wie Sie den Inhalt von chat_id erhalten, ist ein Objekt
Trajano Roberto