Cómo usar el API de Telegram para enviar mensajes
Marcelo Laprea
04 septiembre, 20246min de lectura
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.
-
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.
Una vez abierto el chat, escribe "/newbot" y envía el mensaje.
Nos pedirá un nombre para el bot. Nosotros elegimos "AsyncLearnBot". Luego, debemos proporcionar un nombre de usuario que termine en "bot". Elegimos "asynclearn_bot".
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.
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).
Vemos como nuetro Bot fue añadido como administrador en el canal creado.
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:
- 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".
- 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.
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 Foundationpublic class TelegramManager {// 1private let token = "token"// 2private let channelID = "-100 + channelID"public func sendMessage(message: String) async throws {// 3guard let url = URL(string: "https://api.telegram.org/bot\(token)/sendMessage") else { return }// 4let payload: [String: Any] = ["chat_id": channelID,"text": message,"parse_mode": "MarkdownV2"]// 5guard let httpBody = try? JSONSerialization.data(withJSONObject: payload, options: []) else {print("Error serializing JSON")return}// 6var request = URLRequest(url: url)request.httpMethod = "POST"request.addValue("application/json", forHTTPHeaderField: "Content-Type")request.addValue("application/json", forHTTPHeaderField: "Accept")request.httpBody = httpBodylet sessionConfig = URLSessionConfiguration.defaultsessionConfig.timeoutIntervalForRequest = 120.0do {// 7let (data, response) = try await URLSession(configuration: sessionConfig).data(for: request, delegate: nil)print(data)print(response)} catch {print(error)}}}
Explicación paso a paso:
- Definimos la constante con nuestro token.
- Definimos la constante con el
channelID
, agregando "-100" alchannelID
de nuestro canal. - Creamos la URL del API usando el token.
- 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.
- Serializamos el
httpBody
. - Creamos el
URLRequest
, que será un POST con elhttpBody
definido. - 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 SwiftUIstruct ContentView: View {@State private var message: String = ""func sendMessage() async {// 1try? await TelegramManager().sendMessage(message: message)}var body: some View {VStack {TextField(text: $message, axis: .vertical) {Text("Message")}Button("Send") {Task {// 2await sendMessage()}}}.padding()}}
- Utilizamos
TelegramManager
para enviar el mensaje ingresado por el usuario. - 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!