Guión
0
pendientes
Grabación
0
en progreso
Edición
0
en progreso
Aprob. Final
0
en revisión
Publicados
0
completados
Actividad reciente
Cargando...
| # | Nombre del Reel | Guión | Pipeline | Estado | F. Publicación | |
|---|---|---|---|---|---|---|
⏳ Conectando... | ||||||
Todos los guiones
—
| # | Nombre del Reel | Tema / Gancho | Guión Completo | Pipeline | Estado | F. Publicación |
|---|
📊 Conexión — Tracker de Guiones
Cabeceras en fila 3, datos desde fila 4. 1 fila = 1 guión.
URL CSV del Sheet
Intervalo sync (seg)
🔍 Debug — Columnas detectadas
Después de sincronizar, aquí verás qué columnas detectó el sistema.
Esperando sincronización...
✍️ Escritura bidireccional — Apps Script
Para que aprobaciones, notas y links se guarden en el Sheet.
1
Abre tu Sheet → Extensiones → Apps Script
2
Pega este código:
const SHEET_ID = 'PON_AQUI_EL_ID_DE_TU_SHEET';
const TAB = 'Hoja1'; // ← Nombre exacto de tu pestaña
function doPost(e) {
try {
const raw = e.postData ? e.postData.contents : '';
const d = JSON.parse(raw);
return process(d);
} catch(err) { return out({error: err.message}); }
}
function doGet(e) {
try {
if (e.parameter && e.parameter.data) {
const d = JSON.parse(decodeURIComponent(e.parameter.data));
return process(d);
}
return out({status: 'ContentFlow API activa'});
} catch(err) { return out({error: err.message}); }
}
function process(d) {
const sh = SpreadsheetApp.openById(SHEET_ID).getSheetByName(TAB)
|| SpreadsheetApp.openById(SHEET_ID).getSheets()[0];
let hdrRow = 1;
for (let r = 1; r <= 5; r++) {
const vals = sh.getRange(r, 1, 1, sh.getLastColumn()).getValues()[0];
if (vals.filter(v => String(v).trim()).length > sh.getLastColumn() * 0.3) {
hdrRow = r; break;
}
}
const hdr = sh.getRange(hdrRow, 1, 1, sh.getLastColumn()).getValues()[0]
.map(h => norm(String(h)));
const row = parseInt(d.row);
if (!row || row <= hdrRow) throw new Error('fila invalida: ' + row);
for (const [col, val] of Object.entries(d.updates || {})) {
const nc = norm(col);
let ci = hdr.findIndex(h => h === nc);
if (ci < 0) ci = hdr.findIndex(h => h.includes(nc) || nc.includes(h));
if (ci >= 0) sh.getRange(row, ci + 1).setValue(val);
}
SpreadsheetApp.flush();
return out({ok: true, row: row});
}
function norm(s) {
return s.toLowerCase().normalize('NFD')
.replace(/[\u0300-\u036f]/g,'')
.replace(/[^a-z0-9\s]/g,' ')
.replace(/\s+/g,' ').trim();
}
function out(d) {
return ContentService.createTextOutput(JSON.stringify(d))
.setMimeType(ContentService.MimeType.JSON);
}
3
Implementar → Aplicación web → Acceso: Cualquier persona
4
Pega la URL aquí:
URL Apps Script
GUIÓN #—
—
✓ OK