Bom dia, Tulio.
Aqui está o panorama operacional de hoje.
Resumo Executivo — CEO
Assuntos estratégicos que os times endereçaram diretamente ao CEO, organizados por time.
Mlz-Analysis
Análises do data warehouse, materializadas por área
Operações Integradas
Gestão de redes, parceiros diretos e processos operacionais
Casos Redes e Parceiros
Problemas com dono, prazo e histórico — no lugar da thread de e-mail
Customer Success
Satisfação do cliente, NPS, churn e health score
Prevenção à Fraudes
Monitoramento, análise de risco e prevenção
Mission Control
Monitoramento de sistemas, incidentes e estabilidade
Financeiro
Budget, cash position, forecast e controle orçamentário
Métricas do Negócio
E-commerce — GMV, transações, redirects e conversão por parceiro
Configurações
Gerencie integrações e credenciais do cockpit.
Cole abaixo a URL do Google Apps Script que serve como proxy de leitura das planilhas. Todas as importações usam esta URL automaticamente — sem popup de login, sem expiração de sessão.
- Acesse
script.google.comcom a conta tulio@meliuz.com.br - Clique em Novo projeto. Apague o código existente e cole o código do proxy (ver abaixo)
- Salve o projeto (Ctrl+S). No menu superior, clique em Implantar → Nova implantação
- Em "Tipo de implantação", escolha App da Web
- Configure: Executar como: Eu (tulio@meliuz.com.br) · Quem tem acesso: Qualquer pessoa
- Clique em Implantar, autorize as permissões e copie a URL gerada
- Cole a URL no campo acima e clique em Salvar
script.google.com/.../edit). É a URL gerada ao Implantar → App da Web, que termina em /exec (script.google.com/macros/s/.../exec). Se editar o código depois, use Implantar → Gerenciar implantações → Editar (✏️) → Nova versão para não trocar a URL.
scripts/apps_script_proxy.gs, no repositório do cockpit. Use aquele arquivo; este bloco fica aqui só como referência do contrato antigo.
function doGet(e) {
try {
var p = (e && e.parameter) || {};
if (!p.spreadsheetId) return json({ error: 'Parametro spreadsheetId e obrigatorio' });
var ss = SpreadsheetApp.openById(p.spreadsheetId);
var sheet = null;
if (p.sheet) {
sheet = ss.getSheetByName(p.sheet);
if (!sheet) return json({ error: 'Aba nao encontrada: ' + p.sheet });
} else if (p.gid) {
var all = ss.getSheets();
for (var i = 0; i < all.length; i++) {
if (String(all[i].getSheetId()) === String(p.gid)) { sheet = all[i]; break; }
}
if (!sheet) return json({ error: 'gid nao encontrado: ' + p.gid });
} else {
sheet = ss.getSheets()[0];
}
var rows = sheet.getDataRange().getDisplayValues();
var csv = rows.map(function (row) {
return row.map(function (cell) {
var s = (cell == null) ? '' : String(cell);
return /[",\n\r]/.test(s) ? '"' + s.replace(/"/g, '""') + '"' : s;
}).join(',');
}).join('\n');
return ContentService.createTextOutput(csv).setMimeType(ContentService.MimeType.CSV);
} catch (err) {
return json({ error: String(err) });
}
}
// Envio de e-mail (cobranca de follow-up). O corpo chega como texto puro de
// proposito: com Content-Type JSON o navegador dispara um preflight OPTIONS,
// que o Apps Script nao responde.
function doPost(e) {
try {
var req = JSON.parse((e && e.postData && e.postData.contents) || '{}');
if (req.action !== 'mail') return json({ error: 'Acao desconhecida: ' + req.action });
// O cockpit esta publico na internet: o proxy so entrega para o dominio da
// empresa, entao nem um login vazado o transforma em relay de spam.
var DOMINIO = 'meliuz.com.br';
var to = (req.to || []).filter(function (a) {
return /@/.test(String(a)) && String(a).split('@')[1].toLowerCase() === DOMINIO;
});
if (!to.length) return json({ error: 'Nenhum destinatario @' + DOMINIO });
var msg = {
to: to.join(','),
subject: String(req.subject || 'Cockpit Meliuz'),
body: String(req.body || ''),
name: 'Cockpit Meliuz'
};
if (req.replyTo && /@/.test(String(req.replyTo))) msg.replyTo = String(req.replyTo);
MailApp.sendEmail(msg);
return json({ ok: true, sent: to, quota: MailApp.getRemainingDailyQuota() });
} catch (err) {
return json({ error: String(err) });
}
}
function json(obj) {
return ContentService.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}
doPost acima no fim do script existente e publicar Nova versão (Implantar → Gerenciar implantações → ✏️). A URL não muda. Na primeira execução o Google pede uma permissão nova — a de enviar e-mail em seu nome, usada pela cobrança de follow-up. Depois, teste no botão ✉️ Testar e-mail aqui em cima.