← Tous les manuels · Portail
↗ Ouvrir l'app

Voice Inbox — MANUAL

Rôle

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.

Infra

  • - URL publique : https://voix.panelbay.com
  • - Service systemd : voice-inbox.service
  • - Port local : 127.0.0.1:8347 (uvicorn)
  • - Code : /root/workspace/apps/voice-inbox/server.py (FastAPI)
  • - nginx : /etc/nginx/sites-enabled/voix.panelbay.com.conf (proxy → 8347, cert Let's Encrypt)
  • - DNS : A record voix.panelbay.com → IP serveur (Cloudflare, via skill expose-webapp)
  • Auth

  • - Header Authorization: Bearer <VOICE_INBOX_TOKEN> (repli : ?token=...).
  • - Le token est dans /root/aios/.env sous VOICE_INBOX_TOKEN. Sans token ou
  • token faux → 401.

    Endpoints

  • - GET /health → {"ok":true,"service":"voice-inbox"} (pas d'auth).
  • - POST /task (auth requise). Corps accepté :
  • transcrit via lib/stt_client.transcribe(caller="voice_widget").

    Dispatch vers l'AIOS

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

    Widget iPhone (côté Matt)

    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.

    Pièges

  • - Le service tourne en arrière-plan ; si 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).

  • - Cache DNS local : la VPS peut mettre un moment à résoudre voix.panelbay.com
  • alors 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.

    Test

    ```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"}'

    ```

    CHANGELOG

  • - 2026-08-06 (soir) : v1 « analyse + note sur Yacaré ». Le prompt de dispatch (_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é…).
  • - 2026-08-06 : création. Service FastAPI (port 8347) + systemd 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.