# 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.