# Démarrage rapide

De zéro à un premier vrai appel en quelques minutes : un compte, une clé, une requête.

## 1. Créer un compte et une clé API

1. Crée ton compte sur `/app/` (e-mail, mot de passe, numéro de mobile) et vérifie ton numéro par SMS. **5 minutes
   d'appel sont offertes** à ce moment-là, sans carte (voir [Offres et limites](offres.md#essai-de-5-minutes)).
2. Ouvre **Clés API** et crée une clé. Elle commence par `tel_` et n'est affichée qu'une fois : garde-la comme un mot
   de passe, dans une variable d'environnement.

Tu utilises Claude, ChatGPT, Cursor, n8n ou Hermes ? Suis plutôt le guide de ton outil : [Claude](guide-claude.md),
[ChatGPT](guide-chatgpt.md), [Cursor](guide-cursor.md), [n8n](guide-n8n.md), [Hermes](guide-hermes.md).

```bash
export TEL_API=https://api.dialyne.com
export TEL_KEY=tel_xxx
curl -s $TEL_API/v1/account -H "Authorization: Bearer $TEL_KEY"
```

La réponse donne ton solde (`credits`, 100 crédits = 0,20 € en Particulier), ton `offre`, ses `limites`, ton `usage`
du moment et l'état de ton `essai`.

## 2. Passer un appel

### Mission en texte libre (curl)
```bash
curl -s -X POST $TEL_API/v1/missions \
  -H "Authorization: Bearer $TEL_KEY" -H "Content-Type: application/json" \
  -d '{
    "numero": "+33142000000",
    "mission": "Réserve une table pour 4 vendredi à 20 h au nom de Moha, sinon 20 h 30. Terrasse si possible.",
    "webhook_url": "https://ton-serveur.fr/hooks/telephone"
  }'
```

Réponse `201` :
```json
{"id": "mis_3f2a9c0d1b7e4a55", "statut": "en_cours", "tentatives": 1, "credits_reserves": 1000,
 "resultat": null, "resume": "", "numero": "+33142000000", "voix": "1", "planifiee_le": null,
 "question": null, "duree_facturee_s": 0, "attente_s": 0, "transcription": [], "cree_le": "2026-10-19T08:00:00Z"}
```

### Mission structurée
Plus fiable : tu dis ce que l'agent doit obtenir, ce qu'il peut dire et ce qu'il ne doit jamais faire.
```json
{
  "numero": "+33142000000",
  "mission": {
    "objectif": "Réserver une table pour 4 personnes vendredi 20 h (sinon 20 h 30)",
    "client": "Moha K",
    "faits": ["Nom de la réservation : Moha K", "Téléphone de rappel : 06 12 34 56 78"],
    "limites": ["Ne pas verser d'acompte", "Ne pas accepter après 21 h"]
  },
  "voix": "1"
}
```

### Options
| Champ | Rôle |
|---|---|
| `voix` | `1` à `5` : toutes les voix sont disponibles dans toutes les offres (`GET /v1/voix`) |
| `langue` | `fr` (défaut), `en` (appel en anglais), `auto` (commence en français, passe en anglais si besoin) |
| `webhook_url` | HTTPS public ; reçoit les événements (voir [Webhooks](webhooks.md)) |
| `quand` | ISO 8601 avec fuseau, ex. `2026-10-20T14:30:00+02:00` : lancer au plus tôt à cette date |
| `annonce_ia` | `standard` (défaut, recommandé) ou `interlocuteur_deja_informe` : retire la mention IA de l'accroche, seulement si la personne appelée sait déjà qu'une IA l'appelle ; exige `annonce_ia_confirmation` (journalisé). Impossible pendant l'essai |
| `planifier`, `hors_horaires` | Obsolètes depuis le 03/11/2026, acceptés et ignorés : aucune plage horaire n'est imposée |

### Python
```python
import os, time, httpx

c = httpx.Client(base_url=os.environ["TEL_API"],
                 headers={"Authorization": f"Bearer {os.environ['TEL_KEY']}"}, timeout=30)

m = c.post("/v1/missions", json={
    "numero": "+33142000000",
    "mission": "Demande les horaires d'ouverture de samedi et s'il faut réserver.",
}).raise_for_status().json()

while True:
    s = c.get(f"/v1/missions/{m['id']}").json()
    q = s["question"]
    if q and not q.get("apres_appel"):     # l'agent a besoin de toi, maintenant (q["seconds_left"] secondes)
        c.post(f"/v1/missions/{m['id']}/answer", json={"reponse": "Oui, réserve pour 2.", "question_id": q["id"]})
    if s["statut"] in ("terminee", "annulee", "erreur"):
        break
    time.sleep(2)

print(s["resultat"], "-", s["resume"])
print(f"{s['duree_facturee_s']} s facturées")
```
En production, préfère les webhooks au sondage.

Limites à connaître : en Particulier, 1 appel à la fois et 20 par 24 h glissantes (429 au-delà, avec `Retry-After`).
Détail : [Offres et limites](offres.md).

## 3. Suivre l'appel
```bash
curl -s $TEL_API/v1/missions/mis_3f2a9c0d1b7e4a55 -H "Authorization: Bearer $TEL_KEY"
```
- `statut` : `planifiee` → `en_cours` → `terminee` | `annulee` | `erreur`.
- `resultat` (quand l'appel est fini) : `reussi`, `echec`, `repondeur`, `pas_de_reponse`, `occupe`, `rappel_demande`.
- `resume` : une ou deux phrases sur ce qui a été obtenu ; `transcription` : `[{role, texte, t}]`.
- En direct, phrase par phrase : `GET /v1/missions/{id}/direct?apres=<dernier id>` ou le flux SSE `/direct/flux`.

Occupé, pas de réponse ou rappel souhaité par l'interlocuteur : l'appel n'est pas relancé tout seul aujourd'hui. Tu
reçois `appel.rappel_suggere` et tu relances d'un clic avec `POST /v1/missions/{id}/rappeler` (voir
[Toutes les routes](reference.md#horaires-et-relances)).

## 4. Répondre à une question en cours d'appel
Quand l'interlocuteur demande une information absente de la mission, l'agent dit « un instant, je vérifie » et te pose
la question : webhook `appel.question` et champ `question` dans le statut, avec son échéance (`expires_at`,
`seconds_left`). **Tu as 45 secondes.**

```bash
curl -s -X POST $TEL_API/v1/missions/mis_3f2a9c0d1b7e4a55/answer \
  -H "Authorization: Bearer $TEL_KEY" -H "Content-Type: application/json" \
  -d '{"reponse": "20 h 30 convient, en salle si pas de terrasse.", "question_id": "q_1a2b3c4d"}'
```

Besoin d'un peu plus de temps : `POST /v1/missions/{id}/question/prolonger`. L'agent demande à l'interlocuteur s'il
veut bien patienter une minute ; s'il refuse, ou si le temps passe, l'agent lui propose d'être rappelé s'il le
souhaite. Tout est expliqué dans [Questions en direct](questions.md).

Une réponse envoyée sans question ouverte est transmise à l'agent comme information complémentaire.

## 5. Annuler
```bash
curl -s -X POST $TEL_API/v1/missions/mis_3f2a9c0d1b7e4a55/cancel -H "Authorization: Bearer $TEL_KEY"
# {"id":"mis_3f2a9c0d1b7e4a55","statut":"annulee"}
```
Fonctionne sur un appel en cours (raccrochage immédiat) ou planifié. Les crédits réservés sont rendus ; seules les
secondes déjà parlées sont dues.
