feat: habilitar modo autonomo y optimizar consultas multimedia paralelas en webhook
This commit is contained in:
parent
f356cfbadd
commit
3c44471597
5
AGENTS.md
Normal file
5
AGENTS.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Reglas de Ejecución Autónoma para Antigravity
|
||||
|
||||
- **Autonomía Total**: Ejecuta todas las acciones, ediciones de archivos, comandos de terminal, pruebas y diagnósticos de forma proactiva e inmediata sin solicitar confirmación previa ni esperar aprobaciones intermedias.
|
||||
- **Flujo Completo**: Cuando se solicite un cambio o se reporte un problema, investiga, modifica el código, compila, prueba y entrega la solución terminada.
|
||||
- **Sin Bloqueos**: No te detengas a pedir permisos antes de ejecutar herramientas, llamadas a bases de datos o scripts de verificación.
|
||||
@ -25,7 +25,7 @@ export async function getBase64FromMediaMessage(messagePayload: any): Promise<{
|
||||
const url = `${EVOLUTION_API_URL}/chat/getBase64FromMediaMessage/${EVOLUTION_INSTANCE_NAME}`;
|
||||
const response = await axios.post(url, {
|
||||
message: messagePayload
|
||||
}, { headers, timeout: 15000 });
|
||||
}, { headers, timeout: 5000 });
|
||||
|
||||
if (response.data && response.data.base64) {
|
||||
return {
|
||||
@ -40,49 +40,63 @@ export async function getBase64FromMediaMessage(messagePayload: any): Promise<{
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches recent media messages from the same chat (within a time window) to collect multiple candidate images.
|
||||
* Fetches recent media messages from the same chat (within a strict time window) in parallel.
|
||||
*/
|
||||
export async function fetchRecentMediaFromSameChat(
|
||||
remoteJid: string,
|
||||
maxItems = 4,
|
||||
windowSeconds = 120
|
||||
maxItems = 3,
|
||||
windowSeconds = 90
|
||||
): Promise<Array<{ base64: string, mimeType: string, messageId: string }>> {
|
||||
if (!EVOLUTION_API_URL || !EVOLUTION_INSTANCE_NAME || !remoteJid) {
|
||||
return [];
|
||||
}
|
||||
|
||||
try {
|
||||
const url = `${EVOLUTION_API_URL}/chat/findMessages/${EVOLUTION_INSTANCE_NAME}?page=1&limit=8`;
|
||||
const url = `${EVOLUTION_API_URL}/chat/findMessages/${EVOLUTION_INSTANCE_NAME}?page=1&limit=5`;
|
||||
const response = await axios.post(
|
||||
url,
|
||||
{ where: { "key": { "remoteJid": remoteJid } } },
|
||||
{ headers, timeout: 8000 }
|
||||
{ headers, timeout: 3000 }
|
||||
);
|
||||
|
||||
const records = response.data?.messages?.records || [];
|
||||
const nowSec = Math.floor(Date.now() / 1000);
|
||||
|
||||
// Filter media messages sent within the time window
|
||||
// Strict check: only messages created within the last `windowSeconds` (90s)
|
||||
const mediaRecords = records.filter((r: any) => {
|
||||
const isMedia = Boolean(r.message?.imageMessage || r.message?.videoMessage);
|
||||
const isRecent = r.messageTimestamp ? (nowSec - r.messageTimestamp <= windowSeconds) : true;
|
||||
return isMedia && isRecent;
|
||||
if (!isMedia || !r.messageTimestamp) return false;
|
||||
const diff = Math.abs(nowSec - r.messageTimestamp);
|
||||
return diff <= windowSeconds;
|
||||
}).slice(0, maxItems);
|
||||
|
||||
const results: Array<{ base64: string, mimeType: string, messageId: string }> = [];
|
||||
if (mediaRecords.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
for (const record of mediaRecords) {
|
||||
// Fetch all media in parallel with Promise.allSettled
|
||||
const fetchPromises = mediaRecords.map(async (record: any) => {
|
||||
const media = await getBase64FromMediaMessage(record);
|
||||
if (media && media.base64) {
|
||||
results.push({
|
||||
return {
|
||||
base64: media.base64,
|
||||
mimeType: media.mimetype,
|
||||
messageId: record.key?.id || String(Date.now())
|
||||
});
|
||||
};
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
const results = await Promise.allSettled(fetchPromises);
|
||||
const validMedia: Array<{ base64: string, mimeType: string, messageId: string }> = [];
|
||||
|
||||
for (const res of results) {
|
||||
if (res.status === 'fulfilled' && res.value) {
|
||||
validMedia.push(res.value);
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
return validMedia;
|
||||
} catch (err: any) {
|
||||
console.warn('Could not fetch recent media from chat:', err?.message);
|
||||
return [];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user