Telegram Bot - Comment obtenir un identifiant de chat de groupe?

170

J'utilise telegram_bot et j'essaie d'obtenir l'ID groupChat pour envoyer des notifications au chat de groupe, mais je ne sais pas quelles méthodes je dois utiliser pour cela.

Pour obtenir l'identifiant de chat, j'utilise message.chat.id lorsque le bot a participé au chat mais que je dois utiliser pour obtenir l'identifiant de chat de groupe ne peut pas trouver /

Roman Podpryatov
la source
1
Je gère un bot pour ça. J'espère que cela vous aidera, vérifiez ceci < stackoverflow.com/a/37396871/6223024 >
fredy kardian

Réponses:

227

Pour obtenir l'identifiant de discussion de groupe, procédez comme suit:

  1. Ajoutez le Telegram BOT au groupe.

  2. Obtenez la liste des mises à jour pour votre BOT:

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

    Ex:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. Recherchez l'objet "chat":

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

Ceci est un exemple de la réponse lorsque vous ajoutez votre BOT dans un groupe.

  1. Utilisez l '"id" de l'objet "chat" pour envoyer vos messages.
Maverick_Java
la source
1
pouvez-vous donner un exemple?
Roman Podpryatov
2
@WannaBeCoder, vous pouvez ajouter un BOT à un groupe comme n'importe quel autre membre: allez dans les propriétés de votre groupe, cliquez sur ajouter un membre, puis utilisez l'icône de recherche pour rechercher le nom du BOT. MAIS, gardez à l'esprit que depuis les changements récents sur les groupes Telegrams, vous devez être un groupe "admin" pour ajouter un nouveau membre, qu'il s'agisse de BOT ou non.
Maverick_Java
37
Pour groupe nouvellement créé getUpdatesretourne demande {"ok":true,"result":[]}même si je tente d'envoyer des messages tas au groupe et bot via mention @et quelques « commandes » au hasard /my_id, /start, /help. Une idée de ce qu'on peut faire? - MISE À JOUR: OK, la suppression du bot du groupe et l'ajout du bot ont résolu ce problème (il a également imprimé l'identifiant de chat dans le groupe) --- il semble que le bot ne puisse pas être ajouté lors de la création du groupe.
rutsky
8
cela renvoie: {"ok": true, "result": []}
Tom
3
Bonjour Tom. Avez-vous déjà essayé la solution rutsky: "la suppression du bot du groupe et l'ajout du bot ont résolu ce problème (il a également imprimé l'identifiant de chat dans le groupe) --- il semble que le bot ne puisse pas être ajouté lors de la création du groupe."? J'ai rencontré le même problème à plusieurs reprises, et supprimer le bot du groupe et l'ajouter à nouveau résolvait toujours le problème. Faites-moi savoir si cela ne vous aidera pas.
Maverick_Java
136

Voici la séquence qui a fonctionné pour moi après avoir lutté pendant plusieurs heures:

Supposons que le nom du bot est my_bot .

1- Ajoutez le bot au groupe.
Allez dans le groupe, cliquez sur le nom du groupe, cliquez sur Ajouter des membres, dans la boîte de recherche recherchez votre bot comme ceci: @my_bot, sélectionnez votre bot et cliquez sur ajouter.

2- Envoyez un message factice au bot.
Vous pouvez utiliser cet exemple: /my_id @my_bot
(J'ai essayé quelques messages, tous les messages ne fonctionnent pas. L'exemple ci-dessus fonctionne correctement. Peut-être que le message devrait commencer par /)

3- Allez à l'url suivante: https://api.telegram.org/botXXX:YYYY/getUpdates
remplacez XXX: YYYY par votre token bot

4- Recherchez "chat": {"id": - zzzzzzzzzz,
-zzzzzzzzzz est votre identifiant de chat (avec le signe négatif).

5- Test: Vous pouvez tester l'envoi d'un message au groupe avec une boucle:

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

Si vous manquez l'étape 2, il n'y aura pas de mise à jour pour le groupe que vous recherchez. En outre, s'il existe plusieurs groupes, vous pouvez rechercher le nom du groupe dans la réponse ("title": " group_name ").

J'espère que cela t'aides.

Apadana
la source
2
Excellente rupture sur la façon de configurer un BOT.
peur_matrix
J'ai envoyé un message au bot mais cela n'a pas fonctionné instantanément, attendre quelques secondes (ou probablement quelques minutes) et essayer de nouveau curl a fonctionné.
LiveWireBT
4
Je n'arrive pas à faire fonctionner mon bot dans le groupe, j'obtiens {"ok": true, "result": []} dans le navigateur. J'espère que quelqu'un pourra m'aider
TheMrkt
1
Cela a fonctionné pour moi. Une chose, si vous avez configuré des webhooks, vous devez le désactiver. Merci!
Erich García
3
@TheMrkt Il semble, comme dit apadana, que sendind un message commençant par /like /test somethingrend getUpdates heureux.
e2-e4
100

À partir de mars 2020, il suffit de:

  • Invitez @RawDataBot dans votre groupe.

Lors de la connexion, il affichera un fichier JSON où votre identifiant de chat sera situé à message.chat.id .

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

Assurez-vous de renvoyer @RawDataBot de votre groupe par la suite.

eivamu
la source
3
Où @RawDataBot devrait-il afficher cela? J'ai ajouté le bot à mon groupe, mais rien ne s'est passé. Mise à jour: vous devez avoir un nom d'utilisateur défini dans Telegram, sinon rien ne se passe.
Frank Meulenaar
1
De loin le moyen le plus simple d'y parvenir. Merci!
suchanoob
1
@Cherona: Je viens de le revérifier. Mais il semble que le client Web a changé de telle sorte que l'invitation du bot est un peu plus difficile qu'auparavant. Voici comment procéder: Recherchez RawDataBot dans le champ de recherche. Cliquez sur le contact pour démarrer une session de chat. Cliquez sur le titre du chat pour ouvrir "Coordonnées". Cliquez sur "Ajouter au groupe" et choisissez le groupe. Il affichera immédiatement les informations comme auparavant. J'espère que ça marche pour toi.
eivamu
42

Après mi-2018:
1 :) Invitez @getidsbo ou @RawDataBotdans votre groupe et obtenez votre identifiant de groupe dans le champ d'identifiant de chat envoyé.

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 :) utilisez un Messenger non officiel comme Plus Messenger et voyez votre identifiant de groupe dans les informations du groupe / canal.

Avant mi-2018: (ne pas utiliser)
1: Goto ( https://web.telegram.org )
2: Accédez à votre Gorup et trouvez votre lien de Gorup ( https://web.telegram.org/#/im ? p = g154513121 )
3: Copiez ce nombre après g et mettez un (-) avant cela -154513121
4: Envoyez votre message à Gorup bot.sendMessage(-154513121, "Hi")
J'ai testé maintenant et fonctionne comme un charme

Sedric Heidarizarei
la source
1
Très simple. Merci! Testé dans la notification d'alerte Grafana. Jusqu'ici tout va bien.
Adrian Nicolaiev
@Sedric Heidarizarei et si ce n'est pas un nombre comme celui-ci ( web.telegram.org/#/im?p=@welcomeworld )
Marx Babu
2
'@welcomeworld' est le nom d'utilisateur de votre chaîne, vous pouvez transférer un message à '@getidsbot' et obtenir votre identifiant
Sedric Heidarizarei
fait de même mais rencontré avec l'erreur OverflowError: Python int trop grand pour être converti en SQLite INTEGER ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')
vinod
J'ai mis à jour ma réponse, cette méthode ne fonctionne plus, utilisez temporairement la After mid-2018méthode.
Sedric Heidarizarei
9

Vous pouvez obtenir l'identifiant de chat de cette manière.

En chat privé avec votre bot, envoyez un message aléatoire. Vous rechercherez ce message plus tard.

Obtenez votre jeton API auprès de bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Ensuite, sur votre navigateur, faites une demande avec cette URL:

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

La requête renvoie une réponse json, dans le texte json, recherchez votre random messageet obtenez l'identifiant de chat dans cet objet.

Yigit Yuksel
la source
8

En utilisant python et téléthon, il est très facile d'obtenir un identifiant de chat. Cette solution est la meilleure pour ceux qui travaillent avec l'API de télégramme.

Si vous n'avez pas de téléthon, lancez ceci:

pip install telethon

Si vous n'avez pas d'application enregistrée avec télégramme, enregistrez-en une: entrez la description de l'image ici Le lien est le suivant: https://my.telegram.org/

Exécutez ensuite le code suivant:

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

Vous souhaiterez peut-être envoyer un message à votre groupe pour que le groupe apparaisse en haut de la liste.

Apadana
la source
7

Vous pouvez récupérer l'ID de groupe de la même manière. Il apparaît dans le corps du message comme message.chat.idet c'est généralement un nombre négatif, où les discussions normales sont positives.

Les ID de groupe et les ID de conversation ne peuvent être récupérés qu'à partir d'un message reçu, il n'y a aucun appel disponible pour récupérer les groupes actifs, etc. Vous devez vous souvenir de l'ID de groupe lorsque vous recevez le message et le stocker dans le cache ou quelque chose de similaire.

Chris Brand
la source
Quelqu'un d'autre peut-il confirmer que c'est vrai? Je suis sur le point de dire oui après avoir lu les documents. Je voudrais pouvoir obtenir le chat_id à partir du lien du groupe afin de répondre à mes exigences.
PrimeTimeTran
1

créer un bot, ou s'il est déjà créé, définissez comme suit:

a accès aux messages

apparemment, quel que soit l'ancien / le nouveau du groupe Telegram:

  1. ajouter un bot au groupe
  2. supprimer le bot du groupe
  3. ajouter à nouveau le bot au groupe

  4. créer un fichier de script et exécuter un getUpdatesexemple de méthode:

    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. La fonction doit enregistrer sur la console les éléments suivants:
[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. Le groupe de télégrammes chat_id peut être extrait du message ci-dessus "chat":{"id":-1001202656383,"title"

J'espère que cela aide (HTH)

Trajano Roberto
la source
0

bot reçoit le message suivant provenant d'un groupe Telegram ayant un bot coexistant:

extraire les données selon les besoins

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

/* Contenu

{
    "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
la source
0

À mon humble avis, la meilleure façon de le faire est d'utiliser TeleThon, mais étant donné que la réponse d' apadana est dépassée au-delà de toute réparation, j'écrirai la solution de travail ici:

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

cet extrait de code vous donnera les premières 10discussions dans votre télégramme.

Hypothèses:

  • vous avez telethonet nest_asyncioinstallé
  • vous avez api_idet api_hashde my.telegram.org
Foad
la source
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
la source
lorsqu'une publication provient d'un groupe, plusieurs informations sont disponibles via un objet JSON vous pouvez extraire des informations pertinentes pour votre utilisation l'exemple ci-dessus illustre comment obtenir le contenu de chat_id est un objet
Trajano Roberto
0

Si vous implémentez votre bot, conservez un nom de groupe -> table d'id, et demandez-le avec une commande. Ensuite, vous pouvez également envoyer par nom.

Angelo Dureghello
la source