Canal: Telegram vs WhatsApp — decisión de arquitectura (2026-09-26)
Después de cerrar Cloud API directo ([CREDENCIAL]- antiextraccion.md) y el análisis de biométricos/BSP
([CREDENCIAL].md).
TL;DR
Telegram elimina el 100% de los dos bloqueadores que quedaban: verificación de negocio y costo de números. Cuesta $0, no pide ni un documento, y el prefijo del 1-oct no le aplica. Pierde en una sola cosa: el paciente ya está en WhatsApp.
Por eso la conclusión no es “elige Telegram”. Es: el canal es un adaptador, no el producto, y Telegram va primero porque es el único desbloqueado hoy.
1. Lo que Telegram borra
| Bloqueador (identificado antes) | Estado con Telegram |
|---|---|
| Verificación de negocio con documentos | No existe. Ni alta, ni verificación, ni biométricos |
| Número nuevo por cliente ($150-400 MXN/mes) | No hace falta con Business Bot (ver §2) |
| Registro de número por API + SMS | No aplica |
| Cap de 2 números sin verificar | No aplica |
| Templates con aprobación de Meta | No hay templates. El bot escribe a cualquier usuario que lo haya iniciado, sin ventana de 24h ni cooldown |
| Cliff de precio del 1-oct-2026 | No hay cliff. 0.1 Stars solo para broadcast pagado (requiere 100,000 Stars + 100,000 MAU — irrelevante) |
| Costo por mensaje | $0 siempre |
2. Connected Business Bots: la pieza que cambia el modelo
Telegram permite que un usuario convierta su cuenta en cuenta de negocio y conecte un bot de negocio que procese y responda en su nombre.
- Un usuario puede conectar un solo business bot (
BOT_BUSINESS_MISSINGsi no tiene el flagbot_business). - El bot recibe
updateBotNewBusinessMessage/Edit/Delete— los DMs privado que llegan al dueño del negocio. - Puede responder como el dueño del negocio: los mensajes “NO se marcan con
el nombre del bot desde el punto de vista del cliente” (
via_business_connection). - No requiere Telegram Premium — “connected bots are also available to non-Premium users”. Premium solo es para el resto de las features business.
- El cliente es quien conecta su cuenta y su bot desde Ajustes → Telegram Business → Chatbots.
Por qué esto es lo importante: la clínica conserva su identidad. El paciente ve un mensaje de la clínica, no de un bot. Y tú no operas ningún número.
Multi-tenant: un solo bot, N clínicas conectadas, connection_id → tenant.
Exactamente la misma forma que phone_number_id → tenant en WhatsApp. La tabla de
tenants no cambia de esquema.
3. Soberanía: Telegram le gana a Meta
Meta no tiene equivalente. Telegram publica el código fuente del Bot API
Server y tú lo corres: descargas archivos sin límite de tamaño, subes hasta
2000 MB, webhook por HTTP plano, IP local, cualquier puerto, max_webhook_connections
hasta 100,000. Requiere api_id/api_hash propios y un servidor persistente.
No cambia los rate limits (30 msg/s sigue siendo 30, confirmado en el repo oficial). El premio concreto es la infraestructura, no el throughput.
Límites con hosting de Telegram (core.telegram.org/bots/faq):
- 1 mensaje/segundo por chat privado
- 20 mensajes/minuto por grupo
- ~30 mensajes/segundo en broadcast masivo gratis
- 1,000 msg/s con paid broadcasts a 0.1 Stars/msg (irrelevante a escala piloto)
4. El costo: dos tiers, y no son el mismo producto
Tier A — Bot API simple (HTTPS puro)
- $0. Solo un token de @BotFather.
- Webhook HTTPS estándar → vive en el mismo Cloudflare Worker que WhatsApp.
- 20 minutos de trabajo.
- Contra: es un bot más en la lista del paciente. El mensaje viene firmado como bot, y el paciente tiene que buscarlo e iniciarlo.
Tier B — Connected Business Bot (identidad real de la clínica)
- $0. El paciente ve a la clínica, no a un bot.
- Contra: es MTProto, no HTTPS.
account.updateConnectedBotyinvokeWithBusinessConnectionson MTProto puro. En un Cloudflare Worker eso significa TCP sockets + crypto, no un POST. Los métodos de envío aceptan el parámetrobusiness_connection_iden la Bot API normal, pero el registro de la conexión y el envelope de invocación son MTProto. - Pendiente de verificar: si la Bot API expone los business message updates o si el bot necesita un proceso con TDLib. Si necesita TDLib, no vive en el Worker y aparece un componente persistente (Hetzner/OCI/local).
- No se puede asumir. Esto decide si Telegram cabe en la misma infra que WhatsApp o si son dos.
5. La comparación honesta
| WhatsApp Cloud API | Telegram Business Bot | |
|---|---|---|
| Documentos / biométricos | Verificación de negocio | Ninguno |
| Costo fijo | $17-47 USD/mes (números) | $0 |
| Costo por mensaje | $0 hasta 1,000/número/mes, luego MXN 0.1565 | $0 |
| Identidad del canal | Número nuevo que tú operas | La cuenta que la clínica ya tiene |
| Onboarding | App + token + registro por API + SMS | @BotFather, y la clínica conecta su bot |
| Cap de cuentas | 2 sin verificar | 1 bot por cuenta, N cuentas por bot |
| Templates | Aprobación de Meta | No hay |
| Alcanzabilidad | El paciente ya está ahí | Hay que invocarlo |
| Infraestructura | HTTPS → Worker | MTProto → probable proceso aparte |
| Auto-alojado | No (red de Meta) | Sí, fuente oficial publicada |
| Residencia de datos | No puedes fijarla a MX | Amsterdam + Miami, opacidad de retención |
6. La decisión
Reach es el único eje donde Meta gana, y es el único que decide el proyecto. Un paciente dental mexicano ya tiene WhatsApp. Pedirle que instale Telegram es fricción que mata la conversión, y ninguna otra ventaja lo compensa. Para ese caso de uso, WhatsApp es el canal correcto.
Pero el orden de construcción se invierte:
- Telegram primero. No porque sea mejor, sino porque es el único desbloqueado hoy: Meta te tiene esperando paperwork y onboarding, Telegram te tiene esperando un mensaje a @BotFather. Es el primer canal que puedes shipping antes de tener un solo cliente — que es exactamente lo que pide “ship the smallest real version”.
- El 1-oct es la ventana. Meta empieza a cobrar dentro de 5 días. Telegram no tiene cliff. Empezar por Telegram significa que el RAG está productor antes de que exista el precio.
- WhatsApp después, cuando haya cliente pagando y la verificación de negocio valga la pena (PLBV o ruta de volumen, ver documento anterior).
- El argumento de venta: “no dependemos de Meta, arrancamos hoy y agregamos WhatsApp cuando lo necesites”. Al revés no se puede.
Y la regla de los dos documentos anteriores no cambia: el canal produce
respuestas, nunca devuelve documentos. Telegram con Business Bot es un oráculo
igual de peligroso — connection_id da acceso al DMs de una clínica real.
7. Ventaja dental específica (secundaria)
Telegram Business trae horarios, ubicación, quick replies, greeting y away message; los voice notes y el multimedia (50 MB, antes/después) son mejores que una template de WhatsApp para post-operatorio. Pero esto es bonus al reach: no compensa.
Facts verificados contra
- core.telegram.org/api/bots/connected-business-bots (un business bot por cuenta,
flag
bot_business, sin Premium,updateBotNewBusinessMessage,via_business_connectionno revela el nombre del bot al cliente,invokeWithBusinessConnection) - core.telegram.org/api/business (connected bots disponibles para no-Premium)
- core.telegram.org/bots/faq (1 msg/s por chat, 20/min por grupo, ~30 msg/s gratis, paid broadcasts 1000/s a 0.1 Stars)
- core.telegram.org/bots/api (Local Bot API Server: fuente publicada, archivos sin límite, upload 2000 MB, HTTP plano, IP local, cualquier puerto, max_webhook_connections hasta 100,000)
- github.com/tdlib/telegram-bot-api (los local limits no cambian los bot limits; solo HTTP, requiere api_id/api_hash, requiere proxy TLS)
- telegrambots.github.io/book/4/business.html (
businessConnectionIden métodos de Bot API; CanReply limitado a chats activos en las últimas 24h; el banner con el nombre del bot sí aparece en el chat privado del dueño)
CORRECCIÓN (2026-09-26, tarde) — el §4.4 estaba mal
Consulté core.telegram.org/bots/api directamente. El Bot API va en 10.3
(24-ago-2026) y Update tiene business messages como campos de primera clase:
business_connectionbusiness_messageedited_business_messagedeleted_business_messagesMessage.business_connection_id(ysender_business_boten los salientes)
Recibir business messages es un webhook HTTPS normal. No hace falta MTProto ni
un proceso con TDLib. El MTProto queda solo del lado del usuario que conecta el
bot (account.updateConnectedBot), que es una acción de la clínica en su cliente.
Lo que dije en §4.4 (“probable componente persistente aparte”) es incorrecto para el Bot API actual. Telegram y WhatsApp viven en el mismo Worker. Corregido aquí para que no queden dos versiones contradictorias.
Residual por verificar: que los métodos de envío acepten business_connection_id
sobre HTTPS. La doc de la librería .NET (que sigue el Bot API) dice que sí, y
Message.business_connection_id existe; comprobar en el método concreto al
implementar.
Detalle de flag: User.can_connect_to_business (devuelto solo en getMe) — hay
que checarlo para saber si el bot puede conectarse a cuentas de negocio.
Mini Apps — datos (consultados 2026-09-26)
Qué es: NO aloja tu app
Telegram aloja el runtime (el WebView y sus APIs nativas). La app es tuya y
se aloja donde quieras — un Cloudflare Worker, tu servidor, lo que sea. Eso es
soberanía máxima y es la misma infraestructura del RAG. Siete formas de lanzarla:
botón de perfil, botón de teclado, botón inline, botón de menú, inline mode,
direct link (t.me/<bot>/<appname>) y attachment menu.
La URL de la Mini App es la de tu servidor. Telegram no guarda tu código ni tu corpus; guarda la sesión.
Auth: el punto clave para anti-extracción
initData se valida server-side con el token del bot. Desde Bot API 8.0,
terceros (builders, SDKs externos) que procesan datos de una Mini App pueden
validar sin conocer el token del bot de la clínica.
Eso significa que tú puedes operar el producto de una clínica sin tener su token de bot. Es la propiedad anti-extracción más fuerte que hemos encontrado, y no existe equivalente en WhatsApp (ahí el token lo tiene el integrador, y el integrador puedes ser tú o el cliente).
Lo nuevo que importa para un RAG
Rich Messages (10.1, 11-jun-2026) — hecho para RAG. Texto estructurado con
entidades de bloque: RichBlockParagraph, RichBlockList, RichBlockTable,
RichBlockCollage, RichBlockSlideshow, RichBlockMap, RichBlockDetails
(expandible/colapsable), RichBlockPullQuotation, RichBlockBlockQuotation,
RichBlockPhoto, RichBlockVideo, RichBlockVoiceNote, RichBlockAudio,
RichBlockSectionHeading, RichBlockFooter, RichBlockDivider, RichBlockMath,
RichBlockThinking, RichBlockPreformatted. Inline: bold, italic, underline,
strikethrough, spoiler, sub/superscript, marked, code, custom emoji, link, botón
inline (RichMessageButton, RichTextButton, RichBlockButtons).
La doc lo dice textualmente: “allowing bots to send highly structured text and
stream AI-generated replies with seamless rich formatting”. sendRichMessageDraft
hace streaming de parciales; editRichMessageText permite reescritura.
RichBlockThinking expone razonamiento. Botones inline = RAG interactivo.
Para una clínica: un plan de tratamiento como tabla, un bloque colapsable de “qué esperar tras la cirugía”, botones de agendar. Nada de eso existe en el canal de texto.
Ephemeral Messages (10.2, 14-jul-2026) — el control anti-oráculo nativo.
Mensajes que el bot envía a un chat y que solo ve ese receptor y el bot, con
ephemeral_message_id, editables y borrables. En un grupo, la respuesta del RAG es
invisible para los demás. Esto es la respuesta de plataforma a la fuga de §5 del
primer documento, y reduces la necesidad de controles propios.
Control de generación: can_stop / keep_on_stop en sendMessageDraft +
update MessageGenerationStopped. El usuario corta la generación. Bueno para
respuestas largas con inferencia pagada.
Stars y Mini App Store: suscripciones pagadas con Telegram Stars (múltiples tiers), regalos, Apple Pay y Google Pay vía terceros. Los bots con Main Mini App que aceptan Stars pueden aparecer en el Mini App Store — distribución que Meta no ofrece.
Almacenamiento (el que eliges, y importa para soberanía):
CloudStorage(6.9) → en servidores de Telegram. Evitar para datos de paciente.DeviceStorage(9.0) → local en el dispositivo.SecureStorage(9.0) → local, cifrado, nunca sale del teléfono.
Biometría local (7.2, 31-mar-2024): BiometricManager — Face ID / Touch ID /
passcode del dispositivo. Es el inverso del miedo original: la biometría la
usa el paciente en su propio teléfono y no se transmite. Para expediente dental
es un argumento bueno y real.
8.0 (17-nov-2024): fullscreen (retrato/landscape), addToHomeScreen con
atajo en home, shareMessage, downloadFile, LocationManager, acelerómetro/
giroscopio, emoji status.
9.6 (3-abr-2026): requestChat — el usuario elige o crea un chat.
9.5 (1-mar-2026): iconCustomEmojiId en BottomButton.
Endurecimiento de seguridad (ya activo)
Bot API 10.2: Telegram prohíbe usar métodos de Mini App desde orígenes distintos al dominio original de la Mini App. Activado automáticamente el 20-jul-2026 para todas las Mini Apps. Se puede opt-out por @BotFather. Es un CSP efectivo: nadie puede inyectar llamadas al SDK desde una página third-party. Bueno, y ya está.
Lo que NO arregla: reach
t.me/<bot>/<appname> abre Telegram. Si el paciente no tiene Telegram, no hay
mini app. La Mini App hereda exactamente el techo de alcance del bot. Ninguna
de estas capacidades compensa un paciente que no llega.
Arquitectura resultante (tres puertas, un RAG)
Un RAG, un Worker, un corpus, tres frontales:
| Puerta | Alcance | Costo | Para qué |
|---|---|---|---|
| WhatsApp Cloud API | Máximo (el paciente ya está) | $17-47 USD/mes + Meta desde 1-oct | texto simple, recordatorios |
| Telegram Bot (Business Bot) | Medio | $0 | texto, cero Meta, cero fricción de onboarding |
| Telegram Mini App | Medio (mismo público que el bot) | $0 + tu hosting | UI rica, plan de tratamiento, pago, Media,ephemeral |
Los tres comparten el mismo corpus en namespace tenant_id. La Mini App es
literalmente el canal web con un envoltorio de distribución — o sea, el “web en
paralelo” seguro de §7 del primer documento, pero con su propia distribución y con
Stars para monetizar.
Y la regla no cambia: el frontal produce respuestas, nunca devuelve documentos. Las Ephemeral Messages ayudan, pero el tope de citas y el refusal de “repite el documento” siguen siendo tuyos.
Facts verificados contra
- core.telegram.org/bots/api (Bot API 10.3 24-ago-2026; Update.business_message / business_connection / edited_business_message / deleted_business_messages; Message.business_connection_id; sender_business_bot; User.can_connect_to_business solo en getMe; Rich Messages y clases RichBlock*/RichText*; Ephemeral Messages; MessageGenerationStopped; can_stop/keep_on_stop; getUserPersonalChatMessages; guard_bot; Communities; LivePhoto; setWebhook con secret_token y X-Telegram-Bot-Api-Secret-Token; local Bot API server)
- core.telegram.org/bots/webapps (Mini Apps; 7 formas de lanzamiento; direct link
t.me/
/ ; main mini app y Apps tab; initData vs initDataUnsafe y validación server-side; terceros validan sin conocer el bot token desde 8.0; DeviceStorage, SecureStorage, CloudStorage, BiometricManager; sendData 4096 bytes; origin hardening; requestChat en 9.6)