WeLe Agentic AI: LangGraph multi-agent CRM assistant with voice

This commit is contained in:
2026-08-28 02:16:03 +05:30
commit 105e58e02a
69 changed files with 11501 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
/* Shape of the acquisition collections, so the tools match reality. */
import mongoose from 'mongoose';
import { connectMongo } from '../src/data/mongo.js';
await connectMongo();
const db = mongoose.connection.db;
async function probe(name, { distinct = [], dateField } = {}) {
const col = db.collection(name);
const n = await col.estimatedDocumentCount();
console.log(`\n${'='.repeat(60)}\n${name} — ${n} docs`);
const doc = await col.findOne({}, { sort: { _id: -1 } });
if (!doc) return;
console.log('newest doc:');
for (const [k, v] of Object.entries(doc)) {
if (k === '__v') continue;
const s = v == null ? 'null' : typeof v === 'object' ? JSON.stringify(v).slice(0, 90) : String(v).slice(0, 90);
console.log(` ${k.padEnd(20)} ${s}`);
}
for (const f of distinct) {
const vals = await col.aggregate([
{ $group: { _id: `$${f}`, n: { $sum: 1 } } },
{ $sort: { n: -1 } }, { $limit: 8 },
]).toArray();
console.log(` ${f}: ` + vals.map((v) => `${v._id}=${v.n}`).join(' '));
}
if (dateField) {
const [first] = await col.find({}, { sort: { [dateField]: 1 }, limit: 1, projection: { [dateField]: 1 } }).toArray();
const [last] = await col.find({}, { sort: { [dateField]: -1 }, limit: 1, projection: { [dateField]: 1 } }).toArray();
console.log(` ${dateField}: ${first?.[dateField]} → ${last?.[dateField]}`);
}
}
await probe('capievents', { distinct: ['status', 'event_name', 'stage'], dateField: 'createdAt' });
await probe('instaadleads', { distinct: ['platform', 'campaign_name', 'is_organic'], dateField: 'created_time' });
await probe('commentleads', { distinct: ['source'], dateField: 'createdAt' });
await probe('whatsapptemplleads', { distinct: ['button_text'], dateField: 'createdAt' });
// CAPI failures are the whole point — what do they look like?
const errs = await db.collection('capievents').aggregate([
{ $match: { status: { $ne: 'success' } } },
{ $group: { _id: { status: '$status', error: '$error' }, n: { $sum: 1 } } },
{ $sort: { n: -1 } }, { $limit: 6 },
]).toArray();
console.log('\nCAPI non-success breakdown:');
for (const e of errs) console.log(` ${e.n.toString().padStart(5)} status=${e._id.status} error=${String(e._id.error).slice(0, 80)}`);
process.exit(0);