Pràctica 4: Integració de Serveis
Objectiu
Crear un sistema d'automatització complet que integri serveis reals (Gmail, APIs externes, Google Sheets) demostrant el domini dels quatre blocs del curs.
Enunciat
Crea un sistema de gestió d'incidències automatitzat amb n8n. El sistema ha de tenir dues parts:
Part A: Recepció d'incidències via Webhook
Crea un workflow P4A - Recepció Incidències [nom] que:
- Rebi incidències via webhook (POST
/webhook/incidències) - Validi les dades rebudes:
- Camps obligatoris:
títol,severitat(baixa/mitjana/alta),reporter_email - Si falten camps: respon
400 Bad Requestamb missatge d'error - Generi un ID únic per a cada incidència (
INC-YYYY-NNNNN) - Classifiqui per severitat:
- Alta: envia correu urgent al reporter i notifica a Google Chat
- Mitjana: envia correu de confirmació al reporter
- Baixa: només registra (sense notificació immediata)
- Registri totes les incidències a un Google Sheet amb:
- ID, títol, severitat, reporter_email, data/hora, estat (obert)
- Respongui
201 Createdamb les dades de la incidència creada
flowchart TD
A[POST /webhook/incidencies] --> B{Validar\ndades}
B -->|Invalid| ERR[Respond 400\nmissatge error]
B -->|Valid| C[Code\nGenerar ID]
C --> D{Switch\nseveritat}
D -->|Alta| E[Gmail\nCorreu urgent] --> H[Google Chat\nNotificacio]
D -->|Mitjana| F[Gmail\nCorreu confirmacio]
D -->|Baixa| G[Set\nnomes registre]
E --> I[Merge]
F --> I
G --> I
H --> I
I --> J[Google Sheets\nRegistrar incidencia]
J --> K[Respond 201\nJSON incidencia]
Part B: Informe setmanal automatitzat
Crea un workflow P4B - Informe Setmanal [nom] que:
- S'executi cada dilluns a les 9:00
- Llegeixi totes les incidències del Google Sheet
- Calculi estadistiques de la setmana anterior:
- Total d'incidències
- Per severitat (baixa, mitjana, alta)
- Temps mitjà de resolució (si tens el camp "data_tancament")
- Enviï un correu amb el resum setmanal en format HTML
- Notifiqui a Google Chat amb un resum breu
Específicacions tecniques
Estructura del Google Sheet
Crea un Google Sheet amb el nom Incidències n8n [el-teu-nom] amb les columnes:
| ID | Títol | Severitat | Reporter | Data creació | Data tancament | Estat |
|---|---|---|---|---|---|---|
Format de les peticions al webhook
{
"titol": "Servidor de produccio no respon",
"severitat": "alta",
"reporter_email": "alumne@example.com",
"descripcio": "El servidor web porta 10 minuts sense respondre"
}
Format del correu de notificació per alta severitat
Assumpte: [URGENT] Nova incidencia: INC-2025-00001 - Servidor de produccio no respon
Benvolgut/da,
S'ha obert una nova incidencia de severitat ALTA:
ID: INC-2025-00001
Titol: Servidor de produccio no respon
Reporter: alumne@example.com
Data/Hora: 15/01/2025 09:35:00
Descripció: El servidor web porta 10 minuts sense respondre
Si us plau, actua amb urgencia.
Proves que has de realitzar
Documenta la prova de cadascuna d'aquestes peticions:
# Incidencia d'alta severitat
curl -X POST http://localhost:5678/webhook/incidencies \
-H "Content-Type: application/json" \
-d '{"titol":"Fallada servidor","severitat":"alta","reporter_email":"tu@example.com"}'
# Incidencia de severitat baixa
curl -X POST http://localhost:5678/webhook/incidencies \
-H "Content-Type: application/json" \
-d '{"titol":"Slow query a BD","severitat":"baixa","reporter_email":"tu@example.com"}'
# Peticio invalida (sense camp obligatori)
curl -X POST http://localhost:5678/webhook/incidencies \
-H "Content-Type: application/json" \
-d '{"titol":"Test sense email"}'
Lliurament
Lliura al campus virtual:
- Fitxers JSON dels dos workflows exportats
- Captures de pantalla dels dos workflows (canvas complet)
- Captures de les execucions de les tres proves (alta, baixa, invàlida)
- Captura del Google Sheet amb almenys 3 incidències registrades
- Captura del correu rebut per a la incidència d'alta severitat
- (Opcional) Captura de la notificació a Google Chat
- Document de reflexió (max 2 pàgines):
- Descripció de les decisions de disseny
- Dificultats trobades i com les has resolt
- Que afegiries per fer el sistema més robust
- Que has après durant el curs
Rúbrica d'avaluació PRN8N04
| Criteri | Insuficient (0-4) | Suficient (5-6) | Notable (7-8) | Excel·lent (9-10) |
|---|---|---|---|---|
| Webhook funcional | No respon | Respon però sense validació | Respon amb validació bàsica | Validació completa i resposta estructurada |
| generació de ID | Absent | Format incorrecte | Format correcte | Format correcte i únic |
| Classificació severitat | Absent o incorrecta | 1-2 branques | Totes les branques | Totes les branques amb contingut personalitzat |
| Integració Gmail | Absent | Envia correus sense format | Correus amb contingut correcte | Correus amb HTML i camp personalitzat |
| Google Sheets | Absent | Registra però sense tots els camps | Tots els camps | Tots els camps i formatat |
| Informe setmanal | Absent | Executa sense errors | Càlculs correctes | Càlculs correctes, bon format i notificació |
| documentació | Absent | Molt breu | Adequada | Detallada amb reflexió crítica |
Consell per a l'excel·lència
Per anar més enllà, afegeix un sistema de tancament d'incidències: un segon webhook (POST /webhook/incidències/{id}/tancar) que actualitzi l'estat i la data de tancament al Google Sheet.