Processes incoming emails for Unite-Hub. Extracts sender data, identifies communication intents, links to CRM contacts, analyzes sentiment, and updates contact records with AI insights.
The Email Agent is responsible for:
User says: "Process emails for Duncan's workspace" or "Analyze unprocessed emails"
Call: convex query emails.getUnprocessed({
orgId: "k57akqzf14r07d9q3pbf9kebvn7v7929",
workspaceId: "kh72b1cng9h88691sx4x7krt2h7v7dehh",
limit: 50
})
Returns array of emails not yet processed (isProcessed: false)
Step A: Extract Sender Email
From: "[email protected]"
Extract: sender_email = "[email protected]"
Step B: Link to Contact
Call: convex query contacts.getByEmail({
orgId: "k57akqzf14r07d9q3pbf9kebvn7v7929",
workspaceId: "kh72b1cng9h88691sx4x7krt2h7v7dehh",
email: "[email protected]"
})
If exists → contactId = found_contact._id
If NOT exists → Create new contact with:
Step C: Analyze Email Content
Extract these intent keywords:
Multiple intents can apply to one email.
Step D: Analyze Sentiment
Read email tone:
Classify as: positive, neutral, or negative
Step E: Generate Summary
Create 1-2 sentence summary of email intent:
Example: "John from TechStartup is inquiring about Q4 marketing services and partnership opportunities."
Step F: Mark as Processed
Call: convex mutation emails.markProcessed({ orgId: "k57akqzf14r07d9q3pbf9kebvn7v7929", emailId: "email_id_from_step_1", contactId: "contact_id_from_step_b", intents: ["inquiry", "partnership"], sentiment: "positive", summary: "John inquiring about Q4 partnership" })
Step G: Update Contact
If this is a NEW interaction, update:
Call: convex mutation contacts.updateAiScore({
orgId: "k57akqzf14r07d9q3pbf9kebvn7v7929",
contactId: "contact_id",
score: 75 // Increase score based on engagement
})
Call: convex mutation contacts.addNote({
orgId: "k57akqzf14r07d9q3pbf9kebvn7v7929",
contactId: "contact_id",
note: "Email from John: Inquiring about Q4 partnership. Sentiment: positive. Intents: inquiry, partnership"
})
Step H: Log Audit Event
Call: convex mutation system.logAudit({ orgId: "k57akqzf14r07d9q3pbf9kebvn7v7929", action: "email_processed", resource: "email", resourceId: "email_id", agent: "email-agent", details: JSON.stringify({ from: "[email protected]", intents: ["inquiry", "partnership"], sentiment: "positive", contactLinked: true }), status: "success" })
If something fails:
Call: convex mutation system.logAudit({
orgId: "k57akqzf14r07d9q3pbf9kebvn7v7929",
action: "email_processing_error",
resource: "email",
resourceId: "email_id",
agent: "email-agent",
details: JSON.stringify({ error: "error message" }),
status: "error",
errorMessage: "description"
})
Then continue to next email (don't stop).
After processing all emails, provide:
✅ Email Processing Complete
Total processed: X
Successfully linked: X
New contacts created: X
Intents extracted: X
Average sentiment: X
Contacts engaged:
- John Smith (TechStartup) - positive, inquiry
- Lisa Johnson (eCommerce) - positive, proposal
- Carlos Rodriguez (Agency) - positive, collaboration
Next steps:
1. Review high-priority contacts (positive sentiment + inquiry)
2. Generate followup emails for warm leads
3. Schedule meetings with decision-makers
orgIdInput Email:
From: [email protected]
Subject: Interested in your services
Body: Hi Duncan, we're looking to revamp our marketing strategy for Q4. Would love to chat about partnership opportunities.
Agent Process:
[email protected]["inquiry", "partnership"]"positive" (enthusiastic tone)Result: