Telegram Bot - як отримати ідентифікатор групового чату?


170

Я використовую telegram_bot , і намагаюся отримати ідентифікатор , щоб до конференції відправляти повідомлення групового чату, але не знаю , які методи я повинен використовувати для цього.

Для отримання ідентифікатора чату я використовую message.chat.id, коли бот брав участь у чаті, але який я повинен використовувати для отримання ідентифікатора групового чату, не можу знайти /


1
Я керую ботом для цього. Я сподіваюся , що це допоможе, перевірити це < stackoverflow.com/a/37396871/6223024 >
Фреді kardian

Відповіді:


227

Щоб отримати ідентифікатор групового чату, виконайте наступне:

  1. Додайте Telegram BOT до групи.

  2. Отримайте список оновлень BOT:

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

    Наприклад:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. Шукайте об’єкт "чат":

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

Це зразок відповіді, коли ви додаєте BOT у групу.

  1. Використовуйте "id" об'єкта "chat" для надсилання повідомлень.

1
Ви можете навести приклад?
Роман Підпрятов

2
@WannaBeCoder, ви можете додати BOT до групи, як і будь-який інший член. АЛЕ, майте на увазі, що з недавніх змін у групах Telegram ви повинні бути адміністратором групи, щоб додати нового члена, будь то BOT чи ні.
Maverick_Java

37
Для новостворених груп getUpdatesповертаються запит , {"ok":true,"result":[]}навіть якщо я намагаюся відправити купу повідомлень в групі і згадка бот через @та деякі випадкові «команди» /my_id, /start, /help. Будь-які ідеї, що робити? - ОНОВЛЕННЯ: ОК, видалення бота з групи та додавання бота назад виправлено цю проблему (також він друкував ідентифікатор чату в групі) --- схоже, бот не може бути доданий під час створення групи.
руцький

8
це повертає: { "ОК": правда "результат" ,: []}
Том

3
Привіт @ Tom. Ви вже пробували рішення rutsky: "видалення бота з групи та додавання бота назад виправлено цю проблему (також він друкував ідентифікатор чату в групі) --- схоже, бот не може бути доданий під час створення групи."? Я стикався з тією ж проблемою пару разів, і видалення бота з групи та додавання його знову і знову завжди вирішувало проблему. Повідомте мене, якщо це вам не допоможе.
Maverick_Java

136

Ось послідовність, яка працювала на мене після боротьби протягом кількох годин:

Припустимо, ім'я бота my_bot .

1- Додайте бота до групи.
Перейдіть до групи, натисніть на назву групи, натисніть Додати членів, у вікні пошуку шукайте свого бота так: @my_bot, виберіть бота та натисніть кнопку Додати.

2- Надішліть боту повідомлення про манекен.
Ви можете використовувати цей приклад: /my_id @my_bot
(Я спробував декілька повідомлень, не всі повідомлення працюють. Приклад вище працює добре. Можливо, повідомлення має починатися з /)

3- Перейдіть до наступної URL-адреси: https://api.telegram.org/botXXX:YYYY/getUpdates
замініть XXX: РРРР на маркер боту

4- Шукайте "чат": {"id": - zzzzzzzzzz,
-zzzzzzzzzz - ваш ідентифікатор чату (з негативним знаком).

5- Тестування: Ви можете перевірити надсилання повідомлення до групи за допомогою:

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

Якщо ви пропустите крок 2, для групи, яку ви шукаєте, оновлення не буде. Також якщо є кілька груп, ви можете шукати ім’я групи у відповіді ("title": " name_name_name ").

Сподіваюся, це допомагає.


2
Чудова розбивка щодо налаштування BOT.
strah_matrix

Я надіслав одне повідомлення боту, але воно не спрацювало миттєво, зачекавши кілька секунд (або, мабуть, хвилин) і спробу завитка знову спрацювало.
LiveWireBT

4
Я не можу, щоб мій бот працював у групі, я отримую {"ok": true, "result": []} у браузері. Сподіваюся, хтось може мені допомогти
TheMrkt

1
Це працювало для мене. Одне, якщо у вас налаштовані веб-кнопочки, ви повинні його відключити. Дякую!
Еріх Гарсія

3
@TheMrkt Як видається apadana, схоже, що sendind повідомлення, що починається з /подібного, /test somethingробить getUpdates щасливим.
e2-e4

100

Станом на березень 2020 року просто:

  • Запросіть @RawDataBot до своєї групи.

Після приєднання він видасть файл JSON, де ваш ідентифікатор чату буде розміщений на message.chat.id .

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

Не забудьте пізніше @RawDataBot зі своєї групи.


3
Де @RawDataBot повинен виводити це? Я додав бота до своєї групи, але нічого не відбулося. Оновлення: вам потрібно встановити ім’я користувача в Telegram, інакше нічого не станеться.
Френк Меуленаар

1
На сьогодні найпростіший спосіб досягти цього. Дякую!
suchanoob

1
@Cherona: Я щойно перевірив це. Але, схоже, веб-клієнт змінився настільки, що запросити бота трохи складніше, ніж раніше. Ось як це можна зробити: Шукайте RawDataBot у полі пошуку. Клацніть контакт, щоб розпочати сеанс чату. Клацніть заголовок чату, щоб відкрити "Контактну інформацію". Клацніть «Додати до групи» та виберіть групу. Він негайно виведе інформацію, як і раніше. Сподіваюся, це працює для вас.
eivamu

42

Після середини 2018 року:
1 :) Запросіть @getidsbo або @RawDataBotдо своєї групи та отримайте свій ідентифікатор групи у полі, що надсилається в чаті.

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 :) використовуйте невмілий Messenger, як Plus Messenger, і перегляньте свій ідентифікатор групи в інформації про групу / канал.

До середини 2018 року: (не використовуйте)
1: Перейдіть ( https://web.telegram.org )
2: Перейдіть на свою Gorup і знайдіть своє посилання на Gorup ( https://web.telegram.org/#/im ? p = g154513121 )
3: Скопіюйте це число після g та поставте (-) Перед цим -154513121
4: Надішліть повідомлення Gorup bot.sendMessage(-154513121, "Hi")
I Tested Now і працюйте як шарм


1
Дуже просто. Дякую! Випробувано в сповіщенні про повідомлення про Графану. Все йде нормально.
Адріан Ніколаєв

@Sedric Heidarizarei, що робити, якщо це не таке число, як це ( web.telegram.org/#/im?p=@welcomeworld )
Маркс Бабу,

2
'@welcomeworld' - це ваше ім’я користувача каналу, ви можете переслати повідомлення "@getidsbot" і отримати свій ідентифікатор
Sedric Heidarizarei

зробив те ж саме, але зіткнувся з помилкою OverflowError: Python int занадто великий для перетворення в SQLite INTEGER ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')
vinod

Я оновив свою відповідь, Цей метод більше не працює, Тимчасово використовуйте After mid-2018метод.
Седрік Гейдарізарей

9

Ви можете отримати ідентифікатор чату таким чином.

У приватному чаті зі своїм ботом надішліть випадкове повідомлення. Ви будете шукати це повідомлення пізніше.

Отримайте свій API-маркер від bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Потім у своєму браузері зробіть запит із цією URL-адресою:

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

Запит повертає відповідь json, в тексті json шукайте свій random messageі отримуйте ідентифікатор чату в цьому об’єкті.


8

За допомогою python та telethon отримати ідентифікатор чату дуже просто. Таке рішення найкраще підходить для тих, хто працює з телеграмовим API.

Якщо у вас немає телемарафону, запустіть це:

pip install telethon

Якщо у вас немає зареєстрованого додатку з телеграмою, зареєструйте його: введіть тут опис зображення Посилання таке: https://my.telegram.org/

Потім запустіть наступний код:

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

Ви можете надіслати повідомлення групі, щоб група з’явилася вгорі списку.


7

Ви можете отримати ідентифікатор групи аналогічним чином. Він відображається в тілі повідомлення як message.chat.idі, як правило, це від'ємне число, де звичайні чати є позитивними.

Ідентифікатори групи та ідентифікатори чату можна отримати лише з отриманого повідомлення, немає ніяких дзвінків для отримання активних груп тощо. Ви повинні пам’ятати ідентифікатор групи, коли отримуєте повідомлення, і зберігати його в кеші чи щось подібне.


Хтось ще може підтвердити, що це правда? Я майже кажу, що так, прочитавши документи. Я хотів би мати можливість отримати chat_id із групи посилання, щоб виконати мої вимоги.
PrimeTimeTran

1

створити бота або якщо вже створений набір наступним чином:

має доступ до повідомлень

мабуть, незалежно від того, скільки років / нової групи Telegram:

  1. додати бота до групи
  2. видалити бота з групи
  3. знову додати бота до групи

  4. створити файл сценарію та запустити getUpdatesприклад методу:

    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. Функція повинна записати на консоль наступне:
[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. Груповий телеграма chat_id може бути витягнутий із вищезгаданого повідомлення "chat":{"id":-1001202656383,"title"

Сподіваюся, що це допомагає (HTH)


0

бот отримує таке повідомлення, що виникло в групі Telegram із спільним існуванням бота:

витягнути дані за потребою

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

/ * вміст

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

ІМХО найкращий спосіб зробити це з допомогою телемарафону, але , з огляду на , що відповідь на Apadana застарів за ремонт, я буду писати робочий розчин тут:

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

цей фрагмент надасть вам перші 10чати у вашій Telegram.

Припущення:

  • у вас є telethonі nest_asyncioвстановлено
  • у вас є api_idі api_hashз 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 );
}

коли публікація походить від групи, через об’єкт JSON доступно декілька відомостей, ви можете отримати відповідну інформацію для свого використання. Приклад, наведений вище, ілюструє, як отримати вміст chat_id є об'єктом
Trajano Roberto,

0

Якщо ви реалізуєте свого бота, зберігайте назву групи -> id таблицю та запитайте її з командою. Тоді ви також можете відправити на ім’я.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.