用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/fossasia/voxbento --skill floor-bot-analysis命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Use this skill to review pull requests for VoxBento. Covers correctness, security, architecture compliance, and testing.
Ask which skill or flow fits your situation. A router over the user-invoked skills in this repo.
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
基于 SOC 职业分类
正在显示 SKILL.md
| name | floor-bot-analysis |
| description | Use this skill for floor bot analysis. |
This skill explains how to debug and analyze the Floor Bot feature in VoxBento, which bridges the Jitsi WebRTC audio floor track to the RTSP/MediaMTX infrastructure for transcription.
The floor-bot is a headless Playwright/Chromium container that joins the main Jitsi conference room (monitoring the floor channel). It captures the audio and sends it over a PulseAudio socket directly to FFmpeg. FFmpeg then pushes this audio via RTSP to MediaMTX, where the transcription worker pulls it and generates captions.
bot.py via an HTTP server. It listens on port 8080 for /start and /stop commands./tmp/pulse-{event_slug}.sock acts as the bridge. Chromium outputs to this socket, and FFmpeg reads from it.rtsp://mediamtx:8554/{event_slug}/floor./api/rooms/{room_id}/floor-transcription/start trigger the bot to join the Jitsi room and immediately spawn the transcription worker pointing to the floor channel.When deploying this architecture, understanding the network topology is critical.
JITSI_INTERNAL_BASE)jitsi-web. To bypass WebRTC HTTP origin blocking for getUserMedia, the backend automatically replaces localhost or jitsi.voxbento.com with the Docker-internal HTTPS URL: https://jitsi-web. The bot explicitly uses --ignore-certificate-errors and --unsafely-treat-insecure-origin-as-secure=https://jitsi-web.https://jitsi-web hostname will fail. You must set JITSI_INTERNAL_BASE to the public Jitsi URL (e.g., https://jitsi.eventyay.com) in your .env.MEDIAMTX_RTSP_BASE)rtsp://mediamtx:8554 (the container name inside Docker Compose).MEDIAMTX_RTSP_BASE environment variable. Both the floor-bot FFmpeg ingest and the backend transcription worker use this URL.FLOOR_BOT_BASE)http://floor-bot:8080.FLOOR_BOT_BASE to point to the correct pod/service DNS.Check if Playwright is muting the browser. Ensure --ignore_default_args=["--mute-audio"] is being passed. Also verify if the Jitsi UI is trying to acquire mic permissions and failing: Ensure --use-fake-device-for-media-stream is used.
Jitsi expects URL parameters (like userInfo.displayName) to be valid JSON strings. Ensure the display name is properly quote-wrapped and URL encoded:
urllib.parse.quote('"VoxBento FloorBot"') -> %22VoxBento%20FloorBot%22.
Ensure PULSE_SERVER="unix:/tmp/pulse-{event_slug}.sock" is properly passed to the Playwright chromium browser using the env= dictionary.
If FFmpeg reports loop/sync errors (Non-monotonous DTS), check the sample rate constraints in Jitsi vs Chromium vs FFmpeg.
Tail the Floor Bot Logs:
docker compose logs -f floor-bot
Check PulseAudio Connections inside Floor Bot:
docker compose exec floor-bot sh -c 'PULSE_SERVER="unix:/tmp/pulse-{event_slug}.sock" pactl list sink-inputs'
(If the browser is outputting audio correctly, you will see 'Chromium' listed as a client).
Check FFmpeg/MediaMTX Streaming:
docker compose logs -f mediamtx
(Look for: [path {event_slug}/floor] stream is online)