';
}
// Same .tc-room skeleton as renderRoomRow (avatar/info/top/bottom) so a group row matches the
// 1:1 rows visually — data-type="group" + data-gid instead of data-cid/data-uid is what the
// click-delegation in renderRooms() switches on. No online/typing indicator (doesn't apply to
// a group), and the avatar is a rounded square instead of a circle as the only visual cue
// distinguishing a group from a person, mirroring common chat-app convention.
function renderGroupRow(group) {
var gid = group.gid;
var name = group.name || '';
var lastMsg = group.lastMessage;
var preview = '';
if (lastMsg) {
preview = parseDisplayText(lastMsg.msm);
if (!preview) {
if (lastMsg.urlima && lastMsg.urlima.indexOf('public://') >= 0) preview = '📷';
else if (lastMsg.urlaudi && lastMsg.urlaudi.indexOf('public://') >= 0) preview = '🎵';
}
if (String(lastMsg.whosend) === String(userId)) preview = 'You: ' + preview;
} else {
preview = 'No messages yet';
}
var timeStr = group.updated ? fmtTime(unixToDbTimestamp(group.updated)) : '';
var unread = group.unreadCount > 0;
var active = activeGid === gid;
return '
';
}
var body = '';
if (msg.urlima === '_loading_') {
body += '
📷 Sending…
';
} else if (msg.urlima && msg.urlima.indexOf('public://') >= 0) {
var src = msg.urlima.replace('public://', FILES_BASE);
body += '';
}
if (msg.urlaudi && msg.urlaudi.indexOf('public://') >= 0) {
var asrc = msg.urlaudi.replace('public://', FILES_BASE);
body += '';
}
if (meta && meta.type === 'loc') {
body += locationLinkHtml(meta.lat, meta.lng);
} else if (!isSalt && text) {
body += '
' + linkifyText(escHtml(text)) + '
';
}
var time = fmtTime(msg.timestamp || '');
return '
'
+ metaHtml + body
+ '' + escHtml(time) + ''
+ '
';
}
// ── Render group messages ────────────────────────────────────────────────────
function renderGroupMessages(gid) {
var msgs = allGroupMsgs[gid] || [];
var $el = $('#tc-msgs');
var order = msgs.slice().reverse();
$el.html(order.map(renderGroupMsg).join(''));
$el.scrollTop($el[0].scrollHeight);
}
// Same shape as renderMsg(), plus a sender-name label on incoming bubbles — unlike a 1:1
// conversation, "not me" doesn't tell you who actually sent it. Reuses the identical
// urlima/urlaudi rendering, so images/audio sent from the Android app (or sendGroupImage()
// here) display correctly. Audio still has no send control in this web widget.
function renderGroupMsg(msg) {
var isMe = String(msg.whosend) === String(userId);
var side = isMe ? 'tc-out' : 'tc-in';
var parsed = parseInlineMeta(msg.msm || '');
var text = parsed.text;
var meta = parsed.meta;
var isSalt = (text.length === 18 && text.indexOf(' ') < 0);
var senderHtml = '';
if (!isMe) {
senderHtml = '
' + escHtml(msg.senderName || msg.whosend) + '
';
}
var metaHtml = '';
if (meta && meta.type === 'fwd') {
metaHtml = '
';
}
// ── Send (opc 11) ────────────────────────────────────────────────────────────
function sendMessage() {
var text = $.trim($('#tc-input').val());
if (!text || !activeCid) return;
$('#tc-input').val('').focus();
isTyping = false;
post({ opc: '11', userid: userId, cid: activeCid, msm: text, fid: '0' })
.then(function (resp) {
if (!resp) return;
var ok = (resp.resp === 3 || resp.resp === '3' ||
resp.resp === 11 || resp.resp === '11');
if (!ok) return;
var msg = {
id: resp.lastmid || String(Date.now()),
whosend: String(userId),
msm: text,
urlima: '',
urlaudi: '',
timestamp: new Date().toISOString().replace('T', ' ').substr(0, 19)
};
if (!allMsgs[activeCid]) allMsgs[activeCid] = [];
allMsgs[activeCid].unshift(msg);
renderMessages(activeCid);
if (socket && socket.connected) {
socket.emit('send-message', {
id: resp.lastmid,
chatId: activeCid,
from: String(userId),
to: String(activeUid),
message: text,
type: 'text'
});
}
});
}
// ── Send group message ───────────────────────────────────────────────────────
// Purely socket-based — group-message-send both persists (tc_group_message, via the
// signaling server) and delivers, unlike 1:1's HTTP-then-socket-notify split. The server
// echoes the message back to the sender too (see group-message-send in signaling-server-2.js),
// so onGroupSocketMessage() is what actually appends it here — no optimistic local insert.
function sendGroupMessage() {
var text = $.trim($('#tc-input').val());
if (!text || !activeGid) return;
if (!socket || !socket.connected) return;
$('#tc-input').val('').focus();
isTyping = false;
socket.emit('group-message-send', {
gid: parseInt(activeGid, 10),
from: userId,
message: text,
type: 'text',
localId: 'web-' + Date.now() + '-' + Math.random().toString(36).substr(2, 8)
});
}
// ── Send group image (group-message-send, type:"image") ─────────────────────
// Unlike 1:1 (HTTP upload then socket notify), groups have no HTTP upload endpoint —
// the server expects the raw file as a base64 string on the same socket event used for
// text (see group-message-send in signaling-server-2.js), and does its own resize/compress
// (sharp, 1024x1024 max, jpeg75) server-side before writing it and echoing "group-message"
// back to every member including the sender. That echo is what onGroupSocketMessage() uses
// to both confirm this optimistic placeholder (matched by localId) and actually display it.
function sendGroupImage(file) {
if (!activeGid) return;
if (!socket || !socket.connected) return;
if (pendingGroupImage) return; // one at a time — button is disabled meanwhile anyway
var gid = activeGid;
var localId = 'web-img-' + Date.now() + '-' + Math.random().toString(36).substr(2, 8);
pendingGroupImage = { gid: gid, localId: localId };
if (!allGroupMsgs[gid]) allGroupMsgs[gid] = [];
allGroupMsgs[gid].unshift({
id: localId, localId: localId, whosend: String(userId), senderName: myName,
msm: '', urlima: '_loading_', urlaudi: '', created: Math.floor(Date.now() / 1000)
});
renderGroupMessages(gid);
$('#tc-img-btn').attr('disabled', 'disabled');
// Safety net — if the server/socket never answers at all (disconnect mid-flight etc.),
// don't leave "Sending…" stuck forever (see the 1:1 image-send bug this mirrors).
var timeoutId = setTimeout(function () { onGroupMessageError({}); }, 20000);
compressImageIfNeeded(file, function (uploadFile) {
var reader = new FileReader();
reader.onload = function () {
clearTimeout(timeoutId);
if (!pendingGroupImage || pendingGroupImage.localId !== localId) return; // already cleared
var base64 = (reader.result || '').split(',')[1] || '';
if (!base64 || !socket || !socket.connected) { onGroupMessageError({}); return; }
socket.emit('group-message-send', {
gid: parseInt(gid, 10),
from: userId,
message: '',
type: 'image',
filedata: base64,
localId: localId
});
};
reader.onerror = function () {
clearTimeout(timeoutId);
onGroupMessageError({});
};
reader.readAsDataURL(uploadFile);
});
}
// Clears whatever group image send is currently in flight — used both for explicit
// "group-message-error" replies (bad file, not a member, rate-limited) and the
// client-side timeout above. Doesn't distinguish by localId: only one send is ever
// in flight at a time (the button is disabled meanwhile), so there's nothing to match.
function onGroupMessageError(data) {
if (!pendingGroupImage) return;
var gid = pendingGroupImage.gid;
var localId = pendingGroupImage.localId;
pendingGroupImage = null;
$('#tc-img-btn').removeAttr('disabled');
if (allGroupMsgs[gid]) {
allGroupMsgs[gid] = allGroupMsgs[gid].filter(function (m) { return m.localId !== localId; });
}
if (activeGid === gid && isOpen) renderGroupMessages(gid);
if (data && data.error) { console.warn('group image send failed:', data.error); }
}
// Resizes/re-encodes as JPEG when a file exceeds COMPRESS_THRESHOLD. Skips GIFs —
// redrawing to canvas would flatten an animated GIF to a single static frame.
// Falls back to the original file untouched if decoding/encoding fails for any reason.
function compressImageIfNeeded(file, callback) {
if (file.size <= COMPRESS_THRESHOLD || file.type === 'image/gif') {
callback(file);
return;
}
var img = new Image();
var url = URL.createObjectURL(file);
img.onload = function () {
URL.revokeObjectURL(url);
var scale = Math.min(1, COMPRESS_MAX_DIM / Math.max(img.width, img.height));
var canvas = document.createElement('canvas');
canvas.width = Math.round(img.width * scale);
canvas.height = Math.round(img.height * scale);
canvas.getContext('2d').drawImage(img, 0, 0, canvas.width, canvas.height);
canvas.toBlob(function (blob) {
callback(blob || file, !!blob);
}, 'image/jpeg', COMPRESS_QUALITY);
};
img.onerror = function () {
URL.revokeObjectURL(url);
callback(file);
};
img.src = url;
}
// ── Send image (opc 11I) ─────────────────────────────────────────────────────
function sendImage(file) {
if (!activeCid) return;
var tempId = '_img_' + Date.now();
if (!allMsgs[activeCid]) allMsgs[activeCid] = [];
allMsgs[activeCid].unshift({
id: tempId, whosend: String(userId), msm: '', urlima: '_loading_',
urlaudi: '', timestamp: new Date().toISOString().replace('T', ' ').substr(0, 19)
});
renderMessages(activeCid);
// .attr()/.removeAttr(), not .prop() — this site's jQuery predates 1.6 (which is
// when .prop() was introduced), and every other call in this file sticks to
// pre-1.6-safe APIs already.
$('#tc-img-btn').attr('disabled', 'disabled');
compressImageIfNeeded(file, function (uploadFile, wasCompressed) {
var form = new FormData();
form.append('opc', '11I');
form.append('userid', String(userId));
form.append('cid', activeCid);
form.append('image', uploadFile, wasCompressed ? 'upload.jpg' : file.name);
fetch(API_URL, { method: 'POST', body: form })
.then(function (r) { return r.ok ? r.json() : null; })
.then(function (resp) {
allMsgs[activeCid] = allMsgs[activeCid].filter(function (m) { return m.id !== tempId; });
if (resp && (resp.resp === 3 || resp.resp === '3') && resp.urlima) {
var msg = {
id: resp.lastmid || String(Date.now()),
whosend: String(userId),
msm: '',
urlima: resp.urlima,
urlaudi: '',
timestamp: new Date().toISOString().replace('T', ' ').substr(0, 19)
};
allMsgs[activeCid].unshift(msg);
if (socket && socket.connected) {
socket.emit('send-message', {
id: resp.lastmid,
chatId: activeCid,
from: String(userId),
to: String(activeUid),
message: '',
urlima: resp.urlima,
type: 'image'
});
}
}
renderMessages(activeCid);
})
.catch(function () {
allMsgs[activeCid] = allMsgs[activeCid].filter(function (m) { return m.id !== tempId; });
renderMessages(activeCid);
})
.then(function () { $('#tc-img-btn').removeAttr('disabled'); });
});
}
// ── Inline meta parser ────────────────────────────────────────────────────────
function parseInlineMeta(raw) {
if (!raw) return { text: '', meta: null };
if (raw.substr(0, FWD_MARKER.length) === FWD_MARKER) {
var end = raw.indexOf(META_ETX);
if (end < 0) return { text: raw, meta: null };
var sender = raw.substring(FWD_MARKER.length, end);
return { text: raw.substring(end + 1), meta: { type: 'fwd', sender: sender } };
}
if (raw.substr(0, REPLY_MARKER.length) === REPLY_MARKER) {
var rend = raw.indexOf(META_ETX);
if (rend < 0) return { text: raw, meta: null };
var parts = raw.substring(REPLY_MARKER.length, rend);
var sep = parts.indexOf(META_SEP);
var rsender = sep >= 0 ? parts.substring(0, sep) : parts;
var orig = sep >= 0 ? parts.substring(sep + 1) : '';
return { text: raw.substring(rend + 1), meta: { type: 'reply', sender: rsender, orig: orig } };
}
// Shared location — same "lat" + META_SEP + "lng" encoding the Android app writes
// (see LOC_MARKER / sendLocationMessage() in ActivityChat.java). No trailing text.
if (raw.substr(0, LOC_MARKER.length) === LOC_MARKER) {
var lend = raw.indexOf(META_ETX);
if (lend < 0) return { text: raw, meta: null };
var coords = raw.substring(LOC_MARKER.length, lend);
var lsep = coords.indexOf(META_SEP);
var lat = lsep >= 0 ? coords.substring(0, lsep) : coords;
var lng = lsep >= 0 ? coords.substring(lsep + 1) : '';
return { text: raw.substring(lend + 1), meta: { type: 'loc', lat: lat, lng: lng } };
}
return { text: raw, meta: null };
}
function parseDisplayText(msm) {
var p = parseInlineMeta(msm || '');
var t = p.text;
if (p.meta && p.meta.type === 'loc') return '📍 ' + LOC_LABEL;
if (t.length === 18 && t.indexOf(' ') < 0) return '';
return (p.meta ? (p.meta.type === 'fwd' ? '↪ ' : '↩ ') : '') + t;
}
// ── Badge & notifications ─────────────────────────────────────────────────────
function updateBadge() {
var n = Object.keys(unreadCids).length;
Object.keys(allGroups).forEach(function (k) {
if (allGroups[k].unreadCount > 0) n++;
});
var $b = $('#tc-badge');
if (n > 0) { $b.text(n).removeClass('tc-hidden'); }
else { $b.addClass('tc-hidden'); }
}
function showNotif(title, body) {
if (!('Notification' in window)) return;
if (Notification.permission === 'granted') {
new Notification(title, {
body: body || '',
icon: 'https://www.taleoi.com/sites/default/files/taleoi.ico'
});
} else if (Notification.permission === 'default') {
Notification.requestPermission();
}
}
// ── HTTP ──────────────────────────────────────────────────────────────────────
function post(params) {
var form = new FormData();
Object.keys(params).forEach(function (k) { form.append(k, String(params[k])); });
return fetch(API_URL, { method: 'POST', body: form })
.then(function (r) { return r.ok ? r.json() : null; })
.catch(function () { return null; });
}
// ── Helpers ───────────────────────────────────────────────────────────────────
// Group timestamps (tc_group.updated, tc_group_message.created) are unix seconds, unlike
// 1:1's "YYYY-MM-DD HH:MM:SS" strings — converts to that same shape (local time) so both can
// share fmtTime() and the plain string comparison renderRooms() sorts by.
// Formatted with UTC getters, not local — fmtTime() (below) always treats this
// "YYYY-MM-DD HH:MM:SS" shape as UTC (appending 'Z' before parsing), matching the raw
// DB timestamp strings 1:1 chat passes it directly. Using local getters here would hand
// fmtTime() an already-local time it then re-shifts by the viewer's UTC offset again.
function unixToDbTimestamp(unixSec) {
if (!unixSec) return '0';
var d = new Date(unixSec * 1000);
function pad(n) { return (n < 10 ? '0' : '') + n; }
return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + ' '
+ pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds());
}
function fmtTime(ts) {
if (!ts) return '';
// DB timestamps are plain "YYYY-MM-DD HH:MM:SS" in UTC (MySQL TIMESTAMP column).
// Without a trailing 'Z', the JS Date parser treats a date-TIME string (unlike a
// date-only string) as local time, not UTC — silently shifting displayed times by
// the viewer's UTC offset. The 'Z' forces correct UTC interpretation.
var d = new Date(ts.replace(' ', 'T') + 'Z');
if (isNaN(d.getTime())) return '';
var now = new Date();
if (d.toDateString() === now.toDateString()) {
return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
}
return (d.getMonth() + 1) + '/' + d.getDate();
}
function escHtml(s) {
return String(s == null ? '' : s)
.replace(/&/g, '&').replace(//g, '>')
.replace(/"/g, '"').replace(/'/g, ''');
}
function escAttr(s) { return escHtml(s); }
// Wraps http(s) URLs in a message's already-escaped text with clickable links. Must run
// AFTER escHtml() — matching against the escaped string is safe since escaping never
// introduces whitespace inside a URL run, and the entities it does introduce (e.g. "&"
// for a literal "&" in a query string) are exactly what a browser expects inside an href
// attribute anyway. target="_blank" + rel="noopener noreferrer" so following a link never
// navigates away from (or exposes window.opener to) the page the chat widget is floating on.
function linkifyText(escapedText) {
return escapedText.replace(/https?:\/\/[^\s<]+/g, function (url) {
var trail = '';
var m = url.match(/[.,!?:;)\]}'"]+$/);
if (m) { trail = m[0]; url = url.slice(0, -trail.length); }
if (!url) return trail;
return '' + url + '' + trail;
});
}
// A shared location (LOC_MARKER — see parseInlineMeta()) renders as a tappable card
// linking to Google Maps, matching how the Android app opens a geo: intent for the
// same coordinates. Uses an https:// maps URL instead since geo: isn't reliably
// clickable in desktop browsers.
function locationLinkHtml(lat, lng) {
var mapUrl = 'https://www.google.com/maps?q=' + encodeURIComponent(lat) + ',' + encodeURIComponent(lng);
return ''
+ '📍 ' + escHtml(LOC_LABEL) + '';
}
})(jQuery);
co| Page 12 | taleoi.com
Con mucho entusiasmo queremos compartir parte de la experiencia vivida por nuestros compañeros en el Centro de Interés ExpresArte, en las líneas de dibujo técnico y pintura al óleo.
Durante esta...
NEM: Educación ambiental que se convierte en acción
El compromiso con el cuidado del medio ambiente también se construye desde las aulas. En la Institución Educativa INEM José Eustasio Rivera de...
En el corazón de Leticia, Amazonas, se encuentra una institución que durante décadas ha acompañado la formación de generaciones de jóvenes: la Institución Educativa INEM José Eustasio Rivera.
El INEM...
En el marco del 31 de agosto, Día Internacional de los Afrodescendientes, la Policía Nacional reafirma su compromiso con el respeto por la diversidad cultural, la inclusión y la garantía de los...
Leticia, Amazonas. En el marco de las estrategias de prevención y acercamiento con la comunidad, la Seccional de Carabineros y Protección Ambiental de la Policía Nacional participó en el espacio...
Leticia, Amazonas. En el marco de las acciones adelantadas contra el tráfico de estupefacientes, la Policía Nacional de Colombia, a través de las Seccionales de Investigación Criminal e Inteligencia...
Reedwood CA., agosto 28 de 2026- La IA está transformando la ciberseguridad a una velocidad extraordinaria. Check Point Research ya está detectando ataques impulsados por IA en la práctica, revelando...
La Policía Nacional de Colombia, a través de la Seccional de Investigación Criminal e Inteligencia, desarrolla planes preventivos y de control orientados a prevenir el hurto de vehículos y...
Leticia, Amazonas. La Policía Nacional de Colombia, a través de la Seccional de Carabineros y Protección Ambiental, participó en un espacio de la Radio Policía Leticia 98.9 FM, donde compartió con la...
La Policía Nacional de Colombia, mediante labores de patrullaje, vigilancia y el apoyo del sistema de cámaras de videovigilancia, logró la captura en flagrancia de un ciudadano por el delito de hurto...
Leticia, Amazonas. En el marco de las actividades de registro, control y solicitud de antecedentes, la Policía Nacional de Colombia logró la captura de un ciudadano requerido mediante Notificación...
Noviembre 13 de 2015
Crónica No 40
Interesante el dramático documental testimonial que con el nombre de “El Valle sin Sombras” emitió el domingo una...
Junio 07 de 2021
CRÓNICA
“Experiencias Amazónicas”
Fue para la década de los setenta cuando estando en el Amazonas pertenecí al Benemérito Cuerpo de...
Cristian Quiroz resalta fortaleza del sistema electoral colombiano de cara a las presidenciales
#EnImágenes | Durante la instalación de la Comisión Nacional Descentralizada de Coordinación y Seguimiento Electoral, realizada en Bogotá, el presidente del Consejo Nacional Electoral (CNE), magistrado Cristian Quiroz, destacó las garantías de tra...read more
#EnImágenes | Durante la instalación de la Comisión Nacional Descentralizada de Coordinación y Seguimiento Electoral, realizada en Bogotá, el presidente del Consejo Nacional Electoral (CNE), magistrado Cristian Quiroz, destacó las garantías de transparencia que acompañan el proceso de elecciones presidenciales de 2026.
El funcionario señaló que las 120.050 mesas de votación del país podrán ser monitoreadas en tiempo real por los partidos y movimientos políticos a través de sus testigos electorales, quienes tendrán acompañamiento durante todas las etapas de la jornada.
Quiroz también recordó que en los anteriores comicios se registraron más de 100 mil reportes a organizaciones políticas antes de las 10:00 de la mañana, lo que, según indicó, evidencia la legitimidad y fortaleza de los mecanismos de control electoral.
Asimismo, hizo un llamado a todos los actores involucrados en el proceso para actuar con justicia, imparcialidad y respeto por las reglas democráticas, de cara a la jornada electoral prevista para el próximo 21 de junio.
Contundente operación contra grupo armado organizado deja tres capturados en el Amazonas
En desarrollo de la ofensiva permanente contra los grupos armados organizados residuales, la Policía Nacional de Colombia, en una operación conjunta con la Fuerza Aeroespacial Colombiana, logró la captura mediante orden judicial de tres personas p...read more
En desarrollo de la ofensiva permanente contra los grupos armados organizados residuales, la Policía Nacional de Colombia, en una operación conjunta con la Fuerza Aeroespacial Colombiana, logró la captura mediante orden judicial de tres personas presuntamente integrantes de la estructura Jhonier Arenas del Estado Mayor Central, en procedimientos realizados en la ciudad de Leticia y el corregimiento de La Pedrera.
Las capturas fueron posibles gracias al trabajo investigativo adelantado por las autoridades, el cual permitió establecer que los hoy capturados, al parecer, cumplían funciones logísticas dentro de la organización criminal, relacionadas con el transporte de armamento de largo alcance y la adquisición de elementos de intendencia para fortalecer el componente armado ilegal.
Con este importante resultado operacional se afectan de manera significativa las capacidades logísticas y criminales de este grupo armado organizado residual, contribuyendo al fortalecimiento de la seguridad, la convivencia ciudadana y la tranquilidad de los habitantes del departamento del Amazonas.
Los capturados son requeridos por los delitos de concierto para delinquir, desplazamiento forzado, homicidio y tráfico de estupefacientes, y fueron dejados a disposición de la autoridad competente para continuar con el proceso judicial correspondiente.
El señor coronel Santiago Garavito Aranzazu, comandante del Departamento de Policía Amazonas, destacó que este resultado evidencia el compromiso permanente de la Policía Nacional con la protección de la vida, la seguridad y la defensa de los ciudadanos. Asimismo, invitó a la comunidad a continuar suministrando información oportuna a través de la línea de emergencia 123, herramienta fundamental para combatir el crimen y fortalecer la seguridad en la región.
CNE reitera el uso exclusivo de la Plataforma Única para la postulación y acreditación de actores electorales para la segunda vuelta presidencial
El Consejo Nacional Electoral recuerda a las agrupaciones políticas y a las organizaciones de observación electoral que la Plataforma Única de Postulación y Acreditación de Actores Electorales es el único mecanismo habilitado para la postulación y...read more
El Consejo Nacional Electoral recuerda a las agrupaciones políticas y a las organizaciones de observación electoral que la Plataforma Única de Postulación y Acreditación de Actores Electorales es el único mecanismo habilitado para la postulación y acreditación de los diferentes actores que participarán en la segunda vuelta presidencial, el próximo 21 de junio. A través de esta herramienta tecnológica, el CNE garantiza un procedimiento seguro, transparente y centralizado para la gestión de las solicitudes de acreditación, fortaleciendo el control de los procesos electorales del país.
En ese sentido, el Consejo Nacional Electoral reitera que cualquier trámite de postulación o acreditación deberá realizarse exclusivamente a través de la Plataforma Única de Postulación y Acreditación de Actores Electorales, dentro de los plazos establecidos para la próxima jornada electoral:
• Viernes 12 de junio, a las 5:00 p.m. (hora colombiana) postulación de testigos en el exterior, y auditores de sistemas y observadores electorales dentro y fuera del país.
• Jueves 18 de junio, a las 5:00 p.m. (hora colombiana) postulación de testigos electorales en el territorio nacional.
Asimismo, se recuerda a las agrupaciones políticas que cuentan con una mesa de ayuda permanente, disponible a través del numeral #259, para atender inquietudes y brindar acompañamiento durante el proceso. De igual manera, el CNE implementó un plan de atención personalizada mediante el cual cada campaña dispone de un canal de soporte y acompañamiento las 24 horas del día. La corporación invita a las agrupaciones políticas y organizaciones de observación electoral a realizar sus trámites de manera oportuna, con el fin de contribuir al fortalecimiento de la transparencia, la vigilancia y las garantías democráticas del país.
Cristian Quiroz: “Colombia tiene la democracia más fuerte de América Latina”.
El presidente del Consejo Nacional Electoral (CNE), magistrado Cristian Quiroz, destacó las garantías de transparencia para la segunda vuelta presidencial del próximo 21 de junio durante la instalación de la Comisión Nacional Descentralizada de Co...read more
El presidente del Consejo Nacional Electoral (CNE), magistrado Cristian Quiroz, destacó las garantías de transparencia para la segunda vuelta presidencial del próximo 21 de junio durante la instalación de la Comisión Nacional Descentralizada de Coordinación y Seguimiento Electoral en Bogotá.
Según explicó, las 120.050 mesas de votación del país podrán ser monitoreadas en tiempo real por los partidos y movimientos políticos a través de sus testigos electorales. Además, recordó que en la primera vuelta más de 100 mil reportes fueron entregados a las organizaciones políticas antes de las 10:00 de la mañana, fortaleciendo la confianza en el proceso.
“El 21 de junio esperamos que los colombianos puedan votar de manera libre y transparente”, afirmó Quiroz, quien hizo un llamado a todos los actores electorales a actuar con imparcialidad y respeto por la democracia.
CNE acredita más de 8.500 testigos electorales para vigilar la segunda vuelta presidencial en el exterior
El Consejo Nacional Electoral (CNE) informó que un total de 8.579 testigos electorales fueron acreditados para ejercer labores de vigilancia y control durante la segunda vuelta de las elecciones presidenciales y vicepresidenciales de 2026 en el ex...read more
El Consejo Nacional Electoral (CNE) informó que un total de 8.579 testigos electorales fueron acreditados para ejercer labores de vigilancia y control durante la segunda vuelta de las elecciones presidenciales y vicepresidenciales de 2026 en el exterior, programada para el próximo 21 de junio.
Según la autoridad electoral, los testigos estarán presentes en 3.670 mesas de votación habilitadas en 67 sedes diplomáticas alrededor del mundo, lo que representa una cobertura del 90,98 % de los puestos donde los colombianos residentes fuera del país podrán ejercer su derecho al voto.
El organismo también confirmó la acreditación de 15.409 observadores electorales nacionales, quienes realizarán seguimiento y monitoreo al desarrollo de la jornada democrática con el propósito de fortalecer la transparencia, la vigilancia y la legitimidad del proceso electoral.
A estas labores se suma la participación de organismos internacionales que integran la Misión de Observación Electoral Internacional organizada por el CNE, entre ellos la Unión Interamericana de Organismos Electorales (UNIORE), la Asociación Mundial de Organismos Electorales (A-WEB), la Asociación de Magistradas Electorales de las Américas (AMEA), Transparencia Electoral e IDEA Internacional, además de tribunales y autoridades electorales de distintos países de América Latina.
Con estas acciones, el Consejo Nacional Electoral busca garantizar mayores condiciones de transparencia y control durante la jornada electoral, promoviendo la confianza ciudadana y el fortalecimiento de la democracia colombiana.
Policía Nacional y autoridades realizaron cierre de fronteras en Leticia como parte del Plan Democracia
Leticia, Amazonas. En el marco de la estrategia #SeguridadYDemocracia2026, la Policía Nacional en el departamento del Amazonas, en articulación con las autoridades político-administrativas y las Fuerzas Militares, llevó a cabo el cierre de fronter...read more
Leticia, Amazonas. En el marco de la estrategia #SeguridadYDemocracia2026, la Policía Nacional en el departamento del Amazonas, en articulación con las autoridades político-administrativas y las Fuerzas Militares, llevó a cabo el cierre de fronteras en el municipio de Leticia, en cumplimiento de las disposiciones establecidas para garantizar el normal desarrollo de la jornada electoral.
La medida fue adoptada mediante el Decreto 0631, que ordenó el cierre de fronteras a partir de las 10:00 a. m. del 20 de junio de 2026, con el propósito de preservar la seguridad, mantener el orden público y brindar las condiciones necesarias para el ejercicio libre y transparente del derecho al voto.
Durante la ejecución del dispositivo se desarrollaron actividades de control, verificación y acompañamiento en los principales pasos fronterizos, fortaleciendo la presencia institucional y el trabajo coordinado entre las diferentes autoridades.
La Policía Nacional reitera su compromiso con la protección de la democracia e invita a la ciudadanía a continuar confiando en las instituciones y a acatar las medidas establecidas para contribuir al desarrollo de unas elecciones seguras, tranquilas y en paz.
Prosperidad Social fortalece las Economías para la Vida en Leticia
El alcalde de Leticia, Elquin Uni Heredia, participó en el Encuentro Popular de Economías para la Vida, una estrategia liderada por Prosperidad Social del Gobierno Nacional para fortalecer las unidades productivas, asociaciones y organizaciones co...read more
El alcalde de Leticia, Elquin Uni Heredia, participó en el Encuentro Popular de Economías para la Vida, una estrategia liderada por Prosperidad Social del Gobierno Nacional para fortalecer las unidades productivas, asociaciones y organizaciones comunitarias que impulsan la economía popular en el Amazonas.
Durante la jornada, los asistentes disfrutaron de una muestra de productos locales como fariña, casabe, frutas amazónicas, artesanías y tejidos tradicionales, además de actividades culturales, espacios de diálogo sobre reciclaje y sostenibilidad, y la oferta institucional de diferentes entidades.
Estos espacios permiten visibilizar el trabajo de los productores amazónicos, fomentar el consumo de productos locales y generar nuevas oportunidades para el crecimiento de los emprendimientos, contribuyendo al desarrollo económico y social del territorio.
Cristian Quiroz, invitó a las campañas políticas a postular oportunamente a sus actores electorales de cara a los comicios presidenciales de 2026.
El presidente del Consejo Nacional Electoral, Cristian Quiroz, invitó a las campañas políticas a postular oportunamente a sus actores electorales de cara a los comicios presidenciales de 2026.
El magistrado destacó la importancia de garantizar una p...read more
El presidente del Consejo Nacional Electoral, Cristian Quiroz, invitó a las campañas políticas a postular oportunamente a sus actores electorales de cara a los comicios presidenciales de 2026.
El magistrado destacó la importancia de garantizar una participación organizada y transparente de testigos, jurados y demás actores que cumplen un papel fundamental en la vigilancia y desarrollo del proceso electoral. Read less
En el Día Mundial contra el Trabajo Infantil, el señor capitán Carlos Mosquera, jefe de la Seccional de Protección y patrimonio nacional del Departamento de Policía Amazonas, reafirmó el compromiso de la Policía Nacional con la protección integral...read more
En el Día Mundial contra el Trabajo Infantil, el señor capitán Carlos Mosquera, jefe de la Seccional de Protección y patrimonio nacional del Departamento de Policía Amazonas, reafirmó el compromiso de la Policía Nacional con la protección integral de los niños, niñas y adolescentes, e hizo un llamado a las familias y a la comunidad para unir esfuerzos en la prevención y erradicación de este flagelo.
El oficial recordó que la niñez debe crecer en entornos seguros, con acceso a la educación, el juego y oportunidades para su desarrollo integral, porque sus sueños y su futuro no deben verse limitados por el trabajo infantil.
Policía Nacional fortalece el diálogo con la comunidad en el barrio La Florida
Con el propósito de consolidar la seguridad y fortalecer la convivencia ciudadana, la Policía Nacional en el departamento del Amazonas continúa desarrollando encuentros con la comunidad, espacios que permiten escuchar de primera mano las inquietud...read more
Con el propósito de consolidar la seguridad y fortalecer la convivencia ciudadana, la Policía Nacional en el departamento del Amazonas continúa desarrollando encuentros con la comunidad, espacios que permiten escuchar de primera mano las inquietudes, necesidades y propuestas de los ciudadanos.
En esta oportunidad, la actividad se llevó a cabo en el barrio La Florida, donde se promovió el diálogo, la corresponsabilidad y el trabajo articulado entre la institución y la comunidad, con el fin de generar acciones encaminadas a la construcción de entornos más seguros y tranquilos para todos.
La jornada fue liderada por el señor teniente coronel Oswaldo Cortés, comandante operativo de Seguridad y Convivencia Ciudadana del Departamento de Policía Amazonas, quien reiteró el compromiso de la Policía Nacional de mantener una comunicación permanente con la ciudadanía y fortalecer las estrategias de prevención y participación comunitaria.
Estos encuentros ciudadanos hacen parte de las acciones institucionales orientadas a fomentar la confianza, la participación y el trabajo conjunto con la comunidad, pilares fundamentales para garantizar una convivencia armónica y una respuesta oportuna frente a las necesidades de seguridad en el territorio.
La seguridad es una construcción colectiva que requiere del compromiso y la participación activa de todos los ciudadanos. Continuaremos generando estos espacios de acercamiento para escuchar a la comunidad y trabajar unidos por un Amazonas más seguro, manifestó el teniente coronel Oswaldo Cortés, comandante operativo de Seguridad y Convivencia Ciudadana del Departamento de Policía Amazonas.
CNE capacita a testigos electorales en el exterior de cara a las elecciones del 21 de junio
Con el propósito de fortalecer las garantías del proceso electoral, el Consejo Nacional Electoral desarrolló desde Bogotá una capacitación virtual dirigida a los testigos electorales en el exterior, quienes acompañarán la jornada de votación previ...read more
Con el propósito de fortalecer las garantías del proceso electoral, el Consejo Nacional Electoral desarrolló desde Bogotá una capacitación virtual dirigida a los testigos electorales en el exterior, quienes acompañarán la jornada de votación prevista para el próximo 21 de junio.
Durante la actividad, los participantes recibieron orientación sobre las funciones y responsabilidades que deberán cumplir antes, durante y después de los comicios. Asimismo, se presentó la aplicación Comitium en Línea, plataforma que permitirá verificar y validar las credenciales de los actores electorales que han sido postulados y acreditados a través de la Plataforma Única de Actores Electorales del CNE.
La jornada hizo énfasis en la importancia de la capacitación, el uso de herramientas tecnológicas y el acompañamiento institucional para garantizar la transparencia y el adecuado desarrollo del proceso electoral tanto en Colombia como en el exterior.
Líderes comunitarios destacan trabajo articulado con la Policía Nacional en favor de la seguridad del barrio La Florida
En el espacio radial de Radio Policía Leticia 98.9 FM, la señora Cristina Gómez, presidenta de la Junta de Acción Comunal del barrio La Florida, y el señor Luis Fernández, coordinador del programa Zona Segura, compartieron con la comunidad su expe...read more
En el espacio radial de Radio Policía Leticia 98.9 FM, la señora Cristina Gómez, presidenta de la Junta de Acción Comunal del barrio La Florida, y el señor Luis Fernández, coordinador del programa Zona Segura, compartieron con la comunidad su experiencia de trabajo conjunto con la Policía Nacional, resaltando las acciones que se vienen desarrollando para fortalecer la seguridad y la convivencia ciudadana en este sector de la capital amazonense.
Durante la emisión, los líderes comunitarios destacaron la importancia de la participación ciudadana y el trabajo articulado entre las autoridades y la comunidad, como pilares fundamentales para la prevención de los diferentes factores que afectan la tranquilidad de los habitantes.
De igual manera, extendieron una invitación a todos los ciudadanos para que continúen vinculándose y participando activamente en estos espacios de diálogo y construcción colectiva, que permiten consolidar entornos más seguros y promover una cultura de corresponsabilidad en materia de seguridad y convivencia ciudadana.
La Policía Nacional reitera su compromiso de seguir fortaleciendo los canales de comunicación con la comunidad, impulsando estrategias que contribuyan al bienestar y la tranquilidad de todos los habitantes del departamento del Amazonas.
Policía Nacional brindó recomendaciones para la protección de niños, niñas y adolescentes en espacio radial
Leticia, Amazonas. La Policía Nacional, a través del Grupo de Protección a la Infancia y Adolescencia, participó en el programa Radio Policía Leticia 98.9 FM, en el espacio Conectando para Proteger, con el propósito de fortalecer la prevención y p...read more
Leticia, Amazonas. La Policía Nacional, a través del Grupo de Protección a la Infancia y Adolescencia, participó en el programa Radio Policía Leticia 98.9 FM, en el espacio Conectando para Proteger, con el propósito de fortalecer la prevención y promover el bienestar de los niños, niñas y adolescentes.
Durante la emisión, los uniformados compartieron recomendaciones dirigidas a padres de familia, cuidadores y comunidad en general, enfocadas en la protección de los derechos de la niñez, la prevención de situaciones de riesgo y el fortalecimiento de entornos seguros para su desarrollo integral.
Con estas acciones, la Policía Nacional continúa promoviendo espacios de diálogo y educación ciudadana que contribuyen a la protección integral de la infancia y la adolescencia, reafirmando su compromiso con la seguridad y el bienestar de las familias del departamento del Amazonas.
Policía Nacional destacó en espacio radial el rescate exitoso del jaguar hallado en la Universidad Nacional Sede Amazonia
Leticia, Amazonas. La Policía Nacional en el departamento del Amazonas, a través del espacio institucional Cuéntele Al Comandante, socializó con la comunidad los detalles del exitoso procedimiento de rescate y atención del jaguar que fue hallado e...read more
Leticia, Amazonas. La Policía Nacional en el departamento del Amazonas, a través del espacio institucional Cuéntele Al Comandante, socializó con la comunidad los detalles del exitoso procedimiento de rescate y atención del jaguar que fue hallado en las instalaciones de la Universidad Nacional de Colombia, Sede Amazonia.
Durante la emisión, uniformados de la Seccional de Carabineros y Protección Ambiental resaltaron el trabajo articulado desarrollado con Corpoamazonia, la Fundación Ikozoa, el Cuerpo Oficial de Bomberos, el Ejército de Brasil y biólogos de la Universidad Nacional, quienes unieron capacidades para proteger la vida del felino y garantizar la seguridad de la comunidad.
La Policía Nacional reiteró su compromiso con la conservación de la biodiversidad amazónica y la protección de la fauna silvestre, destacando la importancia del trabajo interinstitucional para atender este tipo de situaciones que contribuyen a la preservación del patrimonio natural de la región.
Con estas acciones, la Institución continúa fortaleciendo la cultura de protección ambiental y promoviendo la participación ciudadana en el cuidado de las especies silvestres que habitan el Amazonas.
Capacidades de Defensa Aérea protegen cielos del Amazonas
La Fuerza Aeroespacial Colombiana, a través del Grupo Aéreo del Amazonas, continúa fortaleciendo las capacidades de vigilancia y control del espacio aéreo en esta región estratégica del país, mediante el empleo del personal especializado de Defensa Aérea, encargado de desarrollar labores de detección, identificación y análisis del blanco aeronáutico en el área de jurisdicción del Amazonas.
La Fuerza Aeroespacial Colombiana, a través del Grupo Aéreo del Amazonas, continúa fortaleciendo las capacidades de vigilancia y control del espacio aéreo en esta región estratégica del país, mediante el empleo del personal especializado de Defens...read more
La Fuerza Aeroespacial Colombiana, a través del Grupo Aéreo del Amazonas, continúa fortaleciendo las capacidades de vigilancia y control del espacio aéreo en esta región estratégica del país, mediante el empleo del personal especializado de Defensa Aérea, encargado de desarrollar labores de detección, identificación y análisis del blanco aeronáutico en el área de jurisdicción del Amazonas.
Gracias a estas capacidades, se realiza un seguimiento permanente de la actividad aérea en el departamento del Amazonas, permitiendo la identificación oportuna de comportamientos irregulares y contribuyendo al fortalecimiento de las acciones orientadas a la protección de la soberanía y la seguridad nacional.
De manera complementaria, el personal de Defensa Aérea que integra las capacidades operacionales del Grupo Aéreo del Amazonas ha participado en actividades de control desarrolladas de manera coordinada con la Policía Nacional, fortaleciendo las acciones interinstitucionales destinadas a incrementar la verificación y supervisión de las aeronaves que operan en esta zona del país.
Asimismo, se han desarrollado jornadas de capacitación e intercambio de conocimientos con integrantes de las Fuerzas Militares, la Policía Nacional y otras instituciones con presencia en la región, con el propósito de fortalecer los procedimientos de control, mejorar la coordinación operativa y consolidar las capacidades necesarias para la vigilancia y protección del espacio aéreo.
Con estas acciones, la Fuerza Aeroespacial Colombiana reafirma su compromiso con la defensa de la soberanía nacional y la seguridad del territorio, mediante el empleo permanente de capacidades especializadas que contribuyen a mantener el control y la vigilancia de los cielos del Amazonas.