Telegram

Configuración

Documentación: v0.24.0

Puedes usar tg sin crear un archivo de configuración. Un indicador es una opción del comando, como --limit 5. El valor predeterminado se usa si no la indicas. Una variable de entorno es un ajuste con nombre que tu terminal o agente pasa al programa. Guarda ajustes en un archivo cuando quieras reutilizarlos entre comandos.

Todos los ajustes, variables y prioridades. La configuración no admite secretos: no tiene campos para sesiones, hash de aplicación, teléfonos ni identificadores de chats.

Qué valor tiene prioridad

Para cada ajuste se utiliza el primero que esté definido:

  1. Una opción del comando (--limit 50, --record, --timeout 30s).
  2. Una variable de entorno (TG_PROFILE, TG_TIMEOUT).
  3. La entrada del perfil en la configuración.
  4. defaults en la configuración, compartido por todos los perfiles.
  5. El valor predeterminado del programa.
tg chats list --limit 5     # 5: the option
# "limit": 50 in the profile's entry — when there is no option
# "limit": 30 in "defaults" — when the profile has none either
# 20 — when nothing is set

No todos los ajustes tienen las cinco fuentes. La tabla siguiente indica cuáles existen.

Consultar la configuración efectiva

tg config show
tg work config show

Muestra el perfil, de dónde procede su nombre, los perfiles definidos en el archivo, su ruta y si existe, y cada ajuste con su valor y de dónde procede: flag, una variable de entorno, config file, config defaults o default. --json devuelve lo mismo como objeto para scripts.

La lista termina con commandTimeoutMs: el límite de duración de todo el comando, indicado por --timeout o TG_TIMEOUT. No es un ajuste del archivo.

Si se define TG_CONFIG_DIR, TG_STATE_DIR o TG_CACHE_DIR, se avisa por stderr porque también cambia qué sesión se encuentra (sesiones).

⚠ No es una comprobación de funcionamiento. Solo lee archivos: no abre la base de datos, consulta el almacén de claves ni se conecta. Para comprobar la sesión, utiliza tg doctor --online (solución de problemas).

El archivo

config.json está en el directorio de configuración (~/.config/tg-cli/config.json en Linux; consulta los demás sistemas en instalación).

{
  "defaultProfile": "default",
  "defaults": {
    "sendsPerHour": 10,
    "updateCheck": false
  },
  "profiles": {
    "default": { "limit": 50 },
    "work": { "permissions": { "messages": "readonly", "messages.send": "allow" }, "record": true }
  }
}
AjusteValor predeterminadoQué hace
limit20filas por página; --limit tiene prioridad
timeoutMsningunotiempo máximo de una petición a Telegram en milisegundos. Un comando puede hacer varias; usa --timeout para limitar todo el comando
colorsegún la terminalcolores en las tablas; NO_COLOR también los desactiva
senderColorsfalseun color por remitente en las tablas de mensajes
recordfalseguardar todas las ejecuciones (diagnóstico); --record y --no-record tienen prioridad
keepRunsForDays30los registros más antiguos se eliminan al guardar el siguiente
permissionstodo permitido; pide confirmación para eliminar y cerrar otras sesionespermisos del perfil por comando (más abajo)
sendsPerHour30máximo de envíos en cualquier intervalo de una hora (seguridad)
transcribeWithautoquién transcribe la voz: auto (Telegram o un modelo local), messenger o local
speechModelningunomodelo descargado para --local (tg models audio list)
updateChecktrueaviso diario de nueva versión; solo en defaults
skillHinttrueaviso, como máximo diario, para agentes cuya skill de tg falta o es anterior al comando; solo en defaults
readOtherBotsfalsesolo perfiles de bot: si tg bot puede leer lo guardado por otros bots en este equipo; true o una lista de perfiles (bots)

defaultProfile, en el nivel superior, indica el perfil utilizado cuando ni la primera palabra ni TG_PROFILE especifican uno.

Permisos de un perfil

permissions es un objeto: cada clave es una ruta de comando y cada valor es un nivel.

{ "profiles": { "work": { "permissions": { "messages": "readonly", "messages.send": "allow" } } } }
NivelResultado
denyno permite ni leer: rechaza con código de salida 5 antes de conectarse
readonlypermite leer; rechaza cambios con código de salida 5
askpregunta y/N en la terminal; la respuesta predeterminada es no (más abajo)
allowejecuta la operación sin preguntar

Cada clave es una ruta de comando: messages, messages.delete, messages.send, reactions, polls.vote, chats.mark-read, chats.members.remove, contacts, account.sessions.end. Debe comenzar por un recurso: messages, reactions, polls, topics, chats, contacts, account o bot; de lo contrario se rechaza. La clave más específica tiene prioridad: en el ejemplo anterior se permite messages.send y se rechazan los demás cambios de mensajes. No hay comodines: messages: readonly no afecta a reactions, polls ni chats.

inbox, review, watch, serve y store fetch, export y search muestran mensajes, por lo que cuentan como messages: messages: deny también los bloquea. config, session, doctor, recipients, mcp y el mantenimiento del archivo local nunca se restringen.

Por defecto se permite todo salvo dos acciones irreversibles: messages.delete y account.sessions.end tienen nivel ask. Un valor predeterminado solo puede hacer más estricta la regla: messages: readonly sigue rechazando eliminaciones y messages: allow conserva la confirmación hasta que configures messages.delete expresamente.

tg config set permissions.messages.delete allow     # delete without the question
tg config set permissions.messages.send ask         # ask before every send
tg config unset permissions.messages.delete         # back to the default

Para hacer un perfil de solo lectura —aquí, agent— configura cada recurso:

for key in messages reactions polls topics chats contacts account; do
  tg agent config set permissions.$key readonly
done

Confirmación antes de cambiar algo

Con ask, tg muestra el cambio y pregunta go ahead? [y/N]. Cualquier respuesta distinta de y no cambia nada y finaliza con código 130. Puedes aprobar mediante una opción: --allow-dangerous para eliminar y --yes para cualquier otro cambio. Sin terminal, o con --json o --jsonl, nadie puede responder: se rechaza con código 7, confirmation_required, y el error indica la opción necesaria.

Ajustes anteriores que siguen funcionando

readOnly: true equivale a readonly en todos los recursos. Una lista en allow (send, forward, reaction, edit, pin, read, delete, groups, contacts, profile, folders, sessions) permite esas acciones con allow y deja las demás en readonly; las eliminaciones siguen pidiendo confirmación. Una clave de permissions tiene prioridad sobre ambos.

Cambiar ajustes sin abrir el archivo

tg config set limit 50                        # this profile
tg work config set permissions.contacts readonly   # profile "work"; one key at a time
tg config set sendsPerHour 10 --defaults      # every profile
tg config set updateCheck false --defaults    # a setting that exists only under defaults
tg config unset sendsPerHour                  # back to the default

config set valida el valor con las mismas reglas que el lector, por lo que no genera un archivo que los siguientes comandos rechacen.

Los errores de escritura no se ignoran

Un ajuste desconocido en el archivo detiene todos los comandos con código de salida 3:

config.json is not a valid config:
  profiles.default.limt: unknown setting — the known ones are limit, timeoutMs, …

Si se ignorase un ajuste mal escrito, el programa usaría el valor predeterminado sin explicar por qué. Lo mismo se aplica a claves de permissions que no empiezan por un recurso.

Variables de entorno

VariableQué hace
TG_PROFILEelige el perfil si la primera palabra no especifica uno
TG_PROFILE_LOCKlimita el proceso a un perfil; rechaza cualquier otro (sesiones)
TG_TIMEOUTigual que --timeout: 500ms, 30s o 2m para todo el comando
TG_API_ID, TG_API_HASHaplicación en lugar del almacén de claves, para CI; define ambas o ninguna
TG_CONFIG_DIR, TG_STATE_DIR, TG_CACHE_DIRcambian los tres directorios y la entrada del almacén de claves
MESSAGING_STOREruta del archivo de la base de datos local
CLI_COMMON_CACHE_DIRubicación de los modelos de voz
TG_NO_UPDATE_CHECK1 desactiva el aviso diario de nueva versión
NO_COLORdesactiva colores en las tablas
XDG_RUNTIME_DIRacceso al almacén de claves en Linux; cron y ssh suelen omitirla

Configuración temporal independiente

Apunta los tres directorios a otra ubicación: tg tendrá allí una configuración, sesión y registros nuevos. No verá tu sesión habitual porque también cambia la entrada del almacén de claves:

export TG_CONFIG_DIR=/tmp/tg-try/config TG_STATE_DIR=/tmp/tg-try/state TG_CACHE_DIR=/tmp/tg-try/cache
export MESSAGING_STORE=/tmp/tg-try/messages.db
tg setup

Sin MESSAGING_STORE, lo que lea esa sesión seguirá guardándose en tu archivo local habitual.

Siguientes pasos

  • Seguridad: protección mediante permissions, destinatarios permitidos y sendsPerHour.
  • Diagnóstico: record y keepRunsForDays.

En esta página