{
  "name": "Rosa IA → CRM (4 webhooks — template universel)",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "rosa-search",
        "responseMode": "lastNode",
        "responseData": "allEntries",
        "options": { "responseHeaders": { "entries": [{ "name": "Content-Type", "value": "application/json" }] } }
      },
      "id": "wh-search",
      "name": "1) Webhook SEARCH",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [240, 120],
      "webhookId": "rosa-search"
    },
    {
      "parameters": {
        "jsCode": "// SEARCH — Rosa cherche un client par téléphone AVANT de décrocher.\n//\n// Input  : { phone, professional_id }\n// Output attendu : { found: true, client: {...}, contracts?: [...], recent_interactions?: [...] }\n//          OU       { found: false }\n//\n// Branche ce node Code à ton CRM via HubSpot/Pipedrive/Sheets/etc.\n// Pour l'instant, on renvoie un faux client de démo — REMPLACE PAR LA VRAIE LOOKUP.\n\nconst phone = $input.first().json.body.phone;\n\n// TODO : remplace par un node \"HTTP Request\" qui appelle ton CRM.\n// Exemples :\n//   HubSpot   : GET /crm/v3/objects/contacts/search { properties: ['phone','email','firstname','lastname'] }\n//   Pipedrive : GET /persons/search?term=<phone>\n//   GSheets   : Lookup dans une feuille avec filter phone == <phone>\n\nreturn {\n  json: {\n    found: false,\n    _note: 'Template par défaut — branche ton CRM dans ce Code node pour activer la recherche.',\n    _received_phone: phone,\n  },\n};"
      },
      "id": "code-search",
      "name": "Search dans CRM (à compléter)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [480, 120]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "rosa-create-contact",
        "responseMode": "lastNode",
        "responseData": "allEntries",
        "options": {}
      },
      "id": "wh-create",
      "name": "2) Webhook CREATE CONTACT",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [240, 280],
      "webhookId": "rosa-create-contact"
    },
    {
      "parameters": {
        "jsCode": "// CREATE CONTACT — Rosa pousse les infos d'un PROSPECT inconnu après l'appel.\n//\n// Input :\n//   {\n//     rosa_call_id, professional_id, occurred_at,\n//     phone, name, email, address,\n//     intent, urgency, need_description, summary\n//   }\n//\n// Output : { ok: true, id: '<id_crm>' }  (Rosa stocke l'id pour update ultérieur)\n\nconst data = $input.first().json.body;\n\n// TODO : remplace par un node HTTP qui crée la fiche.\n// Exemples :\n//   HubSpot   : POST /crm/v3/objects/contacts { properties: { phone, email, firstname, lastname, ... } }\n//   Pipedrive : POST /persons { name, phone, email, ... }\n//   GSheets   : Append row\n\nreturn {\n  json: {\n    ok: true,\n    id: 'placeholder-' + (data.rosa_call_id || Date.now()),\n    _note: 'Template par défaut — branche la création de fiche dans ce Code node.',\n  },\n};"
      },
      "id": "code-create",
      "name": "Créer contact dans CRM (à compléter)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [480, 280]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "rosa-update-contact",
        "responseMode": "lastNode",
        "responseData": "allEntries",
        "options": {}
      },
      "id": "wh-update",
      "name": "3) Webhook UPDATE CONTACT",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [240, 440],
      "webhookId": "rosa-update-contact"
    },
    {
      "parameters": {
        "jsCode": "// UPDATE CONTACT — Rosa pousse les nouvelles infos d'un client connu.\n//\n// Input :\n//   {\n//     rosa_call_id, professional_id, occurred_at,\n//     phone,                       ← clé de lookup CRM\n//     new_info: { email?, address?, name?, ... }\n//   }\n//\n// Output : { ok: true }\n\nconst data = $input.first().json.body;\n\n// TODO : remplace par un node HTTP qui met à jour la fiche existante.\n// Exemples :\n//   HubSpot   : PATCH /crm/v3/objects/contacts/{id} { properties: { ...new_info } }\n//   Pipedrive : PUT /persons/{id} { ...new_info }\n//   GSheets   : Update row où phone == data.phone\n\nreturn {\n  json: {\n    ok: true,\n    _note: 'Template par défaut — branche la mise à jour dans ce Code node.',\n    _phone: data.phone,\n    _new_info: data.new_info,\n  },\n};"
      },
      "id": "code-update",
      "name": "Update contact dans CRM (à compléter)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [480, 440]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "rosa-create-note",
        "responseMode": "lastNode",
        "responseData": "allEntries",
        "options": {}
      },
      "id": "wh-note",
      "name": "4) Webhook CREATE NOTE",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [240, 600],
      "webhookId": "rosa-create-note"
    },
    {
      "parameters": {
        "jsCode": "// CREATE NOTE — Rosa pousse le résumé d'appel sur la fiche client.\n//\n// Input :\n//   {\n//     rosa_call_id, professional_id, occurred_at,\n//     phone,                       ← clé de lookup CRM (ou crm_id si tu l'as stocké)\n//     summary, intent, urgency, need_description,\n//     appointment: { date, preference_text, status },\n//     proposed_price: { min, max, currency },\n//     call: { duration_seconds, started_at, ended_at, outcome, dashboard_url },\n//     tags: { is_existing_client, has_appointment }\n//   }\n//\n// Output : { ok: true }\n//\n// Pratique : compose un texte de note humainement lisible puis\n// branche-le sur l'action \"Create Note\" de ton CRM.\n\nconst data = $input.first().json.body;\n\nconst lines = [\n  `📞 Appel Rosa — ${new Date(data.occurred_at).toLocaleString('fr-FR')}`,\n  `Durée : ${Math.round((data.call?.duration_seconds || 0) / 60)} min`,\n  ``,\n  `Demande : ${data.intent || '—'}`,\n  `Urgence : ${data.urgency || 'normal'}`,\n  ``,\n  `📝 Résumé :`,\n  data.summary || '—',\n];\nif (data.need_description) lines.push('', '🎯 Besoin précis :', data.need_description);\nif (data.appointment?.date) lines.push('', `📅 RDV : ${data.appointment.date}`);\nelse if (data.appointment?.preference_text) lines.push('', `📅 RDV souhaité : ${data.appointment.preference_text}`);\nif (data.proposed_price?.min || data.proposed_price?.max) {\n  lines.push('', `💰 Prix proposé : ${data.proposed_price.min || '?'}-${data.proposed_price.max || '?'} ${data.proposed_price.currency || 'EUR'}`);\n}\nlines.push('', `🔗 Détails : ${data.call?.dashboard_url}`);\n\nconst noteText = lines.join('\\n');\n\n// TODO : remplace par un node HTTP qui crée la note/activité.\n// Exemples :\n//   HubSpot   : POST /crm/v3/objects/notes  { properties: { hs_note_body: noteText, hs_timestamp: ... }, associations: [...] }\n//   Pipedrive : POST /notes { content: noteText, person_id: ... }\n//   GSheets   : Append row dans une feuille \"Notes\" avec le noteText\n\nreturn {\n  json: {\n    ok: true,\n    _note_text: noteText,\n    _note: 'Template par défaut — branche la création de note dans ce Code node.',\n  },\n};"
      },
      "id": "code-note",
      "name": "Créer note dans CRM (à compléter)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [480, 600]
    }
  ],
  "connections": {
    "1) Webhook SEARCH": {
      "main": [[{ "node": "Search dans CRM (à compléter)", "type": "main", "index": 0 }]]
    },
    "2) Webhook CREATE CONTACT": {
      "main": [[{ "node": "Créer contact dans CRM (à compléter)", "type": "main", "index": 0 }]]
    },
    "3) Webhook UPDATE CONTACT": {
      "main": [[{ "node": "Update contact dans CRM (à compléter)", "type": "main", "index": 0 }]]
    },
    "4) Webhook CREATE NOTE": {
      "main": [[{ "node": "Créer note dans CRM (à compléter)", "type": "main", "index": 0 }]]
    }
  },
  "settings": { "executionOrder": "v1" },
  "pinData": {},
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "rosa-ia-template-4-webhooks-v2"
  },
  "tags": [{ "name": "Rosa IA" }, { "name": "CRM v2" }]
}
