We use cookies
We use cookies and similar technologies to improve your experience, analyse traffic, and personalise content. You can accept all cookies or reject non-essential ones.
Con el conector en marcha, cada factura de venta que guarde en TallyPrime puede llegar a su cliente pocos minutos después: por WhatsApp o por correo electrónico con un PDF con su marca, o por SMS con el enlace. Esos mismos registros mantienen al día sus listas de clientes y proveedores, llevan sus cifras de ventas, compras y existencias a sus paneles, impulsan el seguimiento de los clientes que aún tienen saldo pendiente y alimentan un portal con su propia marca donde cada cliente ve sus facturas y el saldo pendiente de su cuenta. En esta guía decide todo eso: qué empresas y qué tipos de registro de Tally —facturas de venta, facturas de compra, clientes, proveedores, cuentas bancarias, artículos de existencias— se comparten, adónde va cada uno, con qué frecuencia consulta el conector y qué hace con ellos su flujo, la automatización que construye en SurveyAnalytica. Si el conector todavía no está en el PC, consulte Conector de Tally Prime — Guía de instalación.
Todo está en un único archivo de texto, bridge.yml, junto a sa-tally-bridge.exe, normalmente en C:\ProgramData\SurveyAnalytica. Haga clic en él con el botón derecho, elija Abrir con (Open with) y después Bloc de notas (Notepad). Es texto plano en YAML, donde la indentación tiene significado.
Aplique la indentación solo con espacios, nunca con la tecla Tab, y conserve la indentación de las líneas que copie de esta guía. El conector arranca con un archivo que puede leer de principio a fin; si una indentación se desajusta, indica la línea que hay que corregir y espera al archivo corregido. Compruebe su edición antes de dejarla en manos de Windows: basta un comando.
En la carpeta que contiene bridge.yml, haga clic en la barra de direcciones del Explorador de archivos, escriba cmd, pulse Enter y ejecute sa-tally-bridge.exe run --config bridge.yml. Si imprime su programación y sigue en ejecución, el archivo es correcto: pulse Ctrl+C y vuelva a iniciar el conector.
El conector lee bridge.yml al arrancar, así que un cambio guardado surte efecto en el siguiente arranque. Si todavía se está ejecutando en una ventana del Símbolo del sistema (Command Prompt), pulse ahí Ctrl+C y vuelva a ejecutarlo. Cuando ya arranca solo (paso 7 de la Guía de instalación), reinícielo desde el Programador de tareas (Task Scheduler) de Windows: abra Biblioteca del Programador de tareas → SurveyAnalytica → Tally Bridge (Task Scheduler Library), haga clic con el botón derecho en la tarea y elija Finalizar (End); después vuelva a hacer clic con el botón derecho y elija Ejecutar (Run). Cerrar la sesión y volver a iniciarla hace lo mismo: la tarea se inicia al iniciar sesión.
Use el asistente, sa-tally-bridge.exe init, para la configuración inicial. Parte de cero cada vez que se ejecuta, así que haga los cambios posteriores en el Bloc de notas. Mantenga cada empresa bajo una sola clave —el nombre que escribió el asistente o su número de carpeta— y conserve esa clave: es donde el conector guarda el punto por el que va esa empresa, de modo que cada ejecución lee solo lo nuevo y cada registro llega una sola vez.
El bloque companies: enumera las empresas que se van a sincronizar, una entrada por empresa, de modo que varias empresas o sucursales funcionan desde el mismo PC con Tally. Cada una tiene una clave que usted elige, que llega con cada registro como companyCode; un name escrito tal como lo escribe Tally; y un bloque transactions: que indica los tipos de registro que hay que leer.
bridge.yml — el bloque companies:
companies:
"010001":
name: "Acme Traders"
transactions:
sales: {}
purchase: {}
ledgers/debtors: {}
stockItems: {}
"010002":
name: "Globex Industries"
transactions:
sales: {}
ledgers/debtors: {}
Todos los ejemplos de esta guía son partes del mismo archivo: global: y companies: aparecen una sola vez cada uno, así que añada únicamente las líneas que le falten, con la misma indentación. Las llaves vacías son intencionadas: un tipo de registro necesita ajustes solo cuando tiene su propio destino, que es la siguiente sección. Los siete tipos, llamados streams:
| Escriba esto | Qué envía |
|---|---|
sales | Facturas de venta, incluidos sus propios tipos de comprobante: el conector pregunta a Tally en qué se basa cada tipo, de modo que GST SALES se registra como una venta. |
purchase | Facturas de compra; los tipos de comprobante personalizados se tratan igual. |
ledgers/debtors | Clientes: todas las cuentas (ledgers) del grupo Sundry Debtors, subgrupos incluidos. |
ledgers/creditors | Proveedores: todas las cuentas del grupo Sundry Creditors. |
ledgers/bank | Cuentas bancarias. |
ledgers | Todo el plan de cuentas: miles de filas. Para clientes o proveedores, las listas acotadas anteriores son más precisas. |
stockItems | Artículos de existencias, con cantidad, valor y precio de cierre. |
Los registros de clientes y proveedores llevan los datos de la parte tal como los guarda Tally —nombre de envío, correo electrónico, teléfono, móvil, GSTIN, número de impuesto sobre la renta, dirección y saldo de cierre—, lo que mantiene al día una lista de contactos sin volver a teclear nada. Los registros de ventas y compras llevan el comprobante completo: cabecera, líneas de existencias, líneas de cuentas e impuestos, narración y los datos de la factura electrónica de GST (IRN, número y fecha de acuse) cuando Tally los tiene.
Facturas de venta y facturas de compra, incluidos sus propios tipos de comprobante; clientes, proveedores, cuentas bancarias y, si lo desea, el plan de cuentas completo; artículos de existencias. Otros tipos de comprobante —recibos, pagos, contra, asientos de diario, notas de crédito y de débito, pedidos y albaranes de entrega— quedan hoy fuera del alcance del conector.
Cada registro va a un flujo cuyo disparador es un Webhook: el que creó en el paso 3 de la Guía de instalación, y tantos más como quiera, creados todos de la misma forma. Ese panel muestra los dos valores que se copian en bridge.yml: las filas etiquetadas URL : y KEY :, cada una con un botón de copiar. La línea de la URL se llama según el lugar que ocupa: webhook_url dentro de global:, dentro de una empresa y dentro de un tipo de registro; url dentro de transaction_webhooks: y de heartbeat:, con la clave como api_key al lado. Copie la forma del ejemplo siguiente usando el nombre que corresponde al nivel que está editando: ese es el nombre exacto que lee el conector. Los registros que todavía no tienen destino esperan seguros en la cola hasta que se les asigne uno.
Conviene saberlo. Copie la URL exactamente como la muestra el panel; si el cortafuegos de su oficina restringe el tráfico saliente, permita el HTTPS saliente hacia el nombre de host con el que empieza. La clave viaja en una cabecera llamada code y es todo lo que necesita el flujo: deje vacías las casillas de HMAC Signature (Optional) (firma HMAC, opcional).
Envíe todo a un único flujo, o dé a una empresa o a un tipo de registro el suyo propio.
bridge.yml — partes de los bloques global: y companies:
global:
webhook_url: "PASTE-THE-URL-FROM-THE-TRIGGER-PANEL"
api_key: "PASTE-THE-KEY-FROM-THE-TRIGGER-PANEL"
transaction_webhooks:
sales:
url: "PASTE-THE-SALES-FLOW-URL"
api_key: "PASTE-THE-SALES-FLOW-KEY"
ledgers/debtors:
url: "PASTE-THE-CONTACTS-FLOW-URL"
api_key: "PASTE-THE-CONTACTS-FLOW-KEY"
companies:
"010002":
name: "Globex Industries"
webhook_url: "PASTE-THE-GLOBEX-FLOW-URL"
api_key: "PASTE-THE-GLOBEX-FLOW-KEY"
transactions:
sales: {}
Los registros viajan en grupos: un grupo por empresa y tipo de registro. Para cada grupo, el conector toma el primer destino que esté relleno: esta empresa y este tipo de registro, después esta empresa, después este tipo de registro y, por último, el destino global de reserva. La clave viaja con la URL junto a la que se escribió, de modo que a cada flujo se llega con su propia clave.
Consejo. Generar nuevo, debajo de la clave, emite una KEY nueva; el flujo en ejecución conserva la actual hasta que alguien lo publique. Después de usarlo, pegue la KEY nueva en bridge.yml, reinicie el conector y pulse Actualizar versión publicada. (Un flujo publicado muestra Actualizar versión publicada; uno que nunca se ha activado muestra Activar.) Lo que se envíe mientras tanto espera en la cola.
El conector lee Tally de forma automática, cada pocos minutos, o según una programación, a las horas de reloj que usted elija: se define en el bloque sync, dentro de global. Sin bloque sync funciona en modo automático, cada cinco minutos.
Lee a intervalos fijos —cinco minutos, salvo que indique otra cosa— y una vez nada más arrancar, de modo que las facturas llegan a su flujo pocos minutos después de registrarse, y a su cliente el mismo día.
Lee solo a las horas que usted indique, por ejemplo a las 21:30 cada noche. Entre una y otra no hace ninguna petición a Tally, así que la jornada de trabajo es para su equipo.
bridge.yml — dentro del bloque global:, automático
global:
sync:
mode: interval
every: 5m
bridge.yml — dentro del bloque global:, programado
global:
sync:
mode: cron
cron: "30 21 * * *"
timezone: "Asia/Kolkata"
| Ajuste | Por defecto | Qué hace |
|---|---|---|
mode | interval | interval o cron. Una línea cron sin modo se interpreta como cron. |
every | 5m | Con qué frecuencia leer Tally en modo automático: 30s, 5m, 2h. |
cron | ninguno | Las horas de reloj en modo programado. Cinco partes: minuto, hora, día del mes, mes y día de la semana. |
timezone | UTC | La zona horaria en la que se interpretan las horas de cron, como nombre de lugar, por ejemplo Asia/Kolkata. Indíquela, para que las 21:30 sean las 21:30 de su país. |
run_on_start | true | Leer una vez nada más arrancar el conector. En modo programado, solo en un PC que aún no ha completado ninguna ejecución. |
catch_up | true | Si una hora programada pasó mientras el PC estaba apagado, hacer una ejecución cuando vuelva. |
catch_up_grace | 30m | Cuánto retraso debe acumular una hora perdida para que merezca la pena una ejecución de recuperación. |
retry_every | 15m | Con qué frecuencia reintentar lo que todavía queda por leer en este ciclo. |
first_run_guard | 0 (desactivado) | Retiene la primera sincronización de una empresa que tenga más cambios que este número, en cualquiera de los dos modos, para que una lectura de todo el historial no empiece una noche sin nadie delante; ese tipo de registro figura como needs_backfill hasta que vuelva a poner este valor en 0 y lo deje ejecutarse. |
| Escriba esto | Qué significa |
|---|---|
"30 21 * * *" | Todos los días a las 21:30. Con timezone: "Asia/Kolkata", las 21:30 IST. |
"0 19 * * 1-5" | De lunes a viernes a las 19:00; nada el fin de semana. |
"0 */2 * * *" | Cada dos horas, en punto. |
Escriba cinco partes, no seis: una primera parte de segundos convertiría "0 30 21 * * *" en una lectura a los treinta minutos de cada hora. El conector comprueba la expresión antes de arrancar e imprime global.sync.cron must have exactly 5 fields (minute hour day-of-month month day-of-week), got 6 in "0 30 21 * * *" en una ventana del Símbolo del sistema, así que compruebe a mano cada programación nueva, como se ha explicado arriba.
Cada hora programada inicia un ciclo. Si una empresa no estaba lista —con su pantalla de inicio de sesión aún en el escritorio, o con Tally todavía sin responder—, el conector la mantiene en la lista y lo vuelve a intentar cada retry_every, un cuarto de hora por defecto, hasta que lo consigue o llega la siguiente hora programada: una empresa que se abra a las 09:40 de la mañana siguiente se sincroniza a las 09:40.
Si el PC estuvo apagado durante una hora programada, una sola ejecución de recuperación cubre el intervalo: tres noches perdidas cuestan una ejecución, porque el conector pide todo lo que ha cambiado desde la última vez que miró. En modo programado, un reinicio mantiene la cita en lugar de adelantarla; si necesita las cifras ahora, cambie a automático por ese día.
Aquí es donde los registros de Tally se convierten en lo que usted quería: la factura enviada por WhatsApp o por correo electrónico con un PDF con su marca, o por SMS con el enlace; listas de clientes y proveedores al ritmo de Sundry Debtors y Sundry Creditors; un registro de ventas siempre al día en Google Sheets o Excel; una encuesta de satisfacción en cuanto sale la factura; recordatorios los días que usted elija, enviados por un flujo programado sobre una lista de contactos con los clientes que aún tienen saldo pendiente; cifras para paneles y análisis; y un portal con su marca donde los clientes ven sus propias facturas y el saldo pendiente de su cuenta.
sa-tally-bridge.exe test --config bridge.yml. Envía en el acto unos diez registros recientes de cada tipo de registro.records. Todo lo que hay debajo se ejecuta ahora una vez por registro, no una vez por grupo.Por qué este orden. El conector avanza a partir de lo que ya ha entregado, así que conviene tener el flujo activo antes de la primera carga grande. Mientras no está activo, el flujo guarda lo que llega como muestra de prueba, que es justo lo que necesitan los pasos 2 y 3.
Consejo. Use una sola vía por empresa —el conector, o la fuente de datos de Tally en la nube con un disparador Cronograma, no ambas—, para que cada registro llegue una sola vez.
| Acción | ¿Necesita loop? |
|---|---|
| WhatsApp, SMS, Slack, Microsoft Teams, publicaciones en redes sociales | Sí. Un mensaje cada vez. |
| Google Sheets, Excel | Sí. Una fila por registro. |
| Lista de contactos, Planner, Respuesta de encuesta, Usuario de la organización, Shopify, Salesforce, Mailchimp | Sí. Cada uno escribe un solo registro. |
| Correo electrónico | No. Una plantilla puede repetir una lista dentro de sí misma —varias facturas en un mismo estado de cuenta—; con un loop se envía un correo por factura. |
| Crear documento, Tarea | No. Ambos recorren una lista, así que un solo documento puede abarcar todo un grupo. |
Cuando hace falta un loop, el paso lo indica y ofrece un botón Add Loop (añadir loop).
Cada petición es uno de esos grupos —un lote, de una empresa y un tipo de registro— envuelto en seis campos.
| Campo | Qué contiene |
|---|---|
companyCode | La clave que usó dentro de companies:. |
companyName | El nombre de la empresa tal como lo escribe Tally. |
transactionType | El tipo de registro: sales, ledgers/debtors, etc. |
batchStart, batchTotal | En qué punto empieza este lote dentro de todo lo encontrado en este ciclo (0, luego 250, luego 500), y cuántos se encontraron. |
records | Los registros en sí, hasta 250 por petición: la matriz que recorre su loop. |
Dentro de records, los nombres de campo son los propios de Tally, en mayúsculas, y sus campos definidos por el usuario conservan su nombre tal cual. Todos los valores son texto, importes y fechas incluidos, y un campo vacío en Tally no aparece en ese registro, así que construya cada paso sobre los campos que eligió en el paso 7.
Una petición, abreviada
{
"companyCode": "010001",
"companyName": "Acme Traders",
"transactionType": "sales",
"batchStart": 0,
"batchTotal": 312,
"records": [
{
"GUID": "0a1b2c3d-0000-4000-8000-000000000001-00000101",
"REMOTEID": "0a1b2c3d-0000-4000-8000-000000000001-00000101",
"DATE": "20250401",
"VOUCHERNUMBER": "101",
"VOUCHERTYPENAME": "GST SALES",
"PARTYLEDGERNAME": "Example Customer Pvt Ltd",
"AMOUNT": "5900.00",
"PARTYGSTIN": "29XXXXXXXXXX1Z5",
"ALLINVENTORYENTRIES": [
{
"STOCKITEMNAME": "Sample Item A",
"BILLEDQTY": "10 Nos.",
"RATE": "500.00/Nos.",
"AMOUNT": "5000.00"
}
]
}
]
}
El campo sobre el que conviene construir es GUID —el identificador permanente que Tally da a ese comprobante o a esa cuenta—, con REMOTEID como sustituto, ya que algunos comprobantes lo llevan con ese nombre. Cuando alguien edita una factura, cuando sus datos de factura electrónica llegan más tarde o cuando una respuesta no llega al conector, el registro se envía de nuevo con el mismo identificador. Úselo como campo de coincidencia y actualice en lugar de añadir: así cada factura ocupa una sola fila, ya sea en una hoja, en un panel o en el portal.
Usted elige qué empresas y qué tipos de registro se comparten. De ellos viaja el comprobante o la cuenta completos, por una conexión cifrada: nombres de la parte y de envío, GSTIN, PAN, dirección postal, correo electrónico, números de teléfono y de móvil, nombres de artículo, precios, importes de impuestos y saldos. La mayoría de las empresas comparten ledgers/debtors y ledgers/creditors en lugar de todo el plan de cuentas, con lo que lo que sale del PC se limita a las partes con las que realmente comercian.
Los registros viajan cuando algo ha cambiado, así que una noche tranquila es tranquila por diseño. Si prefiere una confirmación positiva, el informe de estado publica un resumen en un flujo propio después de cada ejecución, con la URL y la KEY de ese flujo. Añádalo a mano:
bridge.yml — dentro del bloque global:
global:
heartbeat:
url: "PASTE-THE-STATUS-FLOW-URL"
api_key: "PASTE-THE-STATUS-FLOW-KEY"
Cada informe lleva outcome (success, partial o blocked), blockedReason (gateway_error, gateway_empty, no_companies), outboxDepth, recordsEnqueued, pendingStreams, nextFireAt y hostname. La alerta más útil: con una programación nocturna, avise si de una máquina no ha llegado ningún informe en 26 horas.
En el PC con Tally, abra una ventana del Símbolo del sistema en esa carpeta, como se ha explicado antes, y ejecute:
Símbolo del sistema
sa-tally-bridge.exe status --config bridge.yml
Lo que imprime
sa-tally-bridge [version] on TALLY-PC
Schedule : cron "30 21 * * *" (Asia/Kolkata)
Last run : Sat, 15 Aug 2026 21:30:04 IST → 21:34:11 (partial)
Next run : Sat, 15 Aug 2026 21:45:04 IST
Records : 312 enqueued last run; outbox depth 0
Pending : 1 stream(s) awaiting retry
- Globex Industries / sales : company_closed
ok Acme Traders / sales : synced (watermark 260321/260409, 312 records)
ok Acme Traders / stockItems : up_to_date (watermark 8821/8821, 0 records)
Entre Last run y Next run aparece una línea Blocked : cuando se ha bloqueado una ejecución entera. outbox depth cuenta los lotes que quedan por entregar; lo que busca es 0. watermark 260321/260409 es el marcador en números sencillos: el número de cambio hasta el que se ha leído y, después, el número de cambio actual de la empresa; cuando coinciden, está todo recogido. status informa de la última ejecución completada.
| Estado | Significado | ¿Se reintenta? |
|---|---|---|
synced | Se leyeron registros nuevos o modificados y se pusieron en cola para enviarlos. | Hecho |
up_to_date | Tally respondió y no ha cambiado nada: el estado de reposo saludable. | Hecho |
company_closed | Esa empresa no está abierta en TallyPrime, normalmente porque hay una pantalla de inicio de sesión esperando en el escritorio. | Sí |
type_map_failed | Esta vez no se leyó la lista de tipos de comprobante, así que el conector retuvo ese stream en lugar de clasificar sus tipos personalizados bajo el epígrafe equivocado. | Sí |
no_counter | Esta vez la empresa no informó de ningún contador de cambios. | Sí |
needs_backfill | Una primera sincronización retenida por first_run_guard. Se enumera con sa-tally-bridge.exe status --config bridge.yml --json. | No |
error | Un intento no llegó a completarse; el motivo queda registrado y el marcador no se movió, así que esos registros llegan la próxima vez. | Sí |
status..1 a .5. Lo primero que conviene enviar al soporte.| Qué ve | Qué significa | Qué hacer |
|---|---|---|
| Todo entregado y el flujo todavía no actúa. | El flujo está guardado pero sin activar, o en pausa, así que lo que ha llegado hasta ahora se conserva como su muestra de prueba. | Abra el flujo y pulse Activar. La siguiente sincronización se procesa entera. |
outbox depth no deja de subir. | El flujo todavía no acepta esos lotes: una KEY que ya ha cambiado, una URL de otro flujo, o un tipo de registro añadido a mano que aún no tiene destino. | Vuelva a copiar URL : y KEY : del panel y reinicie el conector; compruebe que ese tipo de registro tiene su propia URL, o que webhook_url dentro de global: está relleno. Mientras tanto, todo espera seguro en la cola. |
Una empresa figura siempre como company_closed. | No está abierta en TallyPrime, normalmente porque su pantalla de inicio de sesión está esperando. | Abra esa empresa en la ventana de Tally y escriba ahí su contraseña. El conector la recoge en el siguiente reintento. |
Blocked : gateway_error o gateway_empty, con todas las empresas en company_closed. | Tally todavía no responde, o respondió sin ninguna empresa abierta; la línea Blocked es la que hay que leer. (gateway es la palabra que usa el conector para la conexión de Tally por el puerto 9000.) | Mire la ventana de Tally: inicie Tally, o atienda la pantalla que está esperando ahí. |
companyName o batchTotal vacíos por debajo del loop. | El interruptor Include parent fields in each entry del loop está desactivado. | Abra el paso loop y actívelo. |
| Las entregas se detuvieron después de que alguien pulsara Generar nuevo. | Se emitió una KEY nueva y se publicó el flujo, así que el flujo espera ahora esa KEY. | Copie la KEY nueva en bridge.yml, reinicie el conector y pulse Actualizar versión publicada. |
| No llegan registros desde que se reinició el PC. | El conector se ejecuta dentro de su sesión de Windows, y Tally necesita tener sus empresas abiertas. | Inicie sesión y abra las empresas; el conector se reanuda aproximadamente un minuto después. En un PC en el que no se sienta nadie, active el inicio de sesión automático de Windows y vuelve solo. |
| Los registros llegan dos veces. | El complemento antiguo de Tally sigue cargado; o la empresa es además una fuente de datos de Tally con un disparador Cronograma; o está listada dos veces con dos claves. | Conserve la vía que quiera, quite la otra y reinicie el conector. |
synced con Records : 0. | Lo que cambió en este ciclo fueron tipos de comprobante fuera del alcance del conector, como los recibos. | Nada que hacer: los registros de ventas y compras están al día. |
La fiabilidad, en tres líneas.
Punto de recuperación (RPO): prácticamente cero. Tally sigue siendo su sistema de registro, y el marcador de una empresa solo avanza cuando esos registros están ya a salvo en la cola en disco; así, todo lo que se registró en las empresas y los tipos de registro que usted seleccionó mientras internet, el PC o el conector no estaban disponibles se recoge en la siguiente ejecución, sin volver a teclear nada.
Tiempo de recuperación (RTO): lo decide su PC. No hay procedimiento de recuperación: en cuanto se inicia sesión en Windows y Tally tiene sus empresas abiertas, el conector se reanuda solo aproximadamente un minuto después, recupera cualquier hora programada que haya pasado y reintenta cada 15 minutos con las empresas que no estuvieran abiertas.
Disponibilidad: Windows lo inicia al iniciar sesión y lo vuelve a iniciar —tres intentos, con un minuto de separación— si alguna vez se detiene. Panorama completo: La fiabilidad de un vistazo.
sa-tally-bridge.exe test tantas veces como quiera: no mueve ningún marcador ni cambia nada de lo ya sincronizado.HTTPS_PROXY para la cuenta de Windows con la que se ejecuta el conector —por ejemplo http://proxy.example.local:8080— y reinícielo.up_to_date.