76 lines
3.6 KiB
JavaScript
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();
|