Telegram Bot - วิธีรับรหัสแชทกลุ่ม?


170

ฉันใช้telegram_botและพยายามรับ groupChat id เพื่อส่งการแจ้งเตือนไปยังการแชทเป็นกลุ่ม แต่ไม่ทราบวิธีการที่ฉันต้องใช้

ในการรับ ID แชทฉันใช้เพื่อส่งข้อความ chat.id เมื่อบอตเข้าร่วมแชท แต่ฉันต้องใช้เพื่อรับ ID แชทกลุ่มไม่สามารถค้นหา /


1
ฉันจัดการบอทสำหรับสิ่งนี้ ฉันหวังว่านี่จะช่วยได้โปรดตรวจสอบ < stackoverflow.com/a/37396871/6223024 >
fredy kardian

คำตอบ:


227

เพื่อให้ได้ ID การแชทเป็นกลุ่มให้ทำดังนี้:

  1. เพิ่ม Telegram BOT ให้กับกลุ่ม

  2. รับรายการอัปเดตสำหรับ BOT ของคุณ:

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

    Ex:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. มองหาวัตถุ "แชท":

{ "update_id": 8393 "ข้อความ": { "Message_id": 3, "จาก": { "id": 7474 "first_name": "AAA"}, "แชท": { "id": "ชื่อ ":" "}," วันที่ ": 25497" new_chat_participant ": {" id ": 71" first_name ":" NAME", "ชื่อผู้ใช้": "YOUR_BOT_NAME"}}}

นี่คือตัวอย่างของการตอบสนองเมื่อคุณเพิ่ม BOT ของคุณลงในกลุ่ม

  1. ใช้ "id" ของวัตถุ "แชท" เพื่อส่งข้อความของคุณ

1
คุณสามารถให้ตัวอย่างได้หรือไม่
Roman Podpryatov

2
@WannaBeCoder คุณสามารถเพิ่ม BOT ให้กับกลุ่มเช่นเดียวกับสมาชิกคนอื่น ๆ : ไปที่คุณสมบัติกลุ่มของคุณคลิกที่เพิ่มสมาชิกจากนั้นใช้ไอคอนค้นหาเพื่อค้นหาชื่อของ BOT แต่โปรดทราบว่าเนื่องจากการเปลี่ยนแปลงล่าสุดในกลุ่มโทรเลขคุณจะต้องเป็นกลุ่ม "ผู้ดูแลระบบ" เพื่อเพิ่มสมาชิกใหม่ไม่ว่าจะเป็น BOT หรือไม่
Maverick_Java

37
สำหรับกลุ่มที่สร้างขึ้นใหม่getUpdatesผลตอบแทนที่ร้องขอ{"ok":true,"result":[]}แม้ว่าผมจะพยายามที่จะส่งพวงของข้อความไปยังกลุ่มและกล่าวถึง ธ ปทผ่าน@และบางส่วน /my_id"คำสั่ง" สุ่ม/start, /help, ความคิดใดที่จะทำอย่างไร - อัปเดต: ตกลงลบบ็อตออกจากกลุ่มและเพิ่มบอทกลับมาแก้ไขปัญหานี้ (รวมถึงพิมพ์รหัสแชทในกลุ่ม) --- ดูเหมือนว่าบอทไม่สามารถเพิ่มได้ในระหว่างการสร้างกลุ่ม
rutsky

8
ผลตอบแทนนี้: {"ตกลง": จริง "ผลลัพธ์": []}
ทอม

3
สวัสดีทอม. คุณลองใช้วิธีแก้ไข rutsky แล้ว: "ลบ bot ออกจากกลุ่มและเพิ่ม bot back แก้ไขปัญหานี้ (เช่นพิมพ์รหัสแชทในกลุ่ม) --- ดูเหมือนว่า bot ไม่สามารถเพิ่มในระหว่างการสร้างกลุ่ม" ฉันต้องเผชิญกับปัญหาเดียวกันสองสามครั้งและลบบอทออกจากกลุ่มและเพิ่มไปอีกครั้งแก้ปัญหาเสมอ แจ้งให้เราทราบหากสิ่งนี้ไม่ช่วยคุณ
Maverick_Java

136

นี่คือลำดับที่ทำงานให้ฉันหลังจากดิ้นรนเป็นเวลาหลายชั่วโมง:

สมมติชื่อบอทเป็นmy_bot

1- เพิ่มบอทไปยังกลุ่ม
ไปที่กลุ่มคลิกที่ชื่อกลุ่มคลิกที่เพิ่มสมาชิกในการค้นหาช่องค้นหาบ็อตของคุณเช่นนี้: @my_bot เลือกบอทของคุณและคลิกเพิ่ม

2- ส่งข้อความจำลองไปยังบอท
คุณสามารถใช้ตัวอย่างนี้: /my_id @my_bot
(ฉันพยายามข้อความไม่กี่ข้อความบางข้อความไม่ทำงานตัวอย่างข้างต้นใช้งานได้ดีบางทีข้อความควรเริ่มต้นด้วย /)

3- ไปที่ URL ต่อไปนี้: https://api.telegram.org/botXXX:YYYY/getUpdates
แทนที่ XXX: YYYY ด้วยโทเค็นบ็อตของคุณ

4- ค้นหา "แชท": {"id": - zzzzzzzzzz,
-zzzzzzzzzz เป็นรหัสแชทของคุณ (พร้อมเครื่องหมายลบ)

5- การทดสอบ:คุณสามารถทดสอบการส่งข้อความไปยังกลุ่มด้วย curl:

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

หากคุณพลาดขั้นตอนที่ 2 จะไม่มีการอัปเดตสำหรับกลุ่มที่คุณกำลังมองหา นอกจากนี้หากมีหลายกลุ่มคุณสามารถค้นหาชื่อกลุ่มในการตอบกลับ ("ชื่อ": " group_name ")

หวังว่านี่จะช่วยได้


2
การเลิกราที่ยอดเยี่ยมเกี่ยวกับวิธีการกำหนดค่า BOT
fear_matrix

ฉันส่งข้อความหนึ่งไปที่บอต แต่มันไม่ทำงานทันทีรอสักครู่ (หรืออาจเป็นนาที) และลองใช้การม้วนอีกครั้ง
LiveWireBT

4
ฉันไม่สามารถให้บอททำงานในกลุ่มได้ฉันได้ {"ok": จริง "ผลลัพธ์": []} ในเบราว์เซอร์ หวังว่าใครบางคนสามารถช่วยฉันออก
TheMrkt

1
สิ่งนี้ใช้ได้สำหรับฉัน สิ่งหนึ่งถ้าคุณมีการกำหนดค่า webhooks คุณต้องปิดการใช้งาน ขอบคุณ!
Erich García

3
@TheMrkt ดูเหมือนว่า apadana ที่กล่าวไว้ว่าการส่งข้อความเริ่มต้นด้วย/like /test somethingทำให้ getUpdates มีความสุข
e2-e4

100

เมื่อวันที่มีนาคม 2563 เพียง:

  • เชิญ@RawDataBotเข้าร่วมกลุ่มของคุณ

เมื่อเข้าร่วมก็จะส่งออกเป็นไฟล์ JSON ที่คุณID แชทจะตั้งอยู่ที่message.chat.id

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

ให้แน่ใจว่าได้เตะ @RawDataBot จากกลุ่มของคุณในภายหลัง


3
@RawDataBot ควรส่งออกที่ใด ฉันเพิ่มบอตในกลุ่ม แต่ไม่มีอะไรเกิดขึ้น อัปเดต: คุณต้องตั้งชื่อผู้ใช้ในโทรเลขไม่เช่นนั้นจะไม่มีอะไรเกิดขึ้น
Frank Meulenaar

1
โดยวิธีที่ง่ายที่สุดในการบรรลุเป้าหมายนี้ ขอบคุณ!
suchanoob

1
@Cherona: ฉันเพิ่งยืนยันอีกครั้ง แต่ดูเหมือนว่าไคลเอนต์เว็บมีการเปลี่ยนแปลงเช่นการเชิญบอทนั้นยากกว่าที่เคยเป็นมา นี่คือวิธีที่คุณทำได้: ค้นหา RawDataBot ในช่องค้นหา คลิกผู้ติดต่อเพื่อเริ่มเซสชันการแชท คลิกที่ชื่อแชทเพื่อเปิด "ข้อมูลการติดต่อ" คลิก "เพิ่มในกลุ่ม" และเลือกกลุ่ม มันจะส่งข้อมูลทันทีตามเดิม หวังว่ามันจะเหมาะกับคุณ
eivamu

42

หลังกลางปี ​​2018:
1 :) เชิญ@getidsboหรือ@RawDataBotกลุ่มของคุณและรับรหัสกลุ่มของคุณในช่อง 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 :) ใช้ Unofficicl Messenger อย่างPlus Messengerและดู id กลุ่มของคุณในข้อมูลกลุ่ม / ช่อง

ก่อนกลางปี ​​2018: (อย่าใช้)
1: Goto ( https://web.telegram.org )
2: ไปที่ Gorup ของคุณและค้นหาลิงก์ของ Gorup ของคุณ ( https://web.telegram.org/#/im ? p = g154513121 )
3: คัดลอกหมายเลขนั้นหลังจาก g และใส่ (-) ก่อนหน้านั้น-154513121
4: ส่งข้อความของคุณไปยัง Gorup bot.sendMessage(-154513121, "Hi")
I ที่ทดสอบแล้วและทำงานเหมือนเครื่องราง


1
ง่ายมาก. ขอบคุณ! ทดสอบใน Grafana Alert Notification จนถึงตอนนี้ดีมาก
Adrian Nicolaiev

@Sedric Heidarizarei จะเกิดอะไรขึ้นถ้านี่ไม่ใช่ตัวเลขเช่นนี้ ( web.telegram.org/#/im?p=@welcomeworld )
Marx Babu

2
'@welcomeworld' เป็นชื่อผู้ใช้ช่องของคุณคุณสามารถส่งต่อข้อความไปที่ '@getidsbot' และรับ ID ของคุณ
Sedric Heidarizarei

ทำเช่นเดียวกัน แต่พบกับข้อผิดพลาด OverflowError: Python int มีขนาดใหญ่เกินไปที่จะแปลงเป็น SQLite INTEGER ... client.send_message (-1240933195_1386556410045688xx08.Hi ')
vinod

ฉันอัปเดตคำตอบของฉันวิธีนี้ใช้งานไม่ได้อีกต่อไปใช้After mid-2018วิธีชั่วคราว
Sedric Heidarizarei

9

คุณสามารถรับ ID แชทด้วยวิธีนี้

ในการแชทส่วนตัวด้วยบอตของคุณส่งข้อความแบบสุ่ม คุณจะค้นหาข้อความนี้ในภายหลัง

รับโทเค็น API ของคุณจาก bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

จากนั้นบนเบราว์เซอร์ของคุณทำการร้องขอด้วย url นั้น:

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

คำขอส่งคืนการตอบสนอง json ในข้อความ json ค้นหาของคุณrandom messageและได้รับ ID การแชทในวัตถุนั้น


8

การใช้ python และ telethon เป็นเรื่องง่ายมากที่จะได้รับ ID การแชท วิธีนี้เหมาะสำหรับผู้ที่ทำงานกับ telegram API

หากคุณไม่มี telethon ให้เรียกใช้สิ่งนี้:

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

คุณสามารถดึง ID กลุ่มได้ในลักษณะเดียวกัน จะปรากฏในเนื้อหาของข้อความเป็นmessage.chat.idและโดยปกติแล้วจะเป็นจำนวนลบซึ่งการแชทปกติจะเป็นค่าบวก

ID กลุ่มและ ID แชทสามารถเรียกดูได้จากข้อความที่ได้รับเท่านั้นไม่มีการโทรเพื่อดึงข้อมูลกลุ่มที่ใช้งาน ฯลฯ คุณต้องจำ ID กลุ่มเมื่อคุณได้รับข้อความและเก็บไว้ในแคชหรือสิ่งที่คล้ายกัน


มีใครยืนยันได้ไหมว่าสิ่งนี้เป็นจริง ฉันใกล้จะบอกว่าใช่หลังจากอ่านเอกสาร ฉันต้องการรับ chat_id จากลิงก์กลุ่มเพื่อตอบสนองความต้องการของฉัน
PrimeTimeTran

1

สร้างบอทหรือถ้าสร้างไว้แล้วตั้งดังนี้:

มีการเข้าถึงข้อความ

เห็นได้ชัดว่าไม่ว่ากลุ่ม Telegram จะเก่า / ใหม่คือ:

  1. เพิ่มบอทไปยังกลุ่ม
  2. ลบ bot ออกจากกลุ่ม
  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

bot ได้รับข้อความต่อไปนี้เกิดขึ้นในกลุ่มโทรเลขที่มีบอตอยู่ร่วมกัน:

ดึงข้อมูลตามต้องการ

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

IMHO วิธีที่ดีที่สุดในการทำเช่นนี้คือการใช้ TeleThon แต่เนื่องจากคำตอบของ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แชทแรกในโทรเลขของคุณ

สมมติฐาน:

  • คุณมี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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.