Telegram Bot - làm thế nào để có được id trò chuyện nhóm?


170

Tôi đã sử dụng telegram_bot và cố gắng lấy id nhómChat để gửi thông báo đến trò chuyện nhóm, nhưng không biết tôi phải sử dụng phương pháp nào cho nó.

Để nhận id trò chuyện, tôi sử dụng tin nhắn.chat.id khi bot tham gia trò chuyện nhưng tôi phải sử dụng để nhận id trò chuyện nhóm không thể tìm thấy /


1
Tôi quản lý một bot cho việc này. Tôi hy vọng điều này sẽ giúp ích, hãy kiểm tra < stackoverflow.com/a/37394871/6223024 >
fredy kardian

Câu trả lời:


227

Để có được id trò chuyện nhóm, hãy làm như sau:

  1. Thêm BOT Telegram vào nhóm.

  2. Lấy danh sách các bản cập nhật cho BOT của bạn:

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

    Ví dụ:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. Tìm kiếm đối tượng "trò chuyện":

{"update_id": 8393, "message": {"message_id": 3, "từ": {"id": 7474, "first_name": "AAA"}, "chat": {"id" :, "title ":" "}," ngày ": 25497," new_chat_partIDIAant ": {" id ": 71," first_name ":" NAME "," tên người dùng ":" Your_BOT_NAME "}}}

Đây là một mẫu phản hồi khi bạn thêm BOT vào một nhóm.

  1. Sử dụng "id" của đối tượng "trò chuyện" để gửi tin nhắn của bạn.

1
bạn có thể cung cấp một ví dụ?
Roman Podpryatov

2
@WannaBeCoder, bạn có thể thêm BOT vào một nhóm giống như bất kỳ thành viên nào khác: Chuyển đến thuộc tính nhóm của bạn, nhấp vào thêm thành viên, sau đó sử dụng biểu tượng tìm kiếm để tìm tên của BOT. NHƯNG, hãy nhớ rằng vì những thay đổi gần đây trên các nhóm Telegram, bạn phải là một "quản trị viên" để thêm thành viên mới, cho dù họ có là BOT hay không.
Maverick_Java

37
Đối với nhóm mới được tạo ra getUpdateslợi nhuận yêu cầu {"ok":true,"result":[]}ngay cả khi tôi cố gắng để gửi bó thông điệp đến các nhóm và đề cập đến bot qua @và một số "lệnh" ngẫu nhiên /my_id, /start, /help. Bất cứ ý tưởng phải làm gì? - CẬP NHẬT: OK, xóa bot khỏi nhóm và thêm bot trở lại đã khắc phục sự cố này (cũng là in id trò chuyện trong nhóm) --- có vẻ như bot không thể được thêm trong quá trình tạo nhóm.
rutsky

8
điều này trả về: {"ok": đúng, "kết quả": []}
Tom

3
Chào Tom. Bạn đã thử giải pháp rutsky: "xóa bot khỏi nhóm và thêm bot trở lại đã khắc phục vấn đề này (cũng là in id trò chuyện trong nhóm) --- có vẻ như bot không thể được thêm vào trong quá trình tạo nhóm."? Tôi đã phải đối mặt với cùng một vấn đề một vài lần, và loại bỏ bot khỏi nhóm và thêm nó một lần nữa luôn giải quyết vấn đề. Hãy cho tôi biết nếu điều này sẽ không giúp bạn.
Maverick_Java

136

Đây là trình tự làm việc cho tôi sau khi vật lộn trong vài giờ:

Giả sử tên bot là my_bot .

1- Thêm bot vào nhóm.
Chuyển đến nhóm, nhấp vào tên nhóm, nhấp vào Thêm thành viên, trong hộp tìm kiếm tìm kiếm bot của bạn như thế này: @my_bot, chọn bot của bạn và nhấp vào thêm.

2- Gửi tin nhắn giả cho bot.
Bạn có thể sử dụng ví dụ này: /my_id @my_bot
(Tôi đã thử một vài tin nhắn, không phải tất cả các tin nhắn đều hoạt động. Ví dụ trên hoạt động tốt. Có lẽ tin nhắn nên bắt đầu bằng /)

3- Chuyển đến url sau: https://api.telegram.org/botXXX:YYYY/getUpdates
thay thế XXX: YYYY bằng mã thông báo bot của bạn

4- Tìm "trò chuyện": {"id": - zzzzzzzzzz,
-zzzzzzzzzz là id trò chuyện của bạn (có dấu âm).

5- Kiểm tra: Bạn có thể kiểm tra việc gửi tin nhắn cho nhóm với một lọn tóc:

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

Nếu bạn bỏ lỡ bước 2, sẽ không có bản cập nhật cho nhóm bạn đang tìm kiếm. Ngoài ra nếu có nhiều nhóm, bạn có thể tìm tên nhóm trong phản hồi ("title": " group_name ").

Hi vọng điêu nay co ich.


2
Cuộc chia tay tuyệt vời về cách cấu hình BOT.
sợ_matrix

Tôi đã gửi một tin nhắn đến bot nhưng nó không hoạt động ngay lập tức, đợi vài giây (hoặc có thể là vài phút) và thử cuộn tròn lại hoạt động.
LiveWireBT

4
Tôi không thể để bot của mình hoạt động trong nhóm, tôi nhận được {"ok": true, "result": []} trong trình duyệt. Hy vọng ai đó có thể giúp tôi ra ngoài
TheMrkt

1
Điều này làm việc cho tôi. Một điều, nếu bạn đã cấu hình webhooks, bạn phải vô hiệu hóa nó. Cảm ơn!
Erich García

3
@TheMrkt Dường như, như apadana đã nói, việc gửi một tin nhắn bắt đầu bằng /like /test somethinglàm cho getUpdates hạnh phúc.
e2-e4

100

Kể từ tháng 3 năm 2020, chỉ cần:

  • Mời @RawDataBot vào nhóm của bạn.

Khi tham gia, nó sẽ xuất ra một tệp JSON trong đó id trò chuyện của bạn sẽ được đặt tại message.chat.id .

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

Hãy chắc chắn đá @RawDataBot từ nhóm của bạn sau đó.


3
@RawDataBot nên xuất cái này ở đâu? Tôi đã thêm bot vào nhóm của mình, nhưng không có gì xảy ra. Cập nhật: bạn cần đặt tên người dùng trong Telegram, nếu không sẽ không có gì xảy ra.
Frank Meulenaar

1
Cho đến nay cách dễ nhất để đạt được điều này. Cảm ơn!
suchanoob

1
@Cherona: Tôi vừa xác minh lại. Nhưng có vẻ như máy khách web đã thay đổi nên việc mời bot khó hơn một chút so với trước đây. Đây là cách bạn có thể làm: Tìm kiếm RawDataBot trong trường tìm kiếm. Nhấp vào liên hệ để bắt đầu một phiên trò chuyện. Nhấp vào tiêu đề trò chuyện để mở "Thông tin liên hệ". Nhấp vào "Thêm vào nhóm" và chọn nhóm. Nó sẽ ngay lập tức xuất thông tin như trước. Hi vọng nó sẽ giúp ích cho bạn.
eivamu

42

Sau giữa năm 2018:
1 :) Mời @getidsbo hoặc @RawDataBotvào nhóm của bạn và nhận id nhóm của bạn trong trường id trò chuyện được gửi.

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 :) sử dụng Messenger không chính thức như Plus Messenger và xem id nhóm của bạn trong thông tin nhóm / kênh.

Trước giữa năm 2018: (không sử dụng)
1: Goto ( https://web.telegram.org )
2: Goto Gorup của bạn và Tìm liên kết của bạn về Gorup ( https://web.telegram.org/#/im ? p = g154513121 )
3: Sao chép số đó sau g và đặt (-) Trước đó -154513121
4: Gửi tin nhắn của bạn tới Gorup bot.sendMessage(-154513121, "Hi")
Tôi đã kiểm tra ngay và làm việc như một bùa mê


1
Rất đơn giản. Cảm ơn! Đã thử nghiệm trong Thông báo cảnh báo Grafana. Càng xa càng tốt.
Adrian Nicolaiev

@Sedric Heidarizarei nếu đây không phải là một con số như thế này ( web.telegram.org/#/im?p=@welcomeworld )
Marx Babu

2
'@welcomeworld' là tên người dùng kênh của bạn, bạn có thể chuyển tiếp tin nhắn đến '@getidsbot' và nhận id của bạn
Sedric Heidarizarei

đã làm tương tự nhưng gặp phải lỗi OverflowError: Python int quá lớn để chuyển đổi sang SQLite INTEGER ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')
vinod

Tôi đã cập nhật câu trả lời của mình, Phương pháp này không hoạt động nữa, Tạm thời sử dụng After mid-2018phương pháp này.
Trầm tích Heidarizarei

9

Bạn có thể lấy ID trò chuyện theo cách này.

Khi trò chuyện riêng tư với bot của bạn, hãy gửi một tin nhắn ngẫu nhiên. Bạn sẽ tìm kiếm tin nhắn này sau.

Nhận mã thông báo API của bạn từ bot_ cha: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Sau đó, trên trình duyệt của bạn thực hiện một yêu cầu với url đó:

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

Yêu cầu trả về phản hồi json, trong văn bản json tìm kiếm của bạn random messagevà nhận id trò chuyện trong đối tượng đó.


8

Sử dụng python và telethon rất dễ dàng để có được id trò chuyện. Giải pháp này là tốt nhất cho những người làm việc với API telegram.

Nếu bạn không có telethon, hãy chạy nó:

pip install telethon

Nếu bạn chưa có ứng dụng đã đăng ký với telegram, hãy đăng ký một: nhập mô tả hình ảnh ở đây Liên kết là đây: https://my.telegram.org/

Sau đó chạy mã sau:

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

Bạn có thể muốn gửi tin nhắn cho nhóm của mình để nhóm xuất hiện ở đầu danh sách.


7

Bạn có thể truy xuất ID nhóm theo cùng một cách. Nó xuất hiện trong phần thân thông điệp message.chat.idvà thường là số âm, trong đó các cuộc trò chuyện bình thường là dương.

ID nhóm và ID trò chuyện chỉ có thể được truy xuất từ ​​một tin nhắn đã nhận, không có cuộc gọi nào để truy xuất các nhóm hoạt động, v.v. Bạn phải nhớ ID nhóm khi bạn nhận được tin nhắn và lưu trong bộ nhớ cache hoặc một cái gì đó tương tự.


Bất cứ ai khác có thể xác nhận điều này là đúng? Tôi gần như nói yeah sau khi đọc qua các tài liệu. Tôi muốn có thể lấy chat_id từ liên kết nhóm để đáp ứng yêu cầu của tôi.
PrimeTimeTran

1

tạo một bot, hoặc nếu đã được thiết lập như sau:

có quyền truy cập tin nhắn

rõ ràng, bất kể nhóm Telegram cũ / mới bao nhiêu tuổi:

  1. thêm một bot vào nhóm
  2. xóa bot khỏi nhóm
  3. thêm bot một lần nữa vào nhóm

  4. tạo một tập lệnh script và chạy getUpdatesví dụ phương thức:

    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. Hàm sẽ đăng nhập vào bàn điều khiển như sau:
[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 nhóm Telegram có thể được trích xuất từ ​​tin nhắn trên "chat":{"id":-1001202656383,"title"

Hy vọng điều này sẽ giúp (HTH)


0

bot nhận được thông báo sau bắt nguồn từ nhóm Telegram có bot cùng tồn tại:

trích xuất dữ liệu theo yêu cầu

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

/ * nội dung

{
    "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 cách tốt nhất để làm điều này là sử dụng TeleThon, nhưng cho rằng câu trả lời của apadana đã lỗi thời không thể sửa chữa, tôi sẽ viết giải pháp làm việc ở đây:

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

đoạn trích này sẽ cung cấp cho bạn các 10cuộc trò chuyện đầu tiên trong Telegram của bạn.

Giả định:

  • bạn có telethonnest_asynciocài đặt
  • bạn có api_idapi_hashtừ 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 );
}

khi một bài đăng bắt nguồn từ một nhóm, một số thông tin có sẵn thông qua một đối tượng JSON, bạn có thể trích xuất thông tin liên quan để sử dụng ví dụ trên minh họa cách lấy nội dung chat_id là một đối tượng
Trajano Roberto

0

Nếu bạn đang triển khai bot của mình, hãy lưu tên nhóm -> bảng id và yêu cầu nó bằng lệnh. Sau đó, bạn cũng có thể gửi mỗi tên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.