Cómo usar el API de Telegram para enviar mensajes

Enviar mensajes con el API de Telegram es sencillo. Solo necesitamos crear un Bot, un Canal y enviar una solicitud POST a https://api.telegram.org/bot\(token)/sendMessage. Además de ser fácil, esta funcionalidad puede ser muy beneficiosa. A continuación, te doy tres ejemplos de cómo utilizar esta función:

  • Recibir feedback de usuarios: Podemos crear una vista para que los usuarios envíen sus comentarios. Al enviar el mensaje, este llegará directamente a nuestro canal de Telegram.
Vista para pedir feedback
  • Notificaciones de compras: Enviar un mensaje cada vez que un usuario realiza una compra en nuestra app, permitiéndonos saber de inmediato cuando la transacción se ha completado.

  • Alertas de fallos: Notificar cuando ocurre un fallo en nuestra aplicación.

Empecemos con la configuración.

Requisitos para configurar el API de Telegram

  • Crear un bot.
  • Crear un canal.
  • Obtención del ChannelID.
  • Implementar código para realizar la llamada POST en Xcode.

Cómo crear un Bot de Telegram

Para crear un bot, utilizaremos el bot de Telegram llamado BotFather. Puedes acceder a través de este enlace o buscar "BotFather" en la web o la app de Telegram.

Buscando el Bot de Telegram BotFather

Una vez abierto el chat, escribe "/newbot" y envía el mensaje.

Creando el Bot desde BotFather

Nos pedirá un nombre para el bot. Nosotros elegimos "AsyncLearnBot". Luego, debemos proporcionar un nombre de usuario que termine en "bot". Elegimos "asynclearn_bot".

Bot de Telegram creado

Copia el Token proporcionado por BotFather, ya que lo necesitaremos más adelante.

Una vez creado el bot, abre el canal y una vez dentro de el, presiona el botón Start.

Cómo Crear un Canal de Telegram

A continuación, crearemos un canal de Telegram, dandole al botón de "New Channel" tal como vemos en la siguiente foto.

Creando un canal de Telegram Creando un canal

Después de crear el canal, debemos añadir nuestro bot como administrador. Para ello, edita el canal y añade el bot. Esto se hace desde la app de Telegram, ya que actualmente hay un bug en la versión web. No obstante, puedes intentarlo desde la web si lo prefieres (por si el bug ya fue solucionado).

Añadiendo nuestro bot al canal

Vemos como nuetro Bot fue añadido como administrador en el canal creado.

Añadiendo nuestro bot al canal

Una vez añadido el bot como administrador, pasamos a la obtención del "Channel ID", que usaremos luego en la configuración de la llamada.

Obteniendo el ChannelID

Para usar la API de Telegram, necesitamos dos valores: el channelID y el token.

  • Token: Lo obtenemos al crear el bot con BotFather.

  • Channel ID: Existen dos formas de obtenerlo:

  1. Accediendo a la URL: "https://api.telegram.org/bot\token\/getUpdates", reemplazando \token\ con el token obtenido. Esto devolverá un JSON con el formato:
{
"ok": true,
"result": [
{
"update_id": string,
"channel_post": {
"message_id": 2,
"sender_chat": {
"id": string,
"title": "AsyncLearn",
"type": "channel"
},
"chat": {
"id": string,
"title": "AsyncLearn",
"type": "channel"
},
"date": 1722771498,
"text": "test"
}
}
]
}

Usaremos el "id" dentro de la estructura "chat".

Si el arreglo "result" está vacío, envía un mensaje desde tu canal y actualiza la página para obtener los "results".

  1. Desde la web: Abre tu canal y en la barra de navegación verás el channelID. Es el número que aparece después de "#-". Debes añadir "-100" al valor encontrado.
Obteniendo el chatID desde el navegador

Uso de la API de Telegram para enviar mensajes

Una vez ya tenemos el token y el "Channel ID", llega la hora de configurar la llamada. Para ello creamos una clase llamada TelegramManager:

En este articulo no nos vamos a enfocar en seguridad ni en crear una capa de red, harémos todas las llamadas dentro del TelegramManager para la realización del ejemplo.

import Foundation
public class TelegramManager {
// 1
private let token = "token"
// 2
private let channelID = "-100 + channelID"
public func sendMessage(message: String) async throws {
// 3
guard let url = URL(string: "https://api.telegram.org/bot\(token)/sendMessage") else { return }
// 4
let payload: [String: Any] = [
"chat_id": channelID,
"text": message,
"parse_mode": "MarkdownV2"
]
// 5
guard let httpBody = try? JSONSerialization.data(withJSONObject: payload, options: []) else {
print("Error serializing JSON")
return
}
// 6
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.httpBody = httpBody
let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 120.0
do {
// 7
let (data, response) = try await URLSession(configuration: sessionConfig).data(for: request, delegate: nil)
print(data)
print(response)
} catch {
print(error)
}
}
}

Explicación paso a paso:

  1. Definimos la constante con nuestro token.
  2. Definimos la constante con el channelID, agregando "-100" al channelID de nuestro canal.
  3. Creamos la URL del API usando el token.
  4. Definimos el payload, que es el cuerpo del mensaje que enviamos al API de Telegram. Incluye:
  • chat_id: El channelID.
  • text: El mensaje que queremos enviar.
  • parse_mode: El formato del mensaje. Podemos usar "MarkdownV2" para sintaxis de Markdown o "HTML" para formato HTML. Por ejemplo, para un título en negrita, podemos usar:

let sendMessage = "*Feedback request*\n\n" + message.

Para más información sobre formatos, visita la documentación de Telegram.

  1. Serializamos el httpBody.
  2. Creamos el URLRequest, que será un POST con el httpBody definido.
  3. Realizamos la llamada. A partir de aquí, podemos manejar los datos recibidos según nuestras necesidades, como mostrar una alerta de confirmación al usuario.

Veamos cómo usar esta llamada en nuestra vista de SwiftUI:

import SwiftUI
struct ContentView: View {
@State private var message: String = ""
func sendMessage() async {
// 1
try? await TelegramManager().sendMessage(message: message)
}
var body: some View {
VStack {
TextField(text: $message, axis: .vertical) {
Text("Message")
}
Button("Send") {
Task {
// 2
await sendMessage()
}
}
}
.padding()
}
}
  1. Utilizamos TelegramManager para enviar el mensaje ingresado por el usuario.
  2. Enviamos el mensaje al presionar el botón. Al hacerlo, deberías recibir una notificación en el canal de Telegram.

Y eso es todo. Esta vista es sencilla pero efectiva para obtener feedback de los usuarios y mejorar nuestra app. ¡Ahora es tu turno de aprovechar al máximo el API de Telegram!

Comparte este artículo

Subscríbete a nuestro Newsletter

Mantente al día en el mundo de las aplicaciones móviles con nuestro blog especializado.

Artículos semanales

Todas las semanas artículos nuevos sobre el mundo de las aplicaciones móviles.

No spam

No te enviaremos spam, solo contenido de calidad. Puedes darte de baja cuando quieras.

Contenido de calidad

Nada de contenido generado de manera automática usando ChatGPT.

Recomendaciones

Tips indispensables sobre mejores prácticas y metodologías.

© 2024 AsyncLearn