전보 봇-그룹 채팅 ID를 얻는 방법?


170

telegram_bot을 사용 하고 groupChat ID를 가져와 그룹 채팅에 알림을 보내려고했지만 어떤 방법을 사용 해야하는지 모르겠습니다.

봇이 채팅에 참여했지만 그룹 채팅 ID를 얻는 데 사용해야하는 채팅 ID를 얻으려면 message.chat.id에 사용합니다.


1
나는 이것을 위해 봇을 관리합니다. 이것이 도움이되기를 바랍니다. < stackoverflow.com/a/37396871/6223024 >
Fredy Kardian

답변:


227

그룹 채팅 ID를 얻으려면 다음과 같이하십시오.

  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":, "제목 ":" "},"date ": 25497,"new_chat_participant ": {"id ": 71,"first_name ":"NAME ","username ":"YOUR_BOT_NAME "}}}

BOT를 그룹에 추가 할 때의 응답 샘플입니다.

  1. "채팅"개체의 "id"를 사용하여 메시지를 보내십시오.

1
예를 들어 줄 수 있습니까?
로마 Podpryatov

2
@WannaBeCoder, 다른 회원과 마찬가지로 그룹에 BOT를 추가 할 수 있습니다. 그룹 속성으로 이동하여 회원 추가를 클릭 한 다음 검색 아이콘을 사용하여 BOT의 이름을 찾으십시오. 그러나 Telegrams 그룹의 최근 변경 사항 때문에 BOT 여부에 관계없이 새 구성원을 추가하려면 "admin"그룹이어야합니다.
Maverick_Java

37
새로 만든 그룹의 경우 getUpdates요청을 반환 {"ok":true,"result":[]}내가 통해 그룹 언급 봇 메시지의 무리를 보내려고해도 @어떤 임의의 "명령" /my_id, /start, /help. 어떤 아이디어를해야합니까? -업데이트 : 좋아, 그룹에서 봇을 제거하고 봇을 다시 추가하면이 문제가 해결되었습니다 (그룹에서 채팅 ID를 인쇄했습니다) --- 그룹을 만드는 동안 봇을 추가 할 수없는 것처럼 보입니다.
rutsky

8
{ "ok": true, "result": []}
Tom

3
안녕 톰. "그룹에서 봇을 제거하고 봇을 다시 추가하면 그룹에서 채팅 ID가 인쇄 됨) --- 그룹 생성 중에 봇을 추가 할 수없는 것 같습니다."? 나는 두 번 같은 문제에 직면 해 있었고 그룹에서 봇을 제거하고 다시 추가하면 항상 문제가 해결되었습니다. 도움이되지 않는 경우 알려주십시오.
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- "chat": { "id":-zzzzzzzzzz,
-zzzzzzzzzz는 채팅 ID입니다 (음수 표시).

5- 테스트 : 컬을 사용하여 그룹에 메시지 전송을 테스트 할 수 있습니다.

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

2 단계를 놓치면 찾고있는 그룹에 대한 업데이트가 없습니다. 또한 여러 그룹이있는 경우 응답에서 그룹 이름 ( "title": " group_name ")을 찾을 수 있습니다.

도움이 되었기를 바랍니다.


2
BOT을 구성하는 방법에 대한 훌륭한 해체.
fear_matrix

봇 에게 하나의 메시지를 보냈지 만 즉시 작동하지 않아 몇 초 (또는 아마도 몇 분) 기다렸다가 다시 컬을 시도했습니다.
LiveWireBT

4
내 봇을 그룹에서 사용할 수 없으며 브라우저에서 { "ok": true, "result": []}를 얻습니다. 누군가 나를 도울 수 있기를 바랍니다
TheMrkt

1
이것은 나를 위해 일했습니다. 한 가지, 웹 후크가 구성된 경우 비활성화해야합니다. 감사!
Erich García

3
@TheMrkt apadana가 말했듯이, getUpdates로 시작하는 메시지를 보내는 것은 getUpdates를 행복하게 만드는 /것 같습니다 /test something.
e2-e4

100

2020 년 3 월 기준으로 간단히 :

  • @RawDataBot 을 그룹에 초대 하십시오.

가입하면 채팅 IDmessage.chat.id 에 있는 JSON 파일이 출력 됩니다 .

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

나중에 그룹에서 @RawDataBot을 시작하십시오.


3
@RawDataBot는 어디서 이것을 출력해야합니까? 봇을 그룹에 추가했지만 아무 일도 일어나지 않았습니다. 업데이트 : Telegram에 사용자 이름을 설정해야합니다. 그렇지 않으면 아무 일도 일어나지 않습니다.
Frank Meulenaar

1
이를 달성하는 가장 쉬운 방법은 지금까지입니다. 감사!
suchanoob

1
@Cherona : 방금 재확인했습니다. 그러나 웹 클라이언트가 봇을 초대하는 것이 예전보다 조금 어려워졌습니다. 이를 수행하는 방법은 다음과 같습니다. 검색 필드에서 RawDataBot을 검색하십시오. 대화 세션을 시작하려면 연락처를 클릭하십시오. 채팅 제목을 클릭하여 "연락처 정보"를여십시오. "그룹에 추가"를 클릭하고 그룹을 선택하십시오. 이전과 같이 즉시 정보를 출력합니다. 그것이 당신을 위해 작동하기를 바랍니다.
eivamu

42

2018 년 중반 이후 :
1 :) @getidsbo 또는 @RawDataBot그룹에 초대하고 보낸 채팅 ID 필드에서 그룹 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 :) 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")
지금 테스트하여 매력처럼 작동합니다


1
매우 간단합니다. 감사! Grafana 경고 알림에서 테스트되었습니다. 여태까지는 그런대로 잘됐다.
Adrian Nicolaiev 2016

@Sedric Heidarizarei 이것이 이와 같은 숫자가 아닌 경우 어떻게해야합니까 ( web.telegram.org/#/im?p=@welcomeworld )
Marx Babu

2
'@welcomeworld'는 채널 사용자 이름이며 '@getidsbot'에 메시지를 전달하고 ID를받을 수 있습니다.
Sedric Heidarizarei

파이썬 SQLite는 INTEGER ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')로 변환하기에 너무 큰 값 int : (가) 동일하지만 오류 OverflowError으로 발생했다
비 노드

내 대답을 업데이트했습니다.이 방법은 더 이상 작동하지 않습니다 After mid-2018. 일시적으로 방법을 사용하십시오 .
Sedric Heidarizarei

9

이런 식으로 채팅 ID를 얻을 수 있습니다.

봇과의 비공개 채팅에서 임의의 메시지를 보내십시오. 이 메시지는 나중에 검색합니다.

bot_father에서 API 토큰을 받으십시오. XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

그런 다음 브라우저에서 해당 URL로 요청하십시오.

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

요청은 json 응답을 반환 random message합니다.


8

python과 telethon을 사용하면 채팅 ID를 얻는 것이 매우 쉽습니다. 이 솔루션은 텔레 그램 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

같은 방법으로 그룹 ID를 검색 할 수 있습니다. 메시지 본문에 표시 message.chat.id되며 보통 채팅은 양수인 음수입니다.

그룹 ID 및 채팅 ID는 수신 된 메시지에서만 검색 할 수 있으며 활성 그룹 등을 검색하는 데 사용할 수있는 통화는 없습니다. 메시지를 수신하여 캐시 또는 이와 유사한 것으로 저장할 때 그룹 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

bot은 봇이 공존하는 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

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_idapi_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 테이블을 저장하고 명령으로 요청하십시오. 그런 다음 이름별로 보낼 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.