# AgileServices — Istruzioni Operative per Progetti Integrati > **Questo file deve essere copiato nella root di ogni progetto che usa AgileServices.** > Serve a Claude (e al team) per capire immediatamente come integrare e ampliare la piattaforma. > > Agile Technology SRL — Versione 1.1 — 2026-02-17 --- ## 1. Cos'è AgileServices AgileServices è la piattaforma di **microservizi condivisi e riutilizzabili** di Agile Technology SRL. Tutti i progetti interni (CertiSource Pro, MadeByCloud Pro, TRPG Pro, ecc.) usano questi servizi come building blocks. **Non duplicare mai** funzionalità già esistenti — cerca prima in AgileServices. ``` Percorso sorgente: /projects/agile-services/ Registry servizi: /projects/agile-services/SERVICES.md Stato progetto: /projects/agile-services/progetto.md Questo file: /projects/agile-services/agile-services-istructio.md ``` --- ## 2. Regola Fondamentale ``` PRIMA di costruire qualcosa → leggi SERVICES.md SE esiste già → usalo con l'API key del tuo tenant SE non esiste → crealo in /projects/agile-services/ e documentalo in SERVICES.md MAI creare codice duplicato in un progetto specifico ``` --- ## 3. Prerequisito: Avviare l'Infrastruttura **OBBLIGATORIO** — senza questo nessun microservizio funziona. ```bash cd /projects/agile-services/infrastructure/docker-compose docker-compose up -d ``` Questo avvia (una volta sola, poi rimane attivo): | Container | Host:Porta | Credenziali | |-----------|-----------|------------| | `agile-mysql` | `localhost:3306` | root / AgileRoot2026! | | `agile-postgres` | `localhost:5433` | agile / AgilePostgres2026! | | `agile-redis` | `localhost:6379` | pass: AgileRedis2026! | | `agile-rabbitmq` | `localhost:5672` | agile / AgileQueue2026! | | `agile-rabbitmq` UI | `localhost:15672` | agile / AgileQueue2026! | | `agile-kong` proxy | `localhost:8000` | — | | `agile-kong` admin | `localhost:8001` | — | | `agile-grafana` | `localhost:3000` | admin / AgileGrafana2026! | | `agile-mailpit` | `localhost:8025` | — | ### Network Docker Tutti i microservizi condividono la rete `agile-services-network`. Nel `docker-compose.yml` di ogni MS dichiarare sempre: ```yaml networks: agile-services-network: external: true name: agile-services-network ``` --- ## 4. Tenant del Progetto Corrente Ogni progetto ha un **tenant dedicato** con la propria API key. ### Tenant pre-registrati (dev) | Progetto | Tenant Code | API Key dev | |---------|------------|-------------| | CertiSource Pro | `certisource` | `certisource_ak_dev_1234567890abcdef` | | MadeByCloud Pro | `madebycloud` | `madebycloud_ak_dev_abcdef1234567890` | | TRPG Pro | `trpg` | `trpg_ak_dev_trpg1234567890abcd` | ### Creare un nuovo tenant ```bash # Richiede infrastruttura attiva (agile-mysql deve girare) cd /projects/agile-services ./scripts/create-tenant.sh # → inserire: tenant code, nome, piano, modalità database # → output: API key da salvare nel .env del progetto ``` ### Variabili d'ambiente nel progetto ```env # AgileServices — aggiungere nel .env del progetto AGILE_TENANT_CODE=trpg AGILE_API_KEY=trpg_ak_dev_trpg1234567890abcd # URL microservizi usati da questo progetto (solo quelli necessari) VAULT_MS_URL=http://localhost:8001 PAYMENT_MS_URL=http://localhost:8003 CONTENT_GENERATION_MS_URL=http://localhost:4001 EMAIL_AUTOMATION_MS_URL=http://localhost:4004 ANALYTICS_MS_URL=http://localhost:4005 ``` --- ## 5. Microservizi Disponibili ### 5.1 Core Services (PHP — MySQL — porte 8001-8011) #### `vault-ms` — ✅ Pronto — porta 8001 Gestione credenziali criptate AES-256-GCM. Usa questo per salvare API key di provider esterni, password, token. **Non mettere mai segreti nel `.env` applicativo.** ```bash # Avvia cd /projects/agile-services/vault-ms && docker-compose up -d # Crea credenziale curl -X POST http://localhost:8001/v1/credentials \ -H "X-API-Key: trpg_ak_dev_trpg1234567890abcd" \ -H "Content-Type: application/json" \ -d '{"provider": "stripe", "key": "secret_key", "value": "sk_test_..."}' # Leggi credenziale curl http://localhost:8001/v1/credentials?provider=stripe \ -H "X-API-Key: trpg_ak_dev_trpg1234567890abcd" ``` #### `payment-ms` — 🔄 In Dev — porta 8003 Gateway pagamenti (Revolut). Usa vault-ms per le credenziali del provider. ```bash cd /projects/agile-services/payment-ms && docker-compose up -d ``` #### Altri core services — 📋 Planned `document-ms` (8002), `certificate-ms` (8004), `subscription-ms` (8005), `billing-ms` (8006), `practice-ms` (8007), `company-ms` (8008), `supplier-ms` (8009), `investigation-ms` (8010), `whatsapp-ms` (8011) --- ### 5.2 Marketing Services (Node.js — PostgreSQL — porte 4001-4006) #### `content-generation-ms` — 🔄 In Dev — porta 4001 Generazione contenuti AI con GPT-4. Supporta brand voice multipli e template. ```bash cd /projects/agile-services/content-generation-ms && docker-compose up -d # Genera contenuto curl -X POST http://localhost:4001/generate \ -H "Content-Type: application/json" \ -d '{ "brandVoice": "trpg", "template": "email", "input": {"topic": "Nuova campagna TRPG", "painPoint": "sessioni difficili da organizzare"}, "count": 3, "language": "it" }' # Crea brand voice curl -X POST http://localhost:4001/brand-voices \ -H "Content-Type: application/json" \ -d '{"name": "TRPG Pro", "industry": "gaming", "tone": ["professionale", "appassionato"]}' ``` #### `ads-orchestrator-ms` — 🔄 In Dev — porta 4002 Gestione campagne ads multi-canale (Meta, Google, LinkedIn). ```bash cd /projects/agile-services/ads-orchestrator-ms && docker-compose up -d # Crea campagna curl -X POST http://localhost:4002/campaigns \ -H "Content-Type: application/json" \ -d '{ "productId": "trpg-pro", "name": "Lancio Winter Campaign", "platform": "meta", "objective": "conversion", "budget": {"total": 500, "daily": 50}, "targeting": {"locations": ["IT"], "ageRange": [25, 45]} }' # Performance campagna curl http://localhost:4002/campaigns/1/performance ``` #### `crm-pipeline-ms` — 🔄 In Dev — porta 4003 CRM lead pipeline interno. Sostituisce SuperAGI. ```bash cd /projects/agile-services/crm-pipeline-ms && docker-compose up -d # Crea lead curl -X POST http://localhost:4003/leads \ -H "Content-Type: application/json" \ -d '{"email": "user@example.com", "firstName": "Mario", "source": "meta_ads", "productId": "trpg-pro"}' # Pipeline overview curl http://localhost:4003/pipelines/trpg-pro ``` #### `email-automation-ms` — 🔄 In Dev — porta 4004 Sequenze email automatiche con Handlebars templates e trigger-based enrollment. ```bash cd /projects/agile-services/email-automation-ms && docker-compose up -d # Crea sequenza onboarding curl -X POST http://localhost:4004/sequences \ -H "Content-Type: application/json" \ -d '{ "name": "Onboarding TRPG Pro", "productId": "trpg-pro", "trigger": "registration", "emails": [ {"delay": 0, "subject": "Benvenuto in TRPG Pro!", "body": "

Ciao {{firstName}}!

"}, {"delay": 3, "subject": "Come iniziare la tua prima campagna", "body": "..."} ] }' # Trigger sequenza per un lead curl -X POST http://localhost:4004/sequences/1/trigger \ -H "Content-Type: application/json" \ -d '{"leadId": "lead_123", "customData": {"firstName": "Mario"}}' # Stats sequenza curl http://localhost:4004/sequences/1/stats ``` #### `analytics-ms` — 🔄 In Dev — porta 4005 Dashboard metriche multi-prodotto con alerting e report automatici. ```bash cd /projects/agile-services/analytics-ms && docker-compose up -d # Traccia metrica curl -X POST http://localhost:4005/metrics/track \ -H "Content-Type: application/json" \ -d '{"tenantCode": "trpg", "productId": "trpg-pro", "metric": "new_registration", "value": 1}' # Dashboard overview curl http://localhost:4005/dashboard/overview # Dashboard prodotto curl http://localhost:4005/dashboard/product/trpg-pro # Configura alert curl -X POST http://localhost:4005/alerts/configure \ -H "Content-Type: application/json" \ -d '{"tenantCode": "trpg", "metric": "churn_rate", "operator": "gt", "threshold": 5}' ``` #### `ai-sdr-ms` — 🔄 In Dev — porta 4006 Outbound automation AI-powered per prospecting e outreach personalizzato. ```bash cd /projects/agile-services/ai-sdr-ms && docker-compose up -d # Crea campagna outbound curl -X POST http://localhost:4006/campaigns/outbound \ -H "Content-Type: application/json" \ -d '{ "name": "Outreach Q1 2026", "productId": "trpg-pro", "icp": {"roles": ["Game Master", "Dungeon Master"], "locations": ["IT"]}, "prospectCount": 200, "outreachMethod": "email", "messageTemplate": "Ciao {{firstName}}, gestisci sessioni TRPG?", "schedule": {"dailyLimit": 30, "timezone": "Europe/Rome"} }' # Prospect qualificati curl http://localhost:4006/prospects/qualified?productId=trpg-pro ``` --- ## 6. Autenticazione I **Core Services (PHP)** richiedono autenticazione su ogni chiamata: ```http X-API-Key: Content-Type: application/json ``` I **Marketing Services (Node.js)** sono in sviluppo — l'autenticazione `X-API-Key` verrà aggiunta. Attualmente accettano chiamate senza auth ma isolano i dati tramite `tenant_code` nel body/query. --- ## 7. Avviare Tutti i Microservizi ```bash # 1. Infrastruttura (OBBLIGATORIO per primo) cd /projects/agile-services/infrastructure/docker-compose && docker-compose up -d # 2. Core Services PHP cd /projects/agile-services/vault-ms && docker-compose up -d cd /projects/agile-services/payment-ms && docker-compose up -d # 3. Marketing Services Node.js cd /projects/agile-services/content-generation-ms && docker-compose up -d cd /projects/agile-services/ads-orchestrator-ms && docker-compose up -d cd /projects/agile-services/crm-pipeline-ms && docker-compose up -d cd /projects/agile-services/email-automation-ms && docker-compose up -d cd /projects/agile-services/analytics-ms && docker-compose up -d cd /projects/agile-services/ai-sdr-ms && docker-compose up -d # Verifica health curl http://localhost:8001/health # vault-ms curl http://localhost:4001/health # content-generation-ms curl http://localhost:4004/health # email-automation-ms curl http://localhost:4005/health # analytics-ms ``` --- ## 8. Creare un Nuovo Microservizio Specifico Se la funzionalità necessaria **non esiste** in AgileServices (verifica su `SERVICES.md`): ```bash cd /projects/agile-services ./scripts/create-microservice.sh --name="trpg-character-ms" --port=4200 ``` ### Convenzioni obbligatorie | Aspetto | Regola | Esempio | |---------|--------|---------| | Nome | `kebab-case` + suffisso `-ms` | `trpg-character-ms` | | Porta | 4200+ per servizi custom | 4200, 4201, ... | | Endpoint | `/kebab-case` | `/character-sheets` | | Env var | `UPPER_SNAKE_CASE` | `CHARACTER_MS_URL` | | Database | 1 DB per servizio | `trpg_character_db` | | Health | `GET /health` obbligatorio | vedi sotto | | Errori | formato standard | vedi sotto | | Test | coverage >= 70% | `npm test` | ```json // GET /health — risposta standard obbligatoria { "status": "ok", "service": "trpg-character-ms", "version": "1.0.0", "uptime": 12345, "dependencies": { "database": "ok" } } // Errore standard obbligatorio { "success": false, "error": { "code": "NOT_FOUND", "message": "Personaggio non trovato" } } ``` ### docker-compose.yml del nuovo servizio ```yaml version: '3.8' services: trpg-character-ms: build: . container_name: trpg-character-ms ports: - "4200:4200" environment: PORT: 4200 DB_HOST: agile-postgres DB_PORT: 5432 DB_NAME: trpg_character_db DB_USER: agile DB_PASSWORD: AgilePostgres2026! networks: - agile-services-network restart: unless-stopped networks: agile-services-network: external: true name: agile-services-network ``` ### Dopo aver creato il servizio — obbligatorio 1. Aggiungere riga in `/projects/agile-services/SERVICES.md` 2. Aggiungere `CREATE DATABASE trpg_character_db;` in `init-postgres.sql` 3. Creare `README.md` con documentazione API 4. Aggiornare `/projects/agile-services/progetto.md` --- ## 9. Strategia Database Multi-Tenant | Modalità | Usare quando | Isolamento | |---------|-------------|-----------| | **Shared** | Startup, tenant piccoli | `tenant_code` column in ogni tabella | | **Dedicated** | Enterprise, compliance | DB separato per tenant | | **Hybrid** | Mix di piani | Shared per small, dedicated per enterprise | La modalità viene scelta al setup del tenant tramite `create-tenant.sh`. --- ## 10. Comandi Claude Code ``` //ms-list Lista tutti i microservizi con status //ms-status Health check di tutti i microservizi in esecuzione //ms-create Wizard per creare un nuovo microservizio //tenant-create Crea un nuovo tenant (con pre-flight checks) //wizard Wizard configurazione microservizio specifico ``` --- ## 11. Checklist Integrazione Nuovo Progetto - [ ] Infrastruttura avviata (`docker-compose up -d` nella cartella infra) - [ ] Tenant creato con `create-tenant.sh` — registrato nel DB, non solo in JSON - [ ] API key salvata nel `.env` del progetto - [ ] Letti `SERVICES.md` e `progetto.md` per capire cosa esiste già - [ ] Microservizi necessari avviati (ognuno nella propria cartella) - [ ] Eventuali nuovi MS creati con porte 4200+ - [ ] Nuovi MS documentati in `SERVICES.md` e `progetto.md` - [ ] Credenziali sensibili salvate in `vault-ms`, non in `.env` - [ ] `GET /health` implementato su ogni nuovo servizio - [ ] Test coverage >= 70% --- ## 12. Riferimenti Rapidi | Documento | Percorso | |-----------|---------| | Registry completo servizi | `/projects/agile-services/SERVICES.md` | | Stato progetto e decisioni | `/projects/agile-services/progetto.md` | | Infrastructure docker-compose | `/projects/agile-services/infrastructure/docker-compose/` | | Init MySQL (tenant + core DB) | `infrastructure/docker-compose/init-databases.sql` | | Init PostgreSQL (marketing DB) | `infrastructure/docker-compose/init-postgres.sql` | | Script crea tenant | `/projects/agile-services/scripts/create-tenant.sh` | | Script crea microservizio | `/projects/agile-services/scripts/create-microservice.sh` | **Supporto**: dev@agile.software | Slack: #agile-services --- *Agile Technology SRL — © 2026 — Tutti i diritti riservati* *Versione 1.1 — Aggiornato: 2026-02-17*