Aggiunge IMAP bounce e flag email non valide nel CRM.
Permette di leggere i bounce dalla stessa MailIdentity SMTP, aggiornare le email in anagrafica e saltare gli indirizzi invalidi nei mailing. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+78
-2
@@ -9,8 +9,9 @@ module EminuxCrmMcp
|
||||
1. list_projects per i project_code (matchlivetv, riskmeter, cardoo, …).
|
||||
2. today per capire cosa fare oggi.
|
||||
3. search / get_organization per il contesto.
|
||||
4. create_activity, complete_task, create_task, update_opportunity_stage per agire.
|
||||
4. create_activity, complete_task, create_task, update_opportunity_stage, update_organization_email, check_mail_bounces per agire.
|
||||
Non inviare mailing, non cancellare record, non gestire utenti.
|
||||
Per i bounce usa check_mail_bounces (legge IMAP dalle stesse credenziali SMTP della MailIdentity).
|
||||
TEXT
|
||||
|
||||
module_function
|
||||
@@ -50,7 +51,9 @@ module EminuxCrmMcp
|
||||
CreateTask,
|
||||
CompleteTask,
|
||||
CreateActivity,
|
||||
UpdateOpportunityStage
|
||||
UpdateOpportunityStage,
|
||||
UpdateOrganizationEmail,
|
||||
CheckMailBounces
|
||||
]
|
||||
)
|
||||
end
|
||||
@@ -254,4 +257,77 @@ module EminuxCrmMcp
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class UpdateOrganizationEmail < MCP::Tool
|
||||
description "Aggiorna l'email di un'organizzazione (e del contatto principale): marca bounce/non valida, sostituisci con un indirizzo trovato, annota in timeline."
|
||||
input_schema(
|
||||
properties: {
|
||||
project_code: { type: "string" },
|
||||
organization_id: { type: "integer" },
|
||||
email: { type: "string", description: "Nuova email (se trovata). Lascia vuoto per solo marcare non valida." },
|
||||
email_invalid: { type: "boolean", description: "true = non usare in mailing; false se hai messo un'email nuova" },
|
||||
bounced_email: { type: "string", description: "Indirizzo che ha generato il bounce" },
|
||||
bounce_reason: { type: "string" },
|
||||
contact_id: { type: "integer", description: "Contatto specifico; default = primario" },
|
||||
website: { type: "string" },
|
||||
activity_subject: { type: "string" },
|
||||
activity_description: { type: "string" }
|
||||
},
|
||||
required: %w[project_code organization_id]
|
||||
)
|
||||
|
||||
class << self
|
||||
def call(project_code:, organization_id:, email: nil, email_invalid: nil, bounced_email: nil,
|
||||
bounce_reason: nil, contact_id: nil, website: nil, activity_subject: nil,
|
||||
activity_description: nil, server_context: nil)
|
||||
attrs = {
|
||||
organization_id: organization_id,
|
||||
email: email,
|
||||
email_invalid: email_invalid,
|
||||
bounced_email: bounced_email,
|
||||
bounce_reason: bounce_reason,
|
||||
contact_id: contact_id,
|
||||
website: website,
|
||||
activity_subject: activity_subject,
|
||||
activity_description: activity_description
|
||||
}.compact
|
||||
# Permetti email: null esplicito solo se chiave presente via email=""
|
||||
attrs[:email] = email if !email.nil?
|
||||
EminuxCrmMcp.json_response(
|
||||
EminuxCrmMcp.session_from(server_context).update_organization_email(project_code, attrs)
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class CheckMailBounces < MCP::Tool
|
||||
description "Legge i bounce/DSN dalla casella IMAP dell'account email CRM (stesse credenziali SMTP della MailIdentity). Arricchisce con match alle organizzazioni del progetto."
|
||||
input_schema(
|
||||
properties: {
|
||||
project_code: { type: "string", description: "Progetto per matchare le società (es. matchlivetv)" },
|
||||
from_email: { type: "string", description: "Mittente account, es. info@matchlivetv.it (default)" },
|
||||
mail_identity_id: { type: "integer" },
|
||||
since_days: { type: "integer", description: "Giorni indietro da controllare (default 14)" },
|
||||
mailbox: { type: "string", description: "Cartella IMAP, default INBOX" },
|
||||
limit: { type: "integer", description: "Max messaggi bounce da analizzare" }
|
||||
},
|
||||
required: %w[project_code]
|
||||
)
|
||||
|
||||
class << self
|
||||
def call(project_code:, from_email: nil, mail_identity_id: nil, since_days: nil,
|
||||
mailbox: nil, limit: nil, server_context: nil)
|
||||
attrs = {
|
||||
from_email: from_email,
|
||||
mail_identity_id: mail_identity_id,
|
||||
since_days: since_days,
|
||||
mailbox: mailbox,
|
||||
limit: limit
|
||||
}.compact
|
||||
EminuxCrmMcp.json_response(
|
||||
EminuxCrmMcp.session_from(server_context).check_mail_bounces(project_code, attrs)
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user