Telegram Bot - jak zdobyć identyfikator czatu grupowego?

170

Używam telegram_bot , i staramy się w pokoju konferencyjnym id do wysyłania powiadomień do czatu grupowego, ale nie wiem jakie metody muszę używać dla niego.

Aby uzyskać identyfikator czatu, używam do message.chat.id, gdy bot uczestniczył w czacie, ale którego muszę użyć do uzyskania identyfikatora czatu grupowego, nie może znaleźć /

Roman Podpryatov
źródło
1
Zarządzam do tego botem. Mam nadzieję, że to pomoże, sprawdź to < stackoverflow.com/a/37396871/6223024 >
fredy kardian

Odpowiedzi:

227

Aby uzyskać identyfikator czatu grupowego, wykonaj następujące czynności:

  1. Dodaj Telegram BOT do grupy.

  2. Uzyskaj listę aktualizacji swojego BOTa:

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

    Dawny:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. Poszukaj obiektu „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 "}}}

To jest próbka odpowiedzi, gdy dodajesz swojego BOTa do grupy.

  1. Do wysyłania wiadomości używaj „id” obiektu „chat”.
Maverick_Java
źródło
1
czy możesz podać przykład?
Roman Podpryatov
2
@WannaBeCoder, możesz dodać BOTa do grupy, tak jak każdego innego członka: Przejdź do właściwości swojej grupy, kliknij dodaj członka, a następnie użyj ikony wyszukiwania, aby znaleźć nazwę BOTa. ALE pamiętaj, że od czasu ostatnich zmian w grupach Telegramów musisz być „administratorem” grupy, aby dodać nowego członka, niezależnie od tego, czy są to BOTy, czy nie.
Maverick_Java
37
Dla nowo utworzonej grupy getUpdatesżądanie zwrotu {"ok":true,"result":[]}nawet jeśli próbuję wysłać kilka wiadomości do grupy I wspomnij poprzez bota @i kilka przypadkowych „polecenia” /my_id, /start, /help. Jakieś pomysły, co robić? - AKTUALIZACJA: OK, usunięcie bota z grupy i dodanie bota z powrotem naprawiło ten problem (również wyświetlał identyfikator czatu w grupie) --- wygląda na to, że nie można dodać bota podczas tworzenia grupy.
rutsky
8
to zwraca: {"ok": true, "result": []}
Tom
3
Cześć Tom. Czy wypróbowałeś już rozwiązanie Rutsky'ego: "usunięcie bota z grupy i dodanie bota z powrotem naprawiło ten problem (również wyświetlał identyfikator czatu w grupie) --- wygląda na to, że bota nie można dodać podczas tworzenia grupy."? Kilka razy napotkałem ten sam problem, a usunięcie bota z grupy i ponowne dodanie go zawsze rozwiązało problem. Daj mi znać, jeśli to ci nie pomoże.
Maverick_Java
136

Oto sekwencja, która zadziałała dla mnie po kilku godzinach walki:

Załóżmy, że nazwa bota to my_bot .

1- Dodaj bota do grupy.
Przejdź do grupy, kliknij nazwę grupy, kliknij Dodaj członków, w polu wyszukiwania wyszukaj swojego bota w ten sposób: @my_bot, wybierz swojego bota i kliknij dodaj.

2- Wyślij fałszywą wiadomość do bota.
Możesz skorzystać z tego przykładu: /my_id @my_bot
(Wypróbowałem kilka wiadomości, nie wszystkie działają. Przykład powyżej działa dobrze. Może wiadomość powinna zaczynać się od /)

3- Przejdź do następującego adresu URL: https://api.telegram.org/botXXX:YYYY/getUpdates
zamień XXX: YYYY na swój token bota

4- Poszukaj „czatu”: {„id”: - zzzzzzzzzz,
-zzzzzzzzzz to Twój identyfikator czatu (ze znakiem minus).

5- Testowanie: Możesz przetestować wysyłanie wiadomości do grupy z zawinięciem:

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

Jeśli pominiesz krok 2, nie będzie aktualizacji dla szukanej grupy. Jeśli istnieje wiele grup, możesz poszukać nazwy grupy w odpowiedzi („tytuł”: „ nazwa_grupy ”).

Mam nadzieję że to pomoże.

apadana
źródło
2
Doskonałe zerwanie z konfiguracją BOTa.
fear_matrix
Wysłałem jedną wiadomość do bota, ale nie zadziałała od razu, czekałem kilka sekund (lub prawdopodobnie minuty) i ponownie spróbowałem curl.
LiveWireBT
4
Nie mogę zmusić mojego bota do pracy w grupie, w przeglądarce wyświetla się {"ok": true, "result": []}. Mam nadzieję, że ktoś może mi pomóc
TheMrkt
1
To zadziałało dla mnie. Jedna rzecz, jeśli masz skonfigurowane webhooki, musisz je wyłączyć. Dzięki!
Erich García
3
@TheMrkt Wydaje się, jak powiedział apadana, że ​​wysłanie wiadomości zaczynającej się od /like /test somethingsprawia, że ​​getUpdates jest szczęśliwe.
e2-e4
100

Od marca 2020 r. Po prostu:

  • Zaproś @RawDataBot do swojej grupy.

Po dołączeniu wyświetli plik JSON, w którym identyfikator czatu będzie znajdować się pod adresem message.chat.id .

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

Pamiętaj, aby później wyrzucić @RawDataBot ze swojej grupy.

eivamu
źródło
3
Gdzie @RawDataBot powinien to wypisać? Dodałem bota do mojej grupy, ale nic się nie stało. Aktualizacja: musisz ustawić nazwę użytkownika w Telegramie, w przeciwnym razie nic się nie dzieje.
Frank Meulenaar
1
Zdecydowanie najłatwiejszy sposób na osiągnięcie tego. Dzięki!
suchanoob
1
@Cherona: Właśnie to ponownie zweryfikowałem. Wygląda jednak na to, że klient sieciowy zmienił się w taki sposób, że zaproszenie bota jest nieco trudniejsze niż kiedyś. Oto, jak możesz to zrobić: Wyszukaj RawDataBot w polu wyszukiwania. Kliknij kontakt, aby rozpocząć sesję czatu. Kliknij tytuł czatu, aby otworzyć „Informacje kontaktowe”. Kliknij „Dodaj do grupy” i wybierz grupę. Natychmiast wyświetli informacje, jak poprzednio. Mam nadzieję, że to działa dla Ciebie.
eivamu
42

Po połowie 2018 r .:
1 :) Zaproś @getidsbo lub @RawDataBotdo swojej grupy i uzyskaj identyfikator grupy w polu wysłanego identyfikatora czatu.

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 :) użyj nieoficjalnego komunikatora, takiego jak Plus Messenger i zobacz swój identyfikator grupy w informacjach o grupie / kanale.

Przed połową 2018 r .: (nie używaj)
1: Idź do ( https://web.telegram.org )
2: Idź do swojego Gorupa i znajdź swój link do Gorupa ( https://web.telegram.org/#/im ? p = g154513121 )
3: Skopiuj ten numer po g i wstaw (-) Wcześniej -154513121
4: Wyślij wiadomość do Gorup bot.sendMessage(-154513121, "Hi")
Testowałem teraz i działam jak urok

Sedric Heidarizarei
źródło
1
Bardzo prosty. Dzięki! Przetestowano w Powiadomieniu Alert Grafana. Na razie w porządku.
Adrian Nicolaiev
@Sedric Heidarizarei a co, jeśli to nie jest numer taki jak ten ( web.telegram.org/#/im?p=@welcomeworld )
Marx Babu
2
„@welcomeworld” to nazwa użytkownika Twojego kanału, możesz przekazać wiadomość do „@getidsbot” i uzyskać identyfikator
Sedric Heidarizarei
zrobił to samo, ale napotkał błąd OverflowError: Python int zbyt duży, aby przekonwertować na SQLite INTEGER ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')
vinod
Zaktualizowałem moją odpowiedź, Ta metoda już nie działa, Tymczasowo użyj After mid-2018metody.
Sedric Heidarizarei,
9

W ten sposób możesz uzyskać identyfikator czatu.

Na prywatnym czacie ze swoim botem wyślij losową wiadomość. Przeszukasz tę wiadomość później.

Uzyskaj swój token API od bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Następnie w przeglądarce wyślij żądanie z tym adresem URL:

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

Żądanie zwraca odpowiedź json, w tekście json wyszukaj swój random messagei uzyskaj identyfikator czatu w tym obiekcie.

Yigit Yuksel
źródło
8

Używając Pythona i Telethona, bardzo łatwo jest uzyskać identyfikator czatu. To rozwiązanie jest najlepsze dla tych, którzy pracują z telegramowym API.

Jeśli nie masz telethona, uruchom to:

pip install telethon

Jeśli nie masz zarejestrowanej aplikacji z telegramem, zarejestruj ją: wprowadź opis obrazu tutaj Link jest następujący: https://my.telegram.org/

Następnie uruchom następujący kod:

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

Możesz wysłać wiadomość do swojej grupy, aby pojawiła się ona na górze listy.

apadana
źródło
7

W ten sam sposób możesz pobrać identyfikator grupy. Pojawia się w treści wiadomości jako message.chat.idi zwykle jest liczbą ujemną, gdzie normalne rozmowy są pozytywne.

Identyfikatory grup i identyfikatory czatów można pobrać tylko z otrzymanej wiadomości, nie ma dostępnych połączeń, aby pobrać aktywne grupy itp. Musisz zapamiętać identyfikator grupy po otrzymaniu wiadomości i zapisać go w pamięci podręcznej lub w podobnym miejscu.

Chris Brand
źródło
Czy ktoś może potwierdzić, że to prawda? Jestem blisko powiedzenia „tak” po przeczytaniu dokumentów. Chciałbym móc uzyskać identyfikator chat_id z linku do grupy, aby spełnić moje wymagania.
PrimeTimeTran
1

utwórz bota lub jeśli już został utworzony ustaw w następujący sposób:

ma dostęp do wiadomości

najwyraźniej niezależnie od tego, jak stara / nowa jest grupa Telegram:

  1. dodaj bota do grupy
  2. usunąć bota z grupy
  3. dodaj bota ponownie do grupy

  4. utwórz plik skryptu i uruchom getUpdatesprzykładową metodę:

    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. funkcja rejestruje w konsoli następujące dane:
[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. Telegram group chat_id można wyodrębnić z powyższej wiadomości "chat":{"id":-1001202656383,"title"

Mam nadzieję, że to pomoże (HTH)

Trajano Roberto
źródło
0

bot otrzymuje następującą wiadomość pochodzącą z grupy Telegram, w której współistnieje bot:

wyodrębnij wymagane dane

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

/ * zawartość

{
    "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
źródło
0

IMHO najlepszy sposób, aby to zrobić jest użycie Telethonu, ale biorąc pod uwagę, że odpowiedź przez Apadana jest nieaktualne poza naprawy, będę pisać roztwór roboczy tutaj:

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

ten fragment umożliwi Ci pierwsze 10rozmowy w telegramie.

Założenia:

  • masz telethoni nest_asynciozainstalowałeś
  • masz api_idi api_hashz my.telegram.org
Foad
źródło
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
źródło
kiedy post pochodzi z grupy, kilka informacji jest dostępnych za pośrednictwem obiektu JSON, możesz wyodrębnić odpowiednie informacje do użytku. powyższy przykład ilustruje, jak uzyskać treść chat_id to obiekt
Trajano Roberto
0

Jeśli implementujesz swojego bota, zachowaj nazwę grupy -> tablicę id i zapytaj ją poleceniem. Następnie możesz również wysłać według nazwy.

Angelo Dureghello
źródło