Telegram Bot - bagaimana cara mendapatkan id obrolan grup?

170

Saya telah menggunakan telegram_bot , dan mencoba untuk mendapatkan id groupChat untuk mengirim pemberitahuan ke obrolan grup, tetapi tidak tahu metode mana yang harus saya gunakan untuk itu.

Untuk mendapatkan id obrolan saya gunakan untuk message.chat.id ketika bot berpartisipasi dalam obrolan tetapi yang harus saya gunakan untuk mendapatkan id obrolan grup tidak dapat menemukan /

Roman Podpryatov
sumber
1
Saya mengelola bot untuk ini. Saya harap ini akan membantu, periksa ini < stackoverflow.com/a/37396871/6223024 >
fredy kardian

Jawaban:

227

Untuk mendapatkan id obrolan grup, lakukan hal berikut:

  1. Tambahkan BOT Telegram ke grup.

  2. Dapatkan daftar pembaruan untuk BOT Anda:

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

    Ex:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. Cari objek "obrolan":

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

Ini adalah contoh respons ketika Anda menambahkan BOT ke dalam grup.

  1. Gunakan "id" objek "obrolan" untuk mengirim pesan Anda.
Maverick_Java
sumber
1
dapatkah kamu memberikan contoh?
Roman Podpryatov
2
@WannaBeCoder, Anda dapat menambahkan BOT ke grup seperti halnya anggota lainnya: Buka properti grup Anda, klik pada tambah anggota, lalu gunakan ikon pencarian untuk mencari nama BOT. TETAPI, ingatlah bahwa sejak perubahan terbaru pada grup Telegrams, Anda harus menjadi "admin" grup untuk menambahkan anggota baru, baik itu BOT atau bukan.
Maverick_Java
37
Untuk yang baru dibuat kelompok getUpdatespermintaan pengembalian {"ok":true,"result":[]}bahkan jika saya mencoba mengirim banyak pesan kepada kelompok dan menyebutkan bot via @dan beberapa acak "perintah" /my_id, /start, /help. Ada ide apa yang harus dilakukan? - PEMBARUAN: OK, menghapus bot dari grup, dan menambahkan bot kembali memperbaiki masalah ini (juga mencetak id obrolan dalam grup) --- sepertinya bot tidak dapat ditambahkan selama pembuatan grup.
rutsky
8
ini mengembalikan: {"ok": true, "result": []}
Tom
3
Hai @ Tom. Sudahkah Anda mencoba solusi rutsky: "menghapus bot dari grup, dan menambahkan bot kembali memperbaiki masalah ini (juga mencetak id obrolan dalam grup) --- sepertinya bot tidak dapat ditambahkan selama pembuatan grup."? Saya telah menghadapi masalah yang sama beberapa kali, dan menghapus bot dari grup dan menambahkannya lagi selalu memecahkan masalah. Beri tahu saya jika ini tidak akan membantu Anda.
Maverick_Java
136

Berikut adalah urutan yang bekerja untuk saya setelah berjuang selama beberapa jam:

Asumsikan nama bot adalah my_bot .

1- Tambahkan bot ke grup.
Pergi ke grup, klik nama grup, klik Tambah anggota, di kotak pencarian cari bot Anda seperti ini: @my_bot, pilih bot Anda dan klik tambahkan.

2- Kirim pesan dummy ke bot.
Anda dapat menggunakan contoh ini: /my_id @my_bot
(Saya mencoba beberapa pesan, tidak semua pesan berfungsi. Contoh di atas berfungsi dengan baik. Mungkin pesan harus dimulai dengan /)

3- Buka url berikut: https://api.telegram.org/botXXX:YYYY/getUpdates
ganti XXX: YYYY dengan token bot Anda

4- Cari "obrolan": {"id": - zzzzzzzzzz,
-zzzzzzzzzz adalah id obrolan Anda (dengan tanda negatif).

5- Pengujian: Anda dapat menguji pengiriman pesan ke grup dengan ikal:

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

Jika Anda melewatkan langkah 2, tidak akan ada pembaruan untuk grup yang Anda cari. Juga jika ada beberapa grup, Anda dapat mencari nama grup dalam respons ("title": " group_name ").

Semoga ini membantu.

apadana
sumber
2
Perpisahan yang sangat baik tentang cara mengkonfigurasi BOT.
fear_matrix
Saya mengirim satu pesan ke bot tetapi itu tidak berfungsi secara instan, menunggu beberapa detik (atau mungkin beberapa menit) dan mencoba ikal lagi bekerja.
LiveWireBT
4
Saya tidak bisa membuat bot saya berfungsi di grup, saya mendapatkan {"ok": true, "result": []} di browser. Semoga ada yang bisa membantu saya
TheMrkt
1
Ini berhasil untuk saya. Satu hal, jika Anda telah mengkonfigurasi webhook, Anda harus menonaktifkannya. Terima kasih!
Erich García
3
@TheMrkt Tampaknya, seperti kata apadana, mengirim pesan dimulai dengan /like /test somethingmake getUpdates happy.
e2-e4
100

Pada Maret 2020, cukup:

  • Undang @RawDataBot ke grup Anda.

Setelah bergabung, akan dihasilkan file JSON di mana id obrolan Anda akan berlokasi di message.chat.id .

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

Pastikan untuk menendang @RawDataBot dari grup Anda sesudahnya.

eivamu
sumber
3
Di mana seharusnya @RawDataBot menampilkan ini? Saya menambahkan bot ke grup saya, tetapi tidak ada yang terjadi. Pembaruan: Anda harus memiliki nama pengguna yang ditetapkan di Telegram, jika tidak, tidak ada yang terjadi.
Frank Meulenaar
1
Sejauh ini cara termudah untuk mencapai ini. Terima kasih!
suchanoob
1
@Cherona: Saya baru saja memverifikasi ulang. Tetapi tampaknya klien web telah berubah sehingga mengundang bot sedikit lebih sulit daripada biasanya. Berikut ini cara melakukannya: Cari RawDataBot di bidang pencarian. Klik kontak untuk memulai sesi obrolan. Klik judul obrolan untuk membuka "Info kontak". Klik "Tambahkan ke grup" dan pilih grup. Ini akan segera menampilkan info seperti sebelumnya. Semoga ini berhasil untuk Anda.
eivamu
42

Setelah pertengahan 2018:
1 :) Undang @getidsbo atau @RawDataBotke grup Anda dan dapatkan id grup Anda di bidang id chat yang dikirim.

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 :) gunakan Messenger tidak resmi seperti Plus Messenger dan lihat id grup Anda di info grup / saluran.

Sebelum pertengahan 2018: (jangan Gunakan)
1: Goto ( https://web.telegram.org )
2: Goto Gorup Anda dan Temukan tautan Gorup Anda ( https://web.telegram.org/#/im ? p = g154513121 )
3: Salin nomor itu setelah g dan letakkan (-) Sebelum Itu -154513121
4: Kirim Pesan Anda ke Gorup bot.sendMessage(-154513121, "Hi")
Saya Tes Sekarang dan Bekerja seperti Pesona

Sedric Heidarizarei
sumber
1
Sangat sederhana. Terima kasih! Diuji dalam Pemberitahuan Peringatan Grafana. Sejauh ini baik.
Adrian Nicolaiev
@Sedric Heidarizarei bagaimana jika ini bukan angka seperti ini ( web.telegram.org/#/im?p=@welcomeworld )
Marx Babu
2
'@welcomeworld' adalah nama pengguna saluran Anda, Anda dapat meneruskan pesan ke '@getidsbot' dan dapatkan id Anda
Sedric Heidarizarei
melakukan hal yang sama tetapi mengalami kesalahan OverflowError: Python int terlalu besar untuk dikonversi ke SQLite INTEGER ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')
vinod
Saya memperbarui jawaban saya, Metode ini tidak berfungsi lagi, Untuk sementara gunakan After mid-2018metode ini.
Sedric Heidarizarei
9

Anda bisa mendapatkan ID Obrolan dengan cara ini.

Pada obrolan pribadi dengan bot Anda, kirim pesan acak. Anda akan mencari pesan ini nanti.

Dapatkan token API Anda dari bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Kemudian, di browser Anda buat permintaan dengan url itu:

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

Permintaan mengembalikan respons json, dalam pencarian teks json Anda random messagedan dapatkan id obrolan di objek itu.

Yigit Yuksel
sumber
8

Menggunakan python dan telethon, sangat mudah untuk mendapatkan id obrolan. Solusi ini terbaik bagi mereka yang bekerja dengan API telegram.

Jika Anda tidak memiliki telethon, jalankan ini:

pip install telethon

Jika Anda tidak memiliki aplikasi terdaftar dengan telegram, daftarkan satu: masukkan deskripsi gambar di sini Tautannya adalah ini: https://my.telegram.org/

Kemudian jalankan kode berikut:

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

Anda mungkin ingin mengirim pesan ke grup Anda sehingga grup tersebut muncul di bagian atas daftar.

apadana
sumber
7

Anda dapat mengambil ID grup dengan cara yang sama. Muncul di badan pesan sebagaimessage.chat.id dan biasanya nomor negatif, di mana obrolan normal positif.

ID grup dan ID Obrolan hanya dapat diambil dari pesan yang diterima, tidak ada panggilan yang tersedia untuk mengambil grup yang aktif, dll. Anda harus mengingat ID grup ketika Anda menerima pesan dan menyimpannya dalam cache atau sesuatu yang serupa.

Chris Brand
sumber
Adakah yang bisa mengkonfirmasi ini benar? Saya hampir mengatakan ya setelah membaca dokumen. Saya ingin mendapatkan chat_id dari tautan grup untuk memenuhi persyaratan saya.
PrimeTimeTran
1

buat bot, atau jika sudah dibuat set sebagai berikut:

memiliki akses ke pesan

rupanya, terlepas dari berapa lama / baru grup Telegram adalah:

  1. tambahkan bot ke grup
  2. hapus bot dari grup
  3. tambahkan bot lagi ke grup

  4. buat file skrip dan jalankan getUpdatescontoh metode:

    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. fungsi harus masuk ke konsol sebagai berikut:
[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. Grup telegram chat_id dapat diekstraksi dari pesan di atas "chat":{"id":-1001202656383,"title"

Semoga Ini Membantu (HTH)

Trajano Roberto
sumber
0

bot menerima pesan berikut yang berasal dari grup Telegram yang memiliki bot bersama:

ekstrak data sesuai kebutuhan

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

/ * isinya

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

IMHO cara terbaik untuk melakukannya adalah dengan menggunakan telethon, tetapi mengingat bahwa jawaban oleh Apadana sudah usang diperbaiki, saya akan menulis solusi yang bekerja di sini:

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

cuplikan ini akan memberi Anda 10obrolan pertama di Telegram Anda.

Asumsi:

  • Anda telah telethondan nest_asynciomenginstal
  • Anda memiliki api_iddan api_hashdari my.telegram.org
Isi
sumber
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
sumber
ketika sebuah pos berasal dari grup, beberapa informasi tersedia melalui objek JSON Anda dapat mengekstrak informasi yang relevan untuk Anda gunakan, contoh di atas menggambarkan cara mendapatkan konten chat_id adalah objek
Trajano Roberto
0

Jika Anda menerapkan bot Anda, simpan nama grup yang tersimpan -> tabel id, dan tanyakan dengan perintah. Kemudian Anda juga dapat mengirim per nama.

Angelo Dureghello
sumber