Solicitar número de contacto o ubicación de una persona mediante un bot de telegram en nodejs?

Solicitar número de contacto o ubicación de una persona mediante un bot de telegram en nodejs?

Hoy en un nuevo tutorial de nuestra guía de bots de Telegram en NodeJS os vamos a contar como solicitar a un usuario mediante un comando la localización y su número de Teléfono usando el keyboard (bótones que aparecen en el teclado)

Configurar las variables del Bot

Siempre hay que tener al pricipio del archivo la información básica de nuestro bot. Donde se encuentra el bot Token de nuestro bot. El código es el siguiente:

 const TelegramBot = require('node-telegram-bot-api');
 
 // API Token Telegram
 const token = 'escribe-aqui-tu-token';
 
 // Creamos un bot que usa 'polling' para obtener actualizaciones
 const bot = new TelegramBot(token, {polling: true});

El siguiente código funciona cada vez que un usuario usa el comando "/getLocation" y el bot responde abriendo un keyboard. Ese keyboard hace 2 request/peticiones distintas, la primera la localización y la segunda el contacto.

bot.onText(/^\/getLocation/, (msg) => {
  const opts = {
    reply_markup: JSON.stringify({
      keyboard: [
        [{text: 'Location', request_location: true}],
        [{text: 'Contact', request_contact: true}],
      ],
      resize_keyboard: true,
      one_time_keyboard: true,
    }),
  };
  bot.sendMessage(msg.chat.id, 'Contact and Location request', opts);
});

// Obtenemos la ubicación que nos manda un usuario
bot.on('location', (msg) => {
  console.log(msg.location.latitude);
  console.log(msg.location.longitude);
});

// Obtenemos la información de contacto que nos manda un usuario
bot.on('contact', (msg) => {
    console.log("Nombre: " + msg.contact.first_name + "\nUserID:"  +  msg.contact.user_id + "\nNúmero Telf: " + msg.contact.phone_number);
});

Si un usuario decide mandarte su ubicación verás en la consola la latitud y la longitud del usuario o en el otro caso su información de contacto. Después en el bot.on de location y contact podéis hacer que realice la función que queráis, ya sea guardar esos datos en una base de datos o en cualquier otro tipo de archivo ya que esto último no depende de la librería de bots de Telegram. Asegurados que buscar una librería complementaria ya sea una para mysql/mongodb/... que os ayude con ese propósito.

Recordar que podeis obtener el id del usario que mande esa ubicación/contacto del atributo msg.from.id.