Telegram Bot - como obter um ID de chat em grupo?

170

Estou usando o telegram_bot e tentando obter o ID do groupChat para enviar notificações para o bate-papo em grupo, mas não sei quais métodos eu tenho que usar para isso.

Para obter o ID do bate-papo, uso o message.chat.id quando o bot participou do bate-papo, mas o qual tenho que usar para obter o ID do bate-papo em grupo não consegue encontrar /

Roman Podpryatov
fonte
1
Eu gerencio um bot para isso. Espero que isso vai ajudar, verifique este < stackoverflow.com/a/37396871/6223024 >
Kardian fredy

Respostas:

227

Para obter o ID do bate-papo em grupo, faça o seguinte:

  1. Adicione o Telegram BOT ao grupo.

  2. Obtenha a lista de atualizações para o seu BOT:

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

    Ex:

    https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
    
  3. Procure o objeto "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 "}}}

Esta é uma amostra da resposta quando você adiciona seu BOT a um grupo.

  1. Use o "id" do objeto "chat" para enviar suas mensagens.
Maverick_Java
fonte
1
você pode dar um exemplo?
Roman Podpryatov 6/10/2015
2
@WannaBeCoder, você pode adicionar um BOT a um grupo como qualquer outro membro: Vá para as propriedades do seu grupo, clique em adicionar membro e use o ícone de pesquisa para procurar o nome do BOT. MAS, lembre-se de que, desde as recentes alterações nos grupos de Telegramas, você deve ser um "administrador" do grupo para adicionar um novo membro, sejam eles BOTs ou não.
Maverick_Java
37
Para recém-criado grupo getUpdatessolicitação retorna {"ok":true,"result":[]}mesmo se eu tentar enviar monte de mensagens para o bot grupo e menção via @e alguns "comandos" aleatórios /my_id, /start, /help. Alguma idéia do que fazer? - UPDATE: OK, remover o bot do grupo e adicionar o bot de volta corrigiu esse problema (também imprimiu o ID de bate-papo no grupo) --- parece que o bot não pode ser adicionado durante a criação do grupo.
precisa saber é o seguinte
8
isso retorna: {"ok": true, "result": []}
Tom
3
Olá Tom. Você já tentou a solução rutsky: "remover o bot do grupo e adicionar o bot novamente corrigiu esse problema (também imprimiu o ID do bate-papo no grupo) --- parece que o bot não pode ser adicionado durante a criação do grupo."? Já enfrentei o mesmo problema algumas vezes, e remover o bot do grupo e adicioná-lo novamente sempre resolvia o problema. Deixe-me saber se isso não vai ajudá-lo.
Maverick_Java
136

Aqui está a sequência que funcionou para mim depois de lutar por várias horas:

Suponha que o nome do bot seja my_bot .

1- Adicione o bot ao grupo.
Vá para o grupo, clique no nome do grupo, clique em Adicionar membros, na caixa de pesquisa, procure seu bot como este: @my_bot, selecione seu bot e clique em adicionar.

2- Envie uma mensagem fictícia para o bot.
Você pode usar este exemplo: /my_id @my_bot
(Tentei algumas mensagens, nem todas as mensagens funcionam. O exemplo acima funciona bem. Talvez a mensagem deva começar com /)

3- Vá para o seguinte URL: https://api.telegram.org/botXXX:YYYY/getUpdates
substitua XXX: AAAA pelo seu token de bot

4- Procure por "chat": {"id": - zzzzzzzzzz,
-zzzzzzzzzz é o seu ID de bate-papo (com o sinal negativo).

5- Teste: você pode testar o envio de uma mensagem para o grupo com um curl:

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

Se você perder a etapa 2, não haverá atualização para o grupo que você está procurando. Além disso, se houver vários grupos, você poderá procurar o nome do grupo na resposta ("title": " group_name ").

Espero que isto ajude.

apadana
fonte
2
Excelente separação de como configurar um BOT.
Fear_matrix 28/04
Enviei uma mensagem para o bot, mas ele não funcionou instantaneamente, aguardando alguns segundos (ou provavelmente minutos) e tentar enrolar novamente funcionou.
LiveWireBT
4
Não consigo fazer meu bot trabalhar no grupo, recebo {"ok": true, "result": []} no navegador. Espero que alguém possa me ajudar
TheMrkt
1
Isso funcionou para mim. Uma coisa, se você tiver webhooks configurados, precisará desativá-lo. Obrigado!
Erich García
3
@TheMrkt Parece, como disse apadana, que enviar uma mensagem começando com /like /test somethingdeixa getUpdates feliz.
e2-e4
100

Em março de 2020, basta:

  • Convide @RawDataBot para o seu grupo.

Ao ingressar, ele produzirá um arquivo JSON onde seu ID de bate-papo estará localizado em message.chat.id .

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

Certifique-se de chutar @RawDataBot do seu grupo depois.

eivamu
fonte
3
Onde @RawDataBot deve produzir isso? Eu adicionei o bot ao meu grupo, mas nada aconteceu. Atualização: você precisa ter um nome de usuário definido no Telegram, caso contrário, nada acontece.
Frank Meulenaar 19/01/19
1
De longe, a maneira mais fácil de conseguir isso. Obrigado!
28919 suchanoob
1
@Cherona: Acabei de verificar novamente. Mas parece que o cliente da Web mudou de tal forma que convidar o bot é um pouco mais difícil do que costumava ser. Aqui está como você pode fazer isso: Procure RawDataBot no campo de pesquisa. Clique no contato para iniciar uma sessão de bate-papo. Clique no título do bate-papo para abrir "Informações de contato". Clique em "Adicionar ao grupo" e escolha o grupo. Ele emitirá imediatamente as informações como antes. Espero que funcione para você.
eivamu 2/03
42

Após meados de 2018:
1 :) Convide @getidsbo ou @RawDataBotpara o seu grupo e obtenha seu ID de grupo no campo de ID de bate-papo enviado.

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 :) use um Messenger não officiclo como o Plus Messenger e veja seu ID de grupo em informações de grupo / canal.

Antes de meados de 2018: (não use)
1: Goto ( https://web.telegram.org )
2: Goto seu Gorup e encontre seu link do Gorup ( https://web.telegram.org/#/im ? p = g154513121 )
3: Copie esse número depois de ge coloque a (-) Antes disso -154513121
4: Envie sua mensagem para Gorup bot.sendMessage(-154513121, "Hi")
Testei agora e trabalho como um encanto

Sedric Heidarizarei
fonte
1
Muito simples. Obrigado! Testado na notificação de alerta Grafana. Por enquanto, tudo bem.
Adrian Nicolaiev
@Sedric Heidarizarei e se este é um não um número como assim ( web.telegram.org/#/im?p=@welcomeworld )
Marx Babu
2
'@welcomeworld' é o nome de usuário do seu canal, você pode encaminhar uma mensagem para '@getidsbot' e obter o seu ID
Sedric Heidarizarei
fez o mesmo, mas encontrado com OverflowError erro: Python int muito grande para converter para SQLite INTEIRO ... client.send_message (-1240933195_1386556410045688xx08.'Hi ')
vinod
Atualizei minha resposta. Esse método não funciona mais. Use temporariamente o After mid-2018método.
Sedric Heidarizarei
9

Você pode obter o ID do bate-papo dessa maneira.

No bate-papo particular com seu bot, envie uma mensagem aleatória. Você pesquisará esta mensagem mais tarde.

Obtenha seu token de API em bot_father: XXXXXXXXX:YYYYYYY-YYYYYYYYYYYYYYYYY_YY

Em seguida, no seu navegador, faça uma solicitação com esse URL:

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

A solicitação retorna uma resposta json. No texto json, pesquise seu random messagee obtenha o ID do bate-papo nesse objeto.

Yigit Yuksel
fonte
8

Usando python e telethon é muito fácil obter o ID do bate-papo. Esta solução é melhor para quem trabalha com a API de telegrama.

Se você não possui teleton, execute o seguinte:

pip install telethon

Se você não possui um aplicativo registrado com telegrama, registre um: insira a descrição da imagem aqui O link é este: https://my.telegram.org/

Em seguida, execute o seguinte código:

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

Você pode enviar uma mensagem ao seu grupo para que ele apareça no topo da lista.

apadana
fonte
7

Você pode recuperar o ID do grupo da mesma maneira. Ele aparece no corpo da mensagem como message.chat.ide geralmente é um número negativo, onde os bate-papos normais são positivos.

Os IDs de grupo e de bate-papo só podem ser recuperados de uma mensagem recebida, não há chamadas disponíveis para recuperar grupos ativos etc. É necessário lembrar o ID do grupo ao receber a mensagem e armazená-la em cache ou algo semelhante.

Chris Brand
fonte
Alguém mais pode confirmar que isso é verdade? Estou perto de dizer sim depois de ler os documentos. Gostaria de obter o chat_id no link do grupo para atender aos meus requisitos.
PrimeTimeTran 27/02
1

crie um bot ou, se já tiver criado, configure da seguinte maneira:

tem acesso a mensagens

aparentemente, independentemente da idade / novidade do grupo Telegram:

  1. adicione um bot ao grupo
  2. remover bot do grupo
  3. adicione bot novamente ao grupo

  4. crie um arquivo de script e execute o getUpdatesexemplo de método:

    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. A função registrará no console o seguinte:
[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. O grupo de telegrama chat_id pode ser extraído da mensagem acima "chat":{"id":-1001202656383,"title"

Espero que ajude (HTH)

Trajano Roberto
fonte
0

O bot recebe a seguinte mensagem originada em um grupo de telegrama com um bot coexistindo:

extrair dados conforme necessário

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

/ * conteúdo

{
    "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
fonte
0

IMHO, a melhor maneira de fazer isso é usar o TeleThon, mas, como a resposta da apadana está desatualizada além do reparo, vou escrever a solução de trabalho aqui:

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

esse trecho fornecerá os primeiros 10bate-papos no seu telegrama.

Premissas:

  • você tem telethone nest_asyncioinstalou
  • você tem api_ide api_hashde my.telegram.org
Foad
fonte
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
fonte
Quando uma postagem é originada de um grupo, várias informações estão disponíveis por meio de um objeto JSON. Você pode extrair informações relevantes para seu uso. O exemplo acima ilustra como obter um conteúdo de chat_id como um objeto.
Trajano Roberto
0

Se você estiver implementando seu bot, mantenha armazenado um nome de grupo -> id table e peça-o com um comando. Então você também pode enviar por nome.

Angelo Dureghello
fonte