almeira-web/setup_whatsapp.js

76 lines
3.6 KiB
JavaScript

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();