monitor/html/record.html
fds2610-bot be1d61350b Sprachaufnahmen: eine Warteschlange fuer alle statt Zuweisung an Agenten
In Produktion lag eine Sprachnachricht unbearbeitet in der Warteschlange des
OPs-Agenten: aufgenommen wurde ueber seine Figur, abgeholt wird aber nur von
der Maschine, auf der whisper.cpp laeuft. Die Agent-Zuweisung hat eine
Zustaendigkeit vorgetaeuscht, die es nicht gibt - welches Ticket in welchem
Repo entsteht, entscheidet der abholende Bot anhand des Transkripts.

- Migration 007: voice_recordings ohne agent_id. Bestehende Aufnahmen behalten
  ihren Status, die haengengebliebene wandert damit in die globale Warteschlange.
- Migration 008: neue Agenten-Rolle "voice" fuer den Voice-Bot.
- Endpunkte ohne Agent im Pfad: POST/GET /api/v1/recordings,
  GET /api/v1/recordings/{id}/audio, PATCH /api/v1/recordings/{id} - und ohne
  Ownership-Check, an dem die Abholung mit fremdem Key bisher scheiterte.
- GET /api/v1/agents traegt pending_recordings jetzt neben der Liste statt an
  jedem Agenten.
- Frontend: nur noch die Figur des Voice-Bots verlinkt auf record.html (ohne
  ?agent=), Zaehler und Mikrofon-Deko sitzen an seinem Schreibtisch. Die
  Aufnahmeseite nennt den abholenden Bot und bittet darum, das Projekt am
  Anfang der Aufnahme zu nennen.

Die Bot-Seite (bin/voice-recording-agent.sh) folgt in fds2610/Agent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 13:41:47 +02:00

39 lines
1.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="/favicon.png">
<title>Sprachaufnahme</title>
<link rel="stylesheet" href="css/record.css">
</head>
<body>
<header class="record-header">
<h1>Sprachaufnahme</h1>
<p>Wird abgeholt von: <strong id="record-target">…</strong></p>
<p class="record-hint">Nenne das Projekt am Anfang der Aufnahme – daraus entsteht ein Ticket im passenden Repo.</p>
</header>
<main class="record-main">
<p id="status" class="record-status" role="status"></p>
<div class="record-controls">
<button id="start-button" type="button" class="record-button record-button-start">Aufnahme starten</button>
<button id="stop-button" type="button" class="record-button record-button-stop" hidden>Aufnahme beenden</button>
</div>
<audio id="audio-preview" class="record-preview" controls hidden></audio>
<div class="record-controls">
<button id="upload-button" type="button" class="record-button record-button-upload" hidden>Hochladen</button>
<button id="discard-button" type="button" class="record-button record-button-discard" hidden>Verwerfen</button>
</div>
</main>
<!-- Laufzeit-Konfiguration (API-Basis-URL): wird vom Webserver aus MONITOR_API_BASE
erzeugt, siehe docker/nginx/default.conf.template - dieselbe Datei wie office.html
nutzt, damit record.js ueber office-api.js dieselbe API erreicht. -->
<script src="/config.js"></script>
<script type="module" src="js/record.js"></script>
</body>
</html>