¿Cómo obtener información de los chats de voz con nuestro bot de Telegram?

Actualmente la API de Bots no dispone de funciones para administrar los chats de voz. Lo único que nos permite saber es cuando un chat de voz se inicia, termina o cuando un usuario invita a otros miembros del grupo a unirse al chat de voz en cuestión.

En este post os explicaremos como capturar esta información que nos envía la API de Bots poniendo algunos ejemplos en código y un ejemplo del texto de respuesta que recibimos del bot.

Esperemos que en próximas actualizaciones se incluyan métodos que puedan ser de mayor utilidad para gestionar más en profundidad estos chats.

Evento: Inicialización del chat de voz

Para capturar el evento que se produce cuando se inicia un chat de voz tenemos que capturar la actualización ("update") voice_chat_started que nos devuelve información sobre la persona que inicio el chat de voz, en que chat, la fecha y hora a la que se inicio (lo manda como un TimeStamp) y el id del mensaje con ese evento que se puede leer en el chat.

bot.on('voice_chat_started', (resp) => {
  console.log("Chat iniciado");
  console.log(resp);
});

En el ejemplo superior lo que haces es mostrar los datos que recibimos por consola, la respuesta que recibimos del servidor de Telegram es la siguiente:

{
  message_id: 40432,
  from: {
    id: 26028XXXX,
    is_bot: false,
    first_name: 'Daniel',
    last_name: '#MiTeam🇪🇸'  ,
    username: 'danielperez9430',
    language_code: 'es'
  },
  chat: {
    id: -1001385882349,
    title: '[Chat] Tecnonucleous',
    username: 'Tecnonucleous_chat',
    type: 'supergroup'
  },
  date: 1617210852,
  voice_chat_started: {}
}

Evento: Finalización del chat de voz

Al igual que cuando iniciamos un chat de voz recibimos la misma información cuando el creador o un administrador con los permisos de gestionar los chats de voz se le da por finalizarlo.

En este caso la actualización la recogemos con el evento voice_chat_ended, este evento recibe además el parámetro "duration" que indica el tiempo en segundos que estuvo abierto el chat de voz.

bot.on('voice_chat_ended', (resp) => {
  console.log("Chat Finalizado");
  console.log(resp);
});

📝 Nota: No confundir "date" la fecha en formato TimeStamp con la "duration" que es el tiempo en segundos.

Esta es la información que recibimos al terminarse un chat de voz:

{
  message_id: 40431,
  from: {
    id: 26028XXXX,
    is_bot: false,
    first_name: 'Daniel',
    last_name: '#MiTeam🇪🇸'  ,      
    username: 'danielperez9430',   
    language_code: 'es'
  },
  chat: {
    id: -1001385882349,
    title: '[Chat] Tecnonucleous', 
    username: 'Tecnonucleous_chat',
    type: 'supergroup'
  },
  date: 1617210772,
  voice_chat_ended: { duration: 8462275 }
}

Evento: Nuevo particante en el chat de voz

Cuando un usuario invita a otros miembros del grupo a unirse al chat de voz recibimos la actualización voice_chat_participants_invited, en ella recibimos los datos del usuario que invito a los miembros, la información del chat donde eso sucedió, la fecha y hora en formato TimeStamp en el parámetro "date" y un array users donde esta la lista de todas las personas que invito.

bot.on('voice_chat_participants_invited', (resp) => {
  console.log("Participante/s invitado/s");
  console.log(resp);
  console.log("Participantes");
  console.log(resp.voice_chat_participants_invited.users)
});

Ejemplo de respuesta que obtenemos en el console.log(resp):

{
  message_id: 2278799,
  from: {
    id: 26028XXXX,
    is_bot: false,
    first_name: 'Daniel',
    last_name: '#MiTeam🇪🇸'  ,
    username: 'danielperez9430',
    language_code: 'es'
  },
  chat: {
    id: -1001109909364,
    title: '👺 Werewolf Veves 👺',
    username: 'Werewolf_Veves',
    type: 'supergroup'
  },
  date: 1617390491,
  voice_chat_participants_invited: { users: [ [Object], [Object], [Object] ] }
}

Conclusiones

Os preguntareís para que podemos usar estos 3 métodos, así de primeras no parecen muy relevantes pero os sirven para hacer estadísticas. Entre estas estadísticas podemos saber las fechas de cuando se iniciaron estos chats de voz, su duración, en que fecha terminaron y el número de personas que fueron invitadas a unirse.

Claramente toda esta información deberiamos de guardarla en una base de datos, otra función podría ser banear a los usuarios pesados que invitan constantemente a gente a los chats de voz.