Endpoint HTTPS qui reçoit une consigne vocale depuis le widget iPhone (Raccourci
Apple) et la transmet à l'AIOS. L'AIOS exécute la consigne en arrière-plan et
dépose son compte rendu dans les notifications (cloche webapp + push PWA).
Un tap sur le widget → on parle → la consigne part → l'AIOS agit → réponse dans
les notifications.
voice-inbox.service/root/workspace/apps/voice-inbox/server.py (FastAPI)/etc/nginx/sites-enabled/voix.panelbay.com.conf (proxy → 8347, cert Let's Encrypt)voix.panelbay.com → IP serveur (Cloudflare, via skill expose-webapp)Authorization: Bearer <VOICE_INBOX_TOKEN> (repli : ?token=...)./root/aios/.env sous VOICE_INBOX_TOKEN. Sans token outoken faux → 401.
GET /health → {"ok":true,"service":"voice-inbox"} (pas d'auth).POST /task (auth requise). Corps accepté :{"text":"..."} (chemin principal : dictée iPhone).audio/* ou application/octet-stream) → transcrit via lib/stt_client.transcribe(caller="voice_widget").
{"ok":true,"text":"<consigne>","message":"..."}.server.py::_dispatch lance en tâche détachée
/root/aios/.claude/skills/scheduler/scripts/notify_claude.sh "Tache vocale" "<instruction>".
Le run claude -p traite la consigne (agit si actionnable, sinon prépare /
note) et son compte rendu part dans l'inbox via lib/notify.py. Titre de la
notif : « Tache vocale ».
Voir RACCOURCI-IPHONE.md (même dossier) : Raccourci Apple « Dicter le texte »
→ « Obtenir le contenu de l'URL » (POST JSON vers /task avec le Bearer token),
puis ajouté à l'écran d'accueil ou en widget Raccourcis.
voice-inbox.service redémarre pendant un run claude -p en cours (~1 min), ce run est interrompu (rare, redémarrage
manuel seulement).
/ (racine) renvoie 404 : seuls /health et /task existent (le warning de expose-webapp sur / est donc normal).
voix.panelbay.comalors que les resolvers publics (1.1.1.1 / 8.8.8.8) résolvent déjà. Depuis
l'iPhone (resolver public) c'est immédiat.
```bash
curl -s https://voix.panelbay.com/health
curl -s -X POST https://voix.panelbay.com/task \
-H "Authorization: Bearer <VOICE_INBOX_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"text":"test, confirme juste dans les notifications"}'
```
_dispatch dans server.py) demande maintenant à l'AIOS d'ANALYSER le message vocal, de décider si c'est une TÂCHE actionnable, et si oui de la reformuler (titre impératif court en français), d'en déduire priorité (low/medium/high/urgent) et échéance (YYYY-MM-DD, gère « demain »/« lundi » via la date du jour), puis de l'ajouter au tableau Yacaré de Matt via le nouveau helper déterministe scripts/yacare_add_task.py. Si ce n'est pas une tâche (question, info, test) : rien n'est créé, l'AIOS explique juste sa compréhension (et répond si c'est une vraie question). Compte rendu court dans les notifications. Le helper écrit directement dans la DB Yacaré (/root/workspace/apps/moa-tasks/data/moa-tasks.db, user Matt x14QPON4HxFE-O2whF2Wa, colonne « Ordre du jour » par défaut, id nanoid, position en haut de colonne, log d'activité), args --title/--description/--priority/--deadline/--column. Testé bout-en-bout via l'endpoint : (1) message tâche « rappeler l'agent Garcia demain … » → tâche notée « Rappeler l'agent Garcia pour lui envoyer le contrat signé », échéance J+1, colonne Ordre du jour ; (2) message non-tâche (« quelle est la capitale du Paraguay ») → aucune tâche créée. Service redémarré. Évolutions prévues (hors v1) : router vers plusieurs destinations selon l'intention (CRM, mail, rappel programmé…).voice-inbox.service,exposé sur https://voix.panelbay.com (nginx + Cloudflare + Let's Encrypt).
Endpoints /health et /task (Bearer token VOICE_INBOX_TOKEN dans .env).
STT via lib/stt_client, dispatch via notify_claude.sh → notifications.
Testé bout-en-bout (local + public HTTPS). Widget iPhone documenté dans
RACCOURCI-IPHONE.md.