Dinnr
Guide complet — Architecture, Modules, Déploiement & Exploitation
v3.0 Twilio Voice Bot Multi-restaurants
Table des matières

1. Vue d'ensemble

Dinnr est une application web complète de gestion des réservations pour restaurants, propulsée par l'intelligence artificielle. Elle se compose de trois parties :

Pour commencer sans serveur Les deux fichiers HTML fonctionnent directement dans le navigateur. Il suffit d'une clé service d'IA. Le serveur n'est nécessaire que pour recevoir de vrais appels téléphoniques.

Ce que fait Dinnr

📅
Réservations
Tableau de bord, calendrier hebdomadaire, liste filtrée, plan de salle 12 tables, file d'attente virtuelle.
🤖
Agent IA conversationnel
Chat avec l'IA qui comprend le langage naturel et crée les réservations automatiquement.
📋
Gestion d'équipe
Planning RH auto-généré, pointage QR code, briefing IA quotidien avant chaque service.
📊
Analytiques
4 graphiques : réservations 14 jours, statuts, heures de pointe, midi vs soir par jour.
📞
Voice Bot
Agent vocal IA qui décroche le téléphone, prend les réservations en langage naturel et envoie un SMS de confirmation.
👥
CRM Clients
Fiche client automatique, historique des visites, notes internes, statut VIP, scoring no-show prédictif.

2. Architecture technique

Application principale (sans serveur)

NavigateurHTML + JS
→
Intelligence artificiellemodèle de langage
→
localStorageDonnées locales

Tout le code s'exécute dans le navigateur. Les données sont stockées localement via localStorage. Aucun serveur, aucune base de données externe.

Voice Bot en production (avec serveur)

TéléphoneClient qui appelle
→
TwilioVoIP + STT
→
Serveur Node.jsDinnr Server
→
Intelligence artificiellecompréhension et réponse
Twilio reçoit l'appel → transcrit la voix en texte (STT) → envoie au serveur → l'IA génère la réponse → Twilio lit au caller via voix Polly d'Amazon → SMS de confirmation envoyé automatiquement.

Technologies utilisées

ComposantTechnologieRôle
InterfaceHTML + JavaScript vanillaAucune dépendance, fonctionne partout
GraphiquesChart.js 4.44 graphiques analytiques
IcônesTabler Icons 3.01000+ icônes vectorielles
Intelligence artificielleun modèle de langageCompréhension langage naturel
STT navigateurWeb Speech APIReconnaissance vocale démo
TTS navigateurWeb Speech SynthesisVoix synthétique démo
STT productionTwilio Speech Recognition (Deepgram)Transcription appels téléphoniques
TTS productionAmazon Polly (Lea-Neural)Voix française naturelle
TéléphonieTwilio VoiceRéception/émission appels
ServeurNode.js + ExpressPont Twilio ↔ IA
DéploiementRailway / Render / HerokuHébergement serveur

3. Fichiers livrés

🌐
dinnr-app.html
Application principale — ouvrir dans Chrome/Edge/Firefox. Contient tous les modules de gestion.
📞
dinnr-voice-bot.html
Voice Bot navigateur — démo avec micro réel. Nécessite Chrome pour la reconnaissance vocale.
📦
dinnr-server.zip
Serveur Node.js pour les vrais appels téléphoniques. Contient server.js, package.json, .env.example.
📖
guide-dinnr.html
Ce document.

Contenu du ZIP serveur

📄
server.js
Serveur Express principal. Webhooks Twilio + appels à l'IA + envoi SMS.
📄
package.json
Dépendances : express, SDK d'IA, twilio, dotenv.
📄
.env.example
Modèle des variables d'environnement à renseigner.
📄
railway.toml
Config de déploiement automatique sur Railway.

4. Modules — Réservations

Tableau de bord

Affiché au démarrage. Montre les réservations du jour, le taux d'occupation midi/soir, les risques no-show détectés par l'IA, et les rappels J-1 à envoyer.

Scoring no-show — chaque réservation reçoit un score calculé sur 4 critères : historique d'annulations du client, absence de numéro de téléphone, groupe de 8 personnes ou plus, grand groupe sans acompte. Score ≥ 3 = risque élevé affiché en rouge.

Calendrier

Vue hebdomadaire. Navigation par semaine. Chaque jour affiche les réservations sous forme de tuiles colorées (or = midi, vert = soir). Cliquer une tuile ouvre le formulaire d'édition. Le + en bas de chaque jour pré-remplit la date.

Réservations

Tableau complet avec filtres : texte libre, date, statut (confirmé / en attente / annulé), service (midi / soir), niveau de risque IA. Chaque ligne affiche le canal d'origine (direct, TheFork, Google, WhatsApp, Voice Bot...), l'acompte versé, et le régime alimentaire signalé.

Plan de salle

12 tables réparties sur 3 zones : Terrasse (T1–T3), Salle principale (T4–T9), Espace privé (T10–T12). Sélectionnez une date et un service pour voir l'occupation en temps réel. Le bouton Auto-assignation IA affecte automatiquement les tables libres aux réservations sans table, en commençant par les plus grands groupes (algorithme glouton).

Une table affiche le symbole ⚠ si le client a déclaré une allergie ou un régime spécial.

File d'attente virtuelle

Quand le restaurant est complet, les clients peuvent être inscrits sur liste d'attente. Dès qu'une table se libère, cliquez Notifier pour envoyer un SMS automatique (simulé dans la démo, réel avec Twilio connecté).

5. Modules — Équipe

Planning RH

Grille hebdomadaire avec 6 employés et 7 jours. Chaque cellule peut contenir un shift : Midi, Soir, Double, Repos, ou Congé. Cliquer une cellule fait défiler les types en boucle.

Génération automatique IA — le bouton Générer auto crée le planning en tenant compte des réservations de la semaine. Règles appliquées :

Pointage

Chaque employé peut pointer son arrivée et son départ. L'heure est enregistrée automatiquement. Le cumul d'heures sur 7 jours glissants est calculé et affiché. Un QR code (statique dans la démo) permettrait en production de pointer via smartphone.

Briefing IA

Document généré automatiquement avant chaque service, regroupant :

Conseil d'utilisation Imprimez ou partagez le briefing via l'option "Export PDF" avant chaque service. Toute l'équipe dispose ainsi des mêmes informations.

6. Modules — Intelligence artificielle

CRM Clients

Construit automatiquement depuis l'historique des réservations. Chaque client dispose d'une fiche avec le nombre de visites, le total de couverts, la date de dernière visite, le régime alimentaire habituel, et des notes libres modifiables. Le statut VIP est attribué manuellement.

Analytiques

4 graphiques Chart.js mis à jour en temps réel :

Dinnr Agent IA (Chat)

Interface de chat connectée à un modèle de langage via le service d'IA. Le système sait :

Quand l'IA confirme une réservation, il inclut un bloc <RES>{...}</RES> dans sa réponse. L'application détecte ce bloc, crée la réservation automatiquement et affiche une notification.

Voice Bot (démo navigateur)

Fonctionne entièrement dans Chrome grâce à deux APIs natives :

La conversation est envoyée à l'IA avec le même mécanisme que le chat. En production, ces deux composants sont remplacés par Twilio et Amazon Polly.

7. Voice Bot — Fonctionnement en production

Flux d'un appel

1
Le client appelle le numéro Twilio
Twilio reçoit l'appel et envoie immédiatement une requête HTTP POST à votre serveur sur /voice/incoming.
2
Le serveur répond avec du TwiML
Le serveur génère un XML Twilio (TwiML) qui contient : le message de bienvenue spoken par Amazon Polly (voix Lea-Neural), puis une instruction d'écoute <Gather input="speech">.
3
Twilio transcrit la voix du client
Twilio utilise son moteur de reconnaissance vocale (Deepgram sous le capot) pour convertir la voix en texte. La transcription est envoyée en POST sur /voice/respond avec un score de confiance.
4
Le serveur envoie le texte à l'IA
L'historique de conversation est maintenu en mémoire (Map par CallSid). L'IA reçoit tout le contexte et génère une réponse concise en 2-3 phrases maximum.
5
La réponse est lue au caller
Le texte de l'IA est envoyé dans un nouveau TwiML avec <Say voice="Polly.Lea-Neural"> suivi d'un nouveau <Gather> pour continuer la conversation.
6
Confirmation et SMS
Quand l'IA inclut le bloc <RES>{...}</RES>, la réservation est sauvegardée et un SMS de confirmation est envoyé automatiquement au numéro du client via twilio.messages.create().

Gestion des cas particuliers

SituationComportement du serveur
Silence du callerTwilio timeout → demande de répéter, puis raccroche après 2 tentatives
Confiance STT < 30%Le serveur demande de répéter sans envoyer à l'IA
Erreur du service d'IAMessage d'erreur vocal + raccrochage + log serveur
Numéro de téléphone non reconnuLe SMS de confirmation est skippé, la réservation est quand même sauvegardée
Session inactive > 1hNettoyage automatique en mémoire (timer toutes les 10 min)

8. Déploiement du serveur

Plateforme recommandée : Railway.app Gratuit jusqu'à 500h/mois, déploiement en 3 minutes depuis GitHub, URL HTTPS automatique — indispensable pour Twilio.

Étapes de déploiement

1
Décompressez le ZIP
Extrayez dinnr-server.zip. Copiez .env.example en .env et remplissez vos clés.
2
Créez un dépôt GitHub
Initialisez un repo Git, committez les fichiers (sans le .env — il est dans .gitignore), poussez sur GitHub.
3
Créez un projet Railway
Sur railway.app, cliquez "New Project" → "Deploy from GitHub repo". Sélectionnez votre dépôt.
4
Ajoutez les variables d'environnement
Dans Railway → Settings → Variables, ajoutez chaque variable de votre .env. Railway redémarre le serveur automatiquement.
5
Récupérez l'URL publique
Railway génère une URL type https://dinnr-server-prod.railway.app. Copiez-la dans la variable BASE_URL.
6
Vérifiez le serveur
Ouvrez https://votre-url.railway.app/api/health dans le navigateur. Vous devez voir {"status":"ok",...}.

Variables d'environnement

VariableValeurObligatoire
CLE_API_IAsk-ant-api03-…Oui
TWILIO_ACCOUNT_SIDACxxxxxxxx…Oui
TWILIO_AUTH_TOKENxxxxxxxx…Oui
TWILIO_PHONE_NUMBER+33XXXXXXXXXOui
BASE_URLhttps://votre-app.railway.appOui
RESTAURANT_NAMELe Jardin DoréNon
MIDI_OPEN / MIDI_CLOSE12:00 / 14:30Non
SOIR_OPEN / SOIR_CLOSE19:00 / 22:30Non
PORT3000 (Railway l'override automatiquement)Non

9. Configuration Twilio

1
Créez un compte Twilio
Sur twilio.com. Le compte gratuit inclut 15 $ de crédit et un numéro de test — suffisant pour valider.
2
Achetez un numéro français
Dans la console Twilio → Phone Numbers → Buy a Number. Filtrez sur "France" et "Voice". Coût : environ 1 €/mois.
3
Configurez le webhook "Appel entrant"
Dans la console Twilio, ouvrez votre numéro → Voice Configuration → "A call comes in". Sélectionnez "Webhook" et entrez :
https://votre-app.railway.app/voice/incoming — méthode POST.
4
Configurez le webhook "Statut d'appel"
Dans le même écran → "Call Status Changes". Entrez :
https://votre-app.railway.app/voice/status — méthode POST.
5
Récupérez vos identifiants
Dans la console Twilio → Dashboard : copiez l'Account SID et l'Auth Token. Ajoutez-les dans les variables d'environnement de Railway.
6
Testez en appelant le numéro
Appelez votre numéro Twilio depuis votre téléphone. Dinnr doit décrocher et se présenter. Regardez les logs Railway pour suivre la conversation en temps réel.
Numéros de téléphone en France Pour envoyer des SMS vers des numéros français, Twilio peut demander une vérification d'identité (document officiel). Prévoyez 24–48h pour la validation.

10. Intégrations

ServiceStatut démoPour activer en production
Lightspeed POSConnecté (simulé)Clé API Lightspeed → lier via OAuth2 sur le dashboard Lightspeed
Google ReserveConnecté (simulé)Google My Business → Réservations → activer un partenaire de réservation
TheForkConnecté (simulé)Contacter TheFork Pro → activer l'API synchronisation
WhatsApp BusinessConnecté (simulé)Meta Business → créer un numéro WhatsApp Business → API via Twilio ou 360Dialog
Twilio SMSConnecté (simulé)Activé automatiquement quand le serveur est déployé avec les variables Twilio
StripeSandboxCréer un compte Stripe → clé secrète → intégrer stripe.paymentIntents.create() dans le serveur
Zelty / Tiller / AdyenNon connectéDemander l'accès API à chaque fournisseur

11. Coûts estimés

Par mois (restaurant 50 couverts/soir, 30 jours)

Intelligence artificielle~500 messages chat + Voice Bot estimé~8 €
Twilio — numéro mensuel1 numéro français~1 €
Twilio — appels entrants~100 appels × 0,005 €/min × 3 min moy.~1,50 €
Twilio — SMS confirmation~100 SMS × 0,04 €~4 €
Railway (hébergement serveur)Plan Starter~5 €
Total mensuel estimé ~20 €
Économies possibles Utiliser un modèle rapide au lieu du modèle avancé divise le coût IA par 5 (qualité légèrement inférieure). Le Voice Bot en navigateur (sans Twilio) est entièrement gratuit pour la démo et la formation de l'équipe.

12. Questions fréquentes

Les données sont-elles sécurisées ?

Dans l'application HTML, toutes les données sont stockées uniquement dans votre navigateur via localStorage — aucun serveur tiers ne les reçoit. Seuls les messages envoyés à l'agent IA passent par le service d'IA, conformément à (notre politique de confidentialité).

Peut-on utiliser l'application sur mobile ?

Oui. Les fichiers HTML s'ouvrent sur mobile. La reconnaissance vocale du Voice Bot fonctionne sur Chrome Android. Pour iOS, Safari ne supporte pas encore pleinement la Web Speech API — utiliser la saisie texte à la place.

Les données sont-elles perdues si on ferme le navigateur ?

Non. Toutes les réservations, le planning, les notes clients et la clé API sont sauvegardés dans localStorage. Ils persistent entre les sessions. Exception : vider le cache ou utiliser une fenêtre privée efface les données.

Peut-on gérer plusieurs restaurants ?

Oui. Le switcher en haut de la sidebar permet de basculer entre 3 établissements. Chaque restaurant a ses propres données isolées dans localStorage. Pour ajouter un 4ème restaurant, modifiez le tableau RESTOS dans le code JavaScript.

Comment connecter le serveur Voice Bot à l'application HTML ?

Le serveur expose un endpoint GET /api/reservations qui retourne toutes les réservations créées par Voice Bot en JSON. Vous pouvez l'appeler depuis l'application HTML pour synchroniser les données. Une version future de Dinnr intégrera cette synchronisation automatiquement.

La reconnaissance vocale comprend-elle les accents régionaux ?

Dans la démo navigateur (Web Speech API), les performances dépendent du navigateur. En production avec Twilio (Deepgram), la reconnaissance est nettement plus robuste sur les accents français, belges et québécois. La confiance minimale est réglée à 30% dans le serveur — en dessous, Dinnr demande de répéter.

Comment améliorer la qualité de la voix en production ?

Remplacez la voix Amazon Polly par ElevenLabs pour une qualité supérieure. Il faut modifier server.js : au lieu de passer du texte dans <Say>, générez un fichier audio MP3 via l'API ElevenLabs, hébergez-le temporairement (ex: S3 ou tmpfiles.org), et utilisez <Play> dans le TwiML. La latence augmente légèrement (~500ms supplémentaires).

Peut-on ajouter d'autres langues ?

Oui. Dans server.js, changez language: 'fr-FR' en en-US, es-ES, etc. sur les blocs <Gather>. Modifiez également la voix Polly (ex: Polly.Joanna pour l'anglais américain) et les instructions de l'IA pour la langue cible.


Dinnr v3.0 — Documentation rédigée le 25 mai 2026
Dinnr · Guide d'utilisation