const sdk = require('node-appwrite'); const client = new sdk.Client(); const databases = new sdk.Databases(client); // Use credentials for Almeira Web Cloud (Coolify) const ENDPOINT = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1'; const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c'; const API_KEY = process.env.APPWRITE_API_KEY || 'standard_ee81a4ca6784c0fa6a23abab0a983dbba9cd0c2d8e211a00c759d9801f5d8e27b43a605bfa373e13106da87acfc7673608f0ffb0eb04e10cae3dae93d2404bfda8676f96e3fcfd6bd642f6e12d69367916b796c54e98e2e4c4bc0b7a27aa42ba5048582fcbd45b1365b51c5014cb939c1853923c418048ff0e39c2237065da3c'; client .setEndpoint(ENDPOINT) .setProject(PROJECT_ID) .setKey(API_KEY); const delay = ms => new Promise(res => setTimeout(res, ms)); const dbId = 'almeira'; const collectionId = 'whatsapp_messages'; async function setupWhatsApp() { try { console.log('========================================'); console.log('Almeira Web — Appwrite Messaging Setup'); console.log('========================================\n'); console.log('[1/2] Creando colección: whatsapp_messages...'); try { // Permisos de lectura públicos: SOLO para mensajes aprobados (se gestionará mediante queries o permisos más adelante) // Por ahora, solo permitimos lectura por el rol 'any' para simular real-time en el dashboard (se puede restringir a usuarios autenticados después) await databases.createCollection(dbId, collectionId, 'Mensajes WhatsApp (Evolution API)', [ sdk.Permission.read(sdk.Role.any()), // Permitido lectura para el locutor y realtime (para simplicidad de demo) sdk.Permission.write(sdk.Role.any()) // El webhook usará Client Admin con API_KEY, pero dejamos esto base ], false); console.log(' ✓ Colección creada.'); } catch(e){ console.log(' > Colección ya existe.'); } await delay(1000); console.log('[2/2] Configurando atributos...'); const attributes = [ { name: 'sender_name', type: 'string', size: 255, required: true }, { name: 'phone_number', type: 'string', size: 50, required: true }, { name: 'content', type: 'string', size: 5000, required: true }, { name: 'timestamp', type: 'datetime', required: true }, { name: 'status', type: 'string', size: 50, required: true, default: 'pending' }, { name: 'platform', type: 'string', size: 50, required: true, default: 'whatsapp' }, { name: 'avatar', type: 'string', size: 1000, required: false } ]; for (const attr of attributes) { try { if (attr.type === 'string') { await databases.createStringAttribute(dbId, collectionId, attr.name, attr.size, attr.required, attr.default); } else if (attr.type === 'datetime') { await databases.createDatetimeAttribute(dbId, collectionId, attr.name, attr.required); } console.log(` ✓ Atributo ${attr.name} creado.`); await delay(500); } catch (e) { console.log(` > Atributo ${attr.name} ya existe.`); } } console.log('\n========================================'); console.log('✅ Base de Datos para WhatsApp LISTA!'); console.log('========================================'); } catch(e) { console.error('\n❌ Error setups:', e.message); } } setupWhatsApp();