# prescriptio_linkedin_dm_save

Enregistre un message redige pour un prospect, sur l'un des DEUX canaux (offre payante). channel:"linkedin" (defaut) = message prive, repris cote extension quand vous revenez sur le profil. channel:"email" + to_email = courriel : Prescriptio n'envoie RIEN, il garde la trace de la touche pour que le suivi et les relances restent justes — l'envoi se fait depuis la messagerie de l'utilisateur. A appeler apres avoir recupere le contexte via prescriptio_linkedin_dm. Idempotent PAR CANAL : re-enregistrer pour le meme prospect_id et le meme canal met a jour le brouillon au lieu de le dupliquer, et un brouillon e-mail n'ecrase jamais un brouillon LinkedIn. Requiert un compte connecte (pas d'ecriture service-a-service). Champs requis : prospect_id (UUID), draft_content.

État : implémenté ; distribution : historique uniquement ; offre payante : true ; effets : lecture et écriture possibles.

## Entrée MCP

```json
{
  "properties": {
    "channel": {
      "description": "Canal de la touche : linkedin (defaut) pour un message prive, email pour un courriel. Le canal email exige to_email. Les deux canaux alimentent la MEME file de suivi : un prospect deja touche par email ne ressort pas comme « a contacter » cote DM.",
      "enum": [
        "linkedin",
        "email"
      ],
      "type": "string"
    },
    "draft_content": {
      "description": "Le message redige. Texte brut, sans mise en forme. 8000 caracteres maximum sur le canal linkedin (limite du message prive), 20000 sur le canal email.",
      "maxLength": 20000,
      "minLength": 20,
      "type": "string"
    },
    "generation_model": {
      "description": "Modele ayant redige le message (tracabilite).",
      "maxLength": 64,
      "type": "string"
    },
    "intent": {
      "description": "Intention : mise en relation, information, partenariat, recrutement...",
      "maxLength": 64,
      "type": "string"
    },
    "prospect_id": {
      "description": "UUID du prospect destinataire. Alias accepte : contact_id.",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "type": "string"
    },
    "to_email": {
      "description": "Adresse du destinataire. OBLIGATOIRE si channel vaut email, a ne pas fournir autrement. Prescriptio n'envoie aucun courriel : il enregistre la touche, l'envoi se fait depuis la messagerie de l'utilisateur.",
      "maxLength": 320,
      "type": "string"
    },
    "tone": {
      "description": "Ton : professionnel, chaleureux, direct, formel.",
      "maxLength": 64,
      "type": "string"
    }
  },
  "required": [
    "prospect_id",
    "draft_content"
  ],
  "type": "object"
}
```

## Sortie MCP

```json
{
  "properties": {
    "action": {
      "type": "string"
    },
    "download_url": {
      "type": [
        "string",
        "null"
      ]
    },
    "fields": {
      "type": "object"
    },
    "files": {
      "items": {
        "type": "object"
      },
      "type": "array"
    },
    "ok": {
      "type": "boolean"
    },
    "page": {
      "type": [
        "integer",
        "null"
      ]
    },
    "pages_total": {
      "type": [
        "integer",
        "null"
      ]
    },
    "quota": {
      "type": "object"
    },
    "texte": {
      "description": "Contenu textuel (pièce de DCE, PV…).",
      "type": "string"
    }
  },
  "type": "object"
}
```

[Contrats externes et limites](/docs/reference/concepts.md).
