電報ボット-グループチャットIDを取得する方法?


170

私が使用してきたtelegram_botを、グループチャットに通知を送信するためにグループチャットIDを取得しようとしているが、私はそれを使用する必要がどの方法を知りません。

チャットIDを取得するために、ボットがチャットに参加したときにmessage.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
    

    例:

    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. メッセージを送信するには、「chat」オブジェクトの「id」を使用します。

1
例を提供できますか?
Roman Podpryatov 2015年

2
@WannaBeCoderでは、他のメンバーと同じようにBOTをグループに追加できます。グループのプロパティに移動し、[メンバーの追加]をクリックしてから、検索アイコンを使用してBOTの名前を探します。ただし、最近の電報グループの変更以来、BOTであるかどうかに関係なく、新しいメンバーを追加するにはグループ「admin」である必要があることに注意してください。
Maverick_Java

37
新しく作成されたグループのためのgetUpdates要求に戻り{"ok":true,"result":[]}、私は経由グループと言及ボットへのメッセージの束を送信しようとした場合でも@、いくつかのランダムな「コマンド」/my_id/start/help。何かアイデアはありますか?-更新:OK、グループからボットを削除し、ボットを追加してこの問題を修正しました(グループのチャットIDも出力されました)---グループの作成中にボットを追加できないようです。
rutsky

8
これは次を返します:{"ok":true、 "result":[]}
Tom

3
こんにちはトム。rutskyソリューションをすでに試しましたか:「ボットをグループから削除し、ボットを追加すると、この問題が修正されました(グループにチャット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を使用してグループへのメッセージの送信をテストできます。

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 2017

私は、送信された1つのボットにメッセージをが、それは(おそらく、または分)数秒待って、再び働いていたカールをしようと、即座に動作しませんでした。
LiveWireBT

4
ボットをグループで動作させることができません。ブラウザに{"ok":true、 "result":[]}が表示されます。誰かが私を助けてくれることを願っています
TheMrkt 2018年

1
これでうまくいきました。1つは、webhookを構成している場合は、それを無効にする必要があることです。ありがとう!
エーリッヒ・ガルシア

3
@TheMrktアパダナで述べたように、likeで始まるメッセージを送信するとgetUpdatesが幸せになる/よう /test somethingです。
e2-e4

100

2020年3月の時点で、単に次のようになります。

  • @RawDataBotをグループに招待します。

参加すると、チャットIDmessage.chat.idにあるJSONファイルが出力されます。

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

後でグループから@RawDataBotをキックしてください。


3
@RawDataBotはどこに出力する必要がありますか?ボットをグループに追加しましたが、何も起こりませんでした。更新:Telegramでユーザー名を設定する必要があります。そうしないと何も起こりません。
フランクMeulenaar

1
これを達成するためのはるかに簡単な方法。ありがとう!
suchanoob

1
@Cherona:再確認しました。しかし、ボットを招待することが以前よりも少し難しいようにWebクライアントが変更されたようです。これを行う方法は次のとおりです。検索フィールドで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のような非公式な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 Alert Notificationでテストされています。ここまでは順調ですね。
エイドリアンニコライエフ

これは、このようなないよう数(何@Sedric Heidarizareiであればweb.telegram.org/#/im?p=@welcomeworld
マルクスバブー

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を取得できます。

ボットとのプライベートチャットで、ランダムなメッセージを送信します。このメッセージは後で検索します。

bot_fatherからAPIトークンを取得します。 XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

次に、ブラウザでそのURLを使用してリクエストを行います。

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

リクエストはjsonレスポンスを返し、jsonテキスト検索random messageでそのオブジェクトのチャットIDを取得します。


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 2018

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

ボットは、ボットが共存しているテレグラムグループから発信された次のメッセージを受信します。

必要に応じてデータを抽出する

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これを行うための最善の方法は、テレソンを使用しますが、その与えられた答えによってアパダナは修復不可能古いですが、私は作業溶液をここに書きます:

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、テレグラムの最初のチャットを提供します。

仮定:

  • あなたが持っているtelethonnest_asyncioインストール
  • あなたが持っているapi_idmy.telegram.orgapi_hashから

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.