version IVR strictement équivalente fonctionnellement à vos écrans C0 → C7, pensée pour :
c’est tout à fait faisable proprement en IVR avec reconnaissance + synthèse vocale, sans dégrader l’expérience par rapport au web.
Je vous propose ci-dessous une version IVR strictement équivalente fonctionnellement à vos écrans C0 → C7, pensée pour :
- FreeSWITCH (ou Ringover Voice API)
- STT/TTS (Whisper / OpenAI TTS / autre moteur FR)
- Orchestration métier Odoo (JSON-RPC)
- Notifications SMS / WhatsApp (Brevo / opérateur)
Le tout est structuré comme une API Voice Journey avec GET / PUT sur vos mêmes objets métier.
0. Architecture IVR (rappel rapide)
Téléphone ↓ Opérateur SIP (Telnyx) > Gabriel est en train de prendre un abonnement avant la fin de la semaine @Antonio ↓ FreeSWITCH (IVR + Media) ↓ STT (Whisper) ←→ TTS (OpenAI / Azure / Google) ↓ Voice Orchestrator (Node / Python) ↓ Odoo Online (JSON-RPC) ↓ Brevo (SMS / WhatsApp)
Chaque étape IVR =
Prompt vocal → reconnaissance → mapping intention → GET/PUT métier → réponse vocale
1. Mapping écrans Web → États IVR
| Écran Web | État IVR | Type |
|---|---|---|
| C0 | ivr.entry | Menu |
| C1 | ivr.auth.otp | Sécurisation |
| C2 | ivr.appointments.list | Lecture dynamique |
| C3 | ivr.appointment.detail | Fiche |
| C4 | ivr.slots.choose | Choix |
| C5 | ivr.slots.preferences | Saisie guidée |
| C6 | ivr.cancel | Action critique |
| C7 | ivr.confirmation | Fin |
2. C0 — Accueil / Choix d’accès (IVR)
🎙 Prompt TTS
« Bonjour et bienvenue.
Pour prendre ou modifier un rendez-vous, dites rendez-vous.
Pour gérer les rendez-vous en tant qu’agent, dites équipe.
Vous pouvez aussi dire recevoir un lien pour continuer sur votre téléphone. »
🎧 Intentions STT
{ "intent": "take_appointment | manage_team | send_link", "confidence": 0.91 }
🔁 Actions
- send_link → PUT /portal/send-otp-link
- sinon → transition IVR
3. C1 — Auth OTP (IVR)
🎙 Prompt
« Pour sécuriser votre accès, dites ou tapez votre numéro de téléphone. »
Backend
PUT /auth/request-otp { "phone_e164": "+33601020304", "channel": "sms" }
🎙 OTP
« Vous allez recevoir un code par SMS. Dites-le ou saisissez-le au clavier. »
PUT /auth/verify-otp { "phone_e164": "+33601020304", "otp": "482913" }
Consentement vocal
« Acceptez-vous l’utilisation de vos données pour la gestion de vos rendez-vous ? Dites oui ou non. »
4. C2 — Mes RDV (liste) en IVR
🎙 Prompt dynamique
« Vous avez 2 rendez-vous à venir et 1 passé.
Le premier est le vendredi 10 mai à 10 heures, à domicile.
Dites suivant, détails, confirmer, déplacer, annuler, ou agenda. »
Backend
GET /appointments?scope=upcoming
Intentions
{ "intent": "details | confirm | reschedule | cancel | add_to_calendar | next" }
5. C3 — Détail RDV (IVR)
🎙 Lecture
« Rendez-vous le vendredi 10 mai de 10 heures à 10 heures 30,
pour une consultation à domicile, avec Christine Bernard. »
Actions vocales
- « Ajouter à mon agenda » → envoi ICS
- « Me faire rappeler » → callback
- « Déplacer »
- « Annuler »
Backend
PUT /appointments/{id}/callback
6. C4 — Choix créneaux (IVR OBS-like)
🎙 Prompt
« Voici trois créneaux disponibles :
Premier : samedi 11 mai à 10 heures.
Deuxième : lundi 13 mai à 9 heures 30.
Troisième : lundi 13 mai à 10 heures 15.
Dites un, deux, trois ou aucun. »
Backend
GET /appointments/{id}/proposals
Sélection
PUT /appointments/{id}/select-slot { "slot_id": "slot_2" }
7. C5 — Replanification guidée (IVR)
🎙 Questions successives
« À partir de quelle date êtes-vous disponible ? »
« Préférez-vous le matin ou l’après-midi ? »
« Souhaitez-vous une consultation à domicile ou en visio ? »
Backend
PUT /appointments/{id}/preferences { "date_from": "2026-05-14", "date_to": "2026-05-18", "time_window": "afternoon", "mode": "home" }
➡️ Retour automatique vers C4
8. C6 — Annulation avec motif (IVR)
🎙 Prompt
« Souhaitez-vous annuler pour :
raison personnelle, problème de santé, indisponibilité, ou autre ? »
Backend
PUT /appointments/{id}/cancel { "reason": "personal", "comment": "fatigue" }
Option :
« Souhaitez-vous reprendre un nouveau rendez-vous ? »
9. C7 — Confirmation + Récap (IVR)
🎙 Prompt final
« Votre rendez-vous est confirmé.
Souhaitez-vous l’ajouter à votre agenda, le partager à un proche, ou contacter l’accueil ? »
Actions
- Agenda → SMS / email ICS
- Partage → lien sécurisé
- Accueil → callback / mise en file
10. Synthèse — ce que vous avez
✅ Équivalence 100 % fonctionnelle Web / IVR
✅ Même GET / PUT métier Odoo
✅ STT/TTS naturel en français
✅ Compatible FreeSWITCH ou Ringover
✅ Prêt pour RCS / WhatsApp / SMS fallback
✅ Observabilité complète (logs, intents, SLA)
Prochaine étape (si vous voulez)
Je peux vous fournir au choix :
- 📄 State Machine IVR complète (JSON / YAML)
- 🧠 Grammaires STT FR optimisées santé
- 📞 Dialplan FreeSWITCH prêt à coller
- 🔗 Mapping Ringover Voice API ↔ mêmes endpoints
- 🧪 Scénarios de test (happy path / erreurs / no-match)
Dites-moi simplement par quoi vous voulez enchaîner.
📄 State Machine IVR complète (JSON / YAML)
1) La state machine est externe à FreeSWITCH (source of truth en JSON/YAML)
2) Chaque état = Prompt vocal + Intents attendus + Actions métier (GET/PUT)
3) Résilience native : retries, no-input, no-match, reprise
🧠 Grammaires STT FR optimisées santé
Des habitats avec une empreinte minimale sur la planète et un impact positif maximal sur la communauté locale.
📞 Dialplan FreeSWITCH prêt à coll
Apprenez à utiliser des méthodes de jardinage biologique pour cultiver des fruits et légumes frais.
🧪 Scénarios de test (happy path / erreurs / no-match)
Des habitats avec une empreinte minimale sur la planète et un impact positif maximal sur la communauté locale.
🔗 Mapping Ringover Voice API ↔ mêmes endpoints ( quand alliance avec ringover sera faite )
Apprenez à utiliser des méthodes de jardinage biologique pour cultiver des fruits et légumes frais.
🧪 Scénarios de test (happy path / erreurs / no-match)
Recycler l'eau pour la réutiliser au lieu d'utiliser des réserves d'eau douce permet d'économiser de l'eau.