diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c5c516..0f9c892 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,3 +24,7 @@ jobs: - run: npm run cf:build env: SYNC_DOCS_TOKEN: ${{ secrets.SYNC_DOCS_TOKEN }} + + # Catch broken internal links and locale leaks before they ship. Runs + # against the full build above (docs synced), so /docs/voice/* is checked. + - run: npm run check:links diff --git a/CLAUDE.md b/CLAUDE.md index 34002e3..13bfff9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -101,6 +101,7 @@ i18n is **global, URL-driven infrastructure**, not a per-section feature. `src/l - `translatedRoutes` — which base paths exist in which non-default locale. This is what makes a page "translated": `hreflang`, the sitemap alternates, and the switcher targets all read from it. - **hreflang, the switcher, and the sitemap are automatic.** `buildAlternates()` emits the reciprocal set (+ region aliases + `x-default`) only for pages in `translatedRoutes`; untranslated pages get **no** hreflang (so we never claim a translation that doesn't exist) but **still show the switcher** (it falls back to the locale home, never a 404). The sitemap `i18n` map in `astro.config.mjs` mirrors the slug↔code mapping. - **A "suggest, don't force" banner** (in `Base.astro`) offers the visitor's browser language when this page has it, in the target language, and remembers dismissal in `localStorage`. Never auto-redirect — it breaks SEO/crawling and traps shared-machine users. +- **In-body links are NOT localized automatically.** The chrome localizes itself, but links written *inside* a page (`.astro` body, blog markdown) are taken verbatim — so a hand-written `/voice/download/` in a `/zh/` page leaks the reader back to English. When you write an internal link on a localized page, prefix it with the locale (`/zh/voice/download/`) **if that page is translated**; leave it unprefixed only for default-locale-only targets (e.g. the English-only `/docs/**`). `scripts/check-links.js` (`npm run check:links`, run in CI after the build) guards both failure modes — it fails the build on any broken internal link **and** on any localized page that links to a default-locale URL whose localized twin exists. Run `npm run build && npm run check:links` locally before publishing link-heavy changes (use `SYNC_DOCS=1 WAVEKAT_LOCAL_REPOS=` so the private `/docs/voice/*` get checked too). ### Naming rules (these are deliberate — follow them) @@ -133,6 +134,39 @@ git submodule update --remote vendor/wavekat-brand make sync ``` +## Product screenshots + +Real, localized app screenshots from wavekat-voice's screenshot pipeline (its +`docs/41` — `make screenshots` then `make screenshots-frames`) live in a +**shared, scene-keyed namespace**: `public/screenshots//.webp`. One +file per (scene, language) that *any* page can reference — `in-call` is one +asset, not a copy per post. **The guiding rule: a screenshot earns its place +only where it makes a page's point** — don't add one (or sync a scene) just +because the pipeline can make it. + +Today the only consumer is the "place calls from the command line" blog post, +which embeds three, each illustrating the section it sits under: `in-call` +("what it actually does"), `settings-automation` ("there's nothing to install" — +the enable toggle + Install-CLI button), and `settings-automation-agents` +("connect an AI assistant in one click" — the one-click Connect rows). +`settings-automation*` are scenes added to wavekat-voice for this; the agents one +is the same page scrolled to the assistants section (a scene `scroll` hint, since +it's below the 960×640 fold). + +- **Framed, not bare.** These use the pipeline's **Ubuntu/GNOME-framed** output + (`screenshots/framed/ubuntu/…`), so the window chrome is real, not CSS — we're + a Mac + Linux product and the author runs Ubuntu. No site-drawn frame. +- **Single theme (light), per language.** A baked-in frame can't follow the + page's dark/light toggle, so we pick light and keep it consistent — but each + localized surface shows the app in *its* language (`/screenshots//.webp`). +- **Committed, not built.** Nothing here pulls from the private renderer at build + time, so the chosen shots are committed under `public/screenshots/` as WebP + (~1.1 MB) and referenced by plain markdown `![alt](/screenshots/…)` with + translated alt text. Refresh with `make screenshots` (`npm run sync:screenshots`) + against a local wavekat-voice checkout; `npm run check:screenshots` asserts the + set is complete. The scene list lives in `scripts/sync-screenshots.js` — keep it + in sync with the `![](/screenshots//…)` refs across the site. + ## Current state - Working branch: `feat/astro-scaffold` diff --git a/Makefile b/Makefile index 5d00333..88d70fc 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,18 @@ SHELL := /bin/bash NVM := . ~/.nvm/nvm.sh && nvm use 22 && -.PHONY: dev build preview sync install clean cf-build help +.PHONY: dev build preview sync screenshots install clean cf-build help .DEFAULT_GOAL := help # Copy needed assets from wavekat-brand submodule → public/ sync: $(NVM) npm run sync +# Refresh the Ubuntu-framed app screenshots (public/screenshots/) from a local +# wavekat-voice checkout (run `make screenshots && make screenshots-frames` +# there first). Committed assets — not part of the regular build. +screenshots: + $(NVM) npm run sync:screenshots + # Start dev server dev: $(NVM) npm run dev @@ -38,6 +44,7 @@ help: @echo " build Build for production → dist/" @echo " preview Build and preview locally" @echo " sync Copy assets from wavekat-brand submodule" + @echo " screenshots Refresh framed app screenshots → public/screenshots/" @echo " install Install dependencies" @echo " cf-build Simulate Cloudflare Pages build (no nvm)" @echo " clean Remove dist/, .astro/, public/logos/" diff --git a/package.json b/package.json index 46f7ebe..e83b455 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,9 @@ "scripts": { "sync": "node scripts/sync-brand.js", "sync:docs": "node scripts/sync-docs.js", + "sync:screenshots": "node scripts/sync-screenshots.js", + "check:screenshots": "node scripts/sync-screenshots.js --check", + "check:links": "node scripts/check-links.js", "dev": "npm run sync && astro dev", "build": "npm run sync && SYNC_DOCS=1 npm run sync:docs && astro build", "preview": "astro preview", diff --git a/public/screenshots/in-call/de.webp b/public/screenshots/in-call/de.webp new file mode 100644 index 0000000..b151c73 Binary files /dev/null and b/public/screenshots/in-call/de.webp differ diff --git a/public/screenshots/in-call/en.webp b/public/screenshots/in-call/en.webp new file mode 100644 index 0000000..75a2c73 Binary files /dev/null and b/public/screenshots/in-call/en.webp differ diff --git a/public/screenshots/in-call/es.webp b/public/screenshots/in-call/es.webp new file mode 100644 index 0000000..3660799 Binary files /dev/null and b/public/screenshots/in-call/es.webp differ diff --git a/public/screenshots/in-call/fr.webp b/public/screenshots/in-call/fr.webp new file mode 100644 index 0000000..78e2e72 Binary files /dev/null and b/public/screenshots/in-call/fr.webp differ diff --git a/public/screenshots/in-call/it.webp b/public/screenshots/in-call/it.webp new file mode 100644 index 0000000..c5a8cbe Binary files /dev/null and b/public/screenshots/in-call/it.webp differ diff --git a/public/screenshots/in-call/ja.webp b/public/screenshots/in-call/ja.webp new file mode 100644 index 0000000..3f43672 Binary files /dev/null and b/public/screenshots/in-call/ja.webp differ diff --git a/public/screenshots/in-call/ko.webp b/public/screenshots/in-call/ko.webp new file mode 100644 index 0000000..0d9dce8 Binary files /dev/null and b/public/screenshots/in-call/ko.webp differ diff --git a/public/screenshots/in-call/zh-Hans.webp b/public/screenshots/in-call/zh-Hans.webp new file mode 100644 index 0000000..ca64437 Binary files /dev/null and b/public/screenshots/in-call/zh-Hans.webp differ diff --git a/public/screenshots/in-call/zh-Hant.webp b/public/screenshots/in-call/zh-Hant.webp new file mode 100644 index 0000000..c2ffe04 Binary files /dev/null and b/public/screenshots/in-call/zh-Hant.webp differ diff --git a/public/screenshots/settings-automation-agents/de.webp b/public/screenshots/settings-automation-agents/de.webp new file mode 100644 index 0000000..0c6d901 Binary files /dev/null and b/public/screenshots/settings-automation-agents/de.webp differ diff --git a/public/screenshots/settings-automation-agents/en.webp b/public/screenshots/settings-automation-agents/en.webp new file mode 100644 index 0000000..7ea16be Binary files /dev/null and b/public/screenshots/settings-automation-agents/en.webp differ diff --git a/public/screenshots/settings-automation-agents/es.webp b/public/screenshots/settings-automation-agents/es.webp new file mode 100644 index 0000000..f96b2b2 Binary files /dev/null and b/public/screenshots/settings-automation-agents/es.webp differ diff --git a/public/screenshots/settings-automation-agents/fr.webp b/public/screenshots/settings-automation-agents/fr.webp new file mode 100644 index 0000000..373e64f Binary files /dev/null and b/public/screenshots/settings-automation-agents/fr.webp differ diff --git a/public/screenshots/settings-automation-agents/it.webp b/public/screenshots/settings-automation-agents/it.webp new file mode 100644 index 0000000..df1192e Binary files /dev/null and b/public/screenshots/settings-automation-agents/it.webp differ diff --git a/public/screenshots/settings-automation-agents/ja.webp b/public/screenshots/settings-automation-agents/ja.webp new file mode 100644 index 0000000..7d9e44f Binary files /dev/null and b/public/screenshots/settings-automation-agents/ja.webp differ diff --git a/public/screenshots/settings-automation-agents/ko.webp b/public/screenshots/settings-automation-agents/ko.webp new file mode 100644 index 0000000..6db1c48 Binary files /dev/null and b/public/screenshots/settings-automation-agents/ko.webp differ diff --git a/public/screenshots/settings-automation-agents/zh-Hans.webp b/public/screenshots/settings-automation-agents/zh-Hans.webp new file mode 100644 index 0000000..3fce9f6 Binary files /dev/null and b/public/screenshots/settings-automation-agents/zh-Hans.webp differ diff --git a/public/screenshots/settings-automation-agents/zh-Hant.webp b/public/screenshots/settings-automation-agents/zh-Hant.webp new file mode 100644 index 0000000..3baf007 Binary files /dev/null and b/public/screenshots/settings-automation-agents/zh-Hant.webp differ diff --git a/public/screenshots/settings-automation/de.webp b/public/screenshots/settings-automation/de.webp new file mode 100644 index 0000000..8eb2324 Binary files /dev/null and b/public/screenshots/settings-automation/de.webp differ diff --git a/public/screenshots/settings-automation/en.webp b/public/screenshots/settings-automation/en.webp new file mode 100644 index 0000000..e4dc30e Binary files /dev/null and b/public/screenshots/settings-automation/en.webp differ diff --git a/public/screenshots/settings-automation/es.webp b/public/screenshots/settings-automation/es.webp new file mode 100644 index 0000000..497d737 Binary files /dev/null and b/public/screenshots/settings-automation/es.webp differ diff --git a/public/screenshots/settings-automation/fr.webp b/public/screenshots/settings-automation/fr.webp new file mode 100644 index 0000000..9c28962 Binary files /dev/null and b/public/screenshots/settings-automation/fr.webp differ diff --git a/public/screenshots/settings-automation/it.webp b/public/screenshots/settings-automation/it.webp new file mode 100644 index 0000000..6b0b64f Binary files /dev/null and b/public/screenshots/settings-automation/it.webp differ diff --git a/public/screenshots/settings-automation/ja.webp b/public/screenshots/settings-automation/ja.webp new file mode 100644 index 0000000..3e34b42 Binary files /dev/null and b/public/screenshots/settings-automation/ja.webp differ diff --git a/public/screenshots/settings-automation/ko.webp b/public/screenshots/settings-automation/ko.webp new file mode 100644 index 0000000..3ff0768 Binary files /dev/null and b/public/screenshots/settings-automation/ko.webp differ diff --git a/public/screenshots/settings-automation/zh-Hans.webp b/public/screenshots/settings-automation/zh-Hans.webp new file mode 100644 index 0000000..39f0720 Binary files /dev/null and b/public/screenshots/settings-automation/zh-Hans.webp differ diff --git a/public/screenshots/settings-automation/zh-Hant.webp b/public/screenshots/settings-automation/zh-Hant.webp new file mode 100644 index 0000000..5b126f2 Binary files /dev/null and b/public/screenshots/settings-automation/zh-Hant.webp differ diff --git a/scripts/check-links.js b/scripts/check-links.js new file mode 100644 index 0000000..dd7799f --- /dev/null +++ b/scripts/check-links.js @@ -0,0 +1,152 @@ +#!/usr/bin/env node +// Validates every internal link in the built site (dist/) before we publish. +// Catches the two ways an internal link goes wrong here: +// +// 1. Broken — the target page/asset doesn't exist (a 404 waiting to happen). +// 2. Leak — a localized page (/zh/…, /ja/…) links to the *unprefixed* +// default-locale URL of a page that DOES have a localized +// version, bouncing the reader out of their language. +// +// Both are derived from dist/ itself, so there's no second source of truth to +// drift: a link is broken if its file isn't there, and a leak if the localized +// twin (/ + target) is there but the link skipped it. Locale slugs are +// read from src/lib/i18n.ts so adding a language needs no change here. +// +// Run it against a *full* build (with the private docs synced): +// npm run build && npm run check:links +// Without SYNC_DOCS_TOKEN the voice docs (/docs/voice/*) aren't built; those +// targets are reported as a skipped warning, not a failure, so local runs are +// still useful. +// +// Exit code is non-zero if any broken link or leak is found — wire it into CI +// right after the build. + +import { readFileSync, existsSync, readdirSync, statSync } from "fs"; +import { join } from "path"; +import { fileURLToPath } from "url"; + +const root = join(fileURLToPath(import.meta.url), "../.."); +const dist = join(root, "dist"); + +if (!existsSync(dist)) { + console.error("✗ no dist/ — run `npm run build` first."); + process.exit(1); +} + +// Locale slugs straight from the i18n registry (non-empty `slug:` values). +const i18n = readFileSync(join(root, "src/lib/i18n.ts"), "utf8"); +const localeSlugs = [...i18n.matchAll(/slug:\s*'([^']+)'/g)].map((m) => m[1]); +const slugRe = new RegExp(`^/(${localeSlugs.join("|")})(/|$)`); + +// Are the private voice docs in this build? If not, don't fail on their URLs. +const voiceDocsBuilt = existsSync(join(dist, "docs/voice")); + +function walk(dir) { + const out = []; + for (const entry of readdirSync(dir)) { + const p = join(dir, entry); + if (statSync(p).isDirectory()) out.push(...walk(p)); + else if (entry.endsWith(".html")) out.push(p); + } + return out; +} + +// Does an internal URL path resolve to a built file? +const ASSET_RE = /\.[a-z0-9]+$/i; +function resolves(urlPath) { + if (ASSET_RE.test(urlPath) && !urlPath.endsWith("/")) { + return existsSync(join(dist, urlPath)); + } + // A page: accept dir/index.html, with or without the trailing slash. + const candidates = [ + join(dist, urlPath, "index.html"), + join(dist, urlPath.replace(/\/$/, "") + ".html"), + join(dist, urlPath), // exact file (rare) + ]; + return candidates.some(existsSync); +} + +const pages = walk(dist); +const broken = new Map(); // target -> Set(source page) +const leaks = new Map(); // "page → target" detail +const skipped = new Set(); // synced-doc targets we couldn't check locally +const linkRe = /(?:href|src)="(\/[^":]*?)"/g; + +for (const file of pages) { + const sourceUrl = "/" + file.slice(dist.length + 1).replace(/index\.html$/, ""); + const localeMatch = sourceUrl.match(slugRe); + const localeSlug = localeMatch ? localeMatch[1] : null; + // This page's path with the locale prefix stripped — i.e. its default-locale + // twin. The language switcher on every localized page links to exactly this + // (its "English" entry), which is correct, not a leak; we exclude it below. + const ownBasePath = localeSlug ? sourceUrl.replace(slugRe, "/") : sourceUrl; + const html = readFileSync(file, "utf8"); + + let m; + while ((m = linkRe.exec(html))) { + const target = m[1].split("#")[0].split("?")[0]; + if (!target || target === "/") continue; + + // Broken-link check. + if (!resolves(target)) { + if (!voiceDocsBuilt && target.startsWith("/docs/voice")) { + skipped.add(target); + } else { + if (!broken.has(target)) broken.set(target, new Set()); + broken.get(target).add(sourceUrl); + } + } + + // Locale-leak check: a localized page linking to an unprefixed URL whose + // localized twin exists is a leak (the link should carry the locale). The + // switcher's own "English" link points at this page's twin (ownBasePath) — + // that's intentional, so skip it. + const targetSlash = target.endsWith("/") ? target : target + "/"; + if ( + localeSlug && + !slugRe.test(target) && + !ASSET_RE.test(target) && + targetSlash !== (ownBasePath.endsWith("/") ? ownBasePath : ownBasePath + "/") + ) { + const twin = `/${localeSlug}${target}`; + if (resolves(twin)) { + leaks.set(`${sourceUrl} → ${target}`, `should be /${localeSlug}${target}`); + } + } + } +} + +let failed = false; + +if (broken.size) { + failed = true; + console.error(`✗ ${broken.size} broken internal link target(s):`); + for (const [target, srcs] of [...broken].sort()) { + console.error(` ${target}`); + for (const s of [...srcs].sort().slice(0, 5)) console.error(` ← ${s}`); + if (srcs.size > 5) console.error(` … and ${srcs.size - 5} more`); + } + console.error(""); +} + +if (leaks.size) { + failed = true; + console.error(`✗ ${leaks.size} locale-leaking link(s) (localized page → default-locale URL):`); + for (const [where, fix] of [...leaks].sort()) { + console.error(` ${where} (${fix})`); + } + console.error(""); +} + +if (skipped.size) { + console.warn( + `⚠ skipped ${skipped.size} /docs/voice/* link(s) — voice docs not synced in ` + + `this build. Run with SYNC_DOCS_TOKEN to verify them.\n`, + ); +} + +if (failed) { + console.error("Link check failed."); + process.exit(1); +} +console.log(`✓ links OK — ${pages.length} pages scanned, no broken or leaking internal links.`); diff --git a/scripts/sync-screenshots.js b/scripts/sync-screenshots.js new file mode 100644 index 0000000..f6d19a6 --- /dev/null +++ b/scripts/sync-screenshots.js @@ -0,0 +1,160 @@ +#!/usr/bin/env node +// Pulls the Ubuntu-framed marketing screenshots generated by wavekat-voice's +// screenshot pipeline (its docs/41 — `make screenshots` + `make +// screenshots-frames`) into public/screenshots/, a shared, reusable namespace +// keyed by scene (so `in-call` is one file every page can reference, not a +// copy per post). +// +// Why committed, not built on the fly +// ----------------------------------- +// The PNGs are git-ignored build artifacts in wavekat-voice, and the site +// builds on Cloudflare Pages without that private renderer. So the chosen, +// localized, already-framed shots are committed here as WebP and referenced by +// a plain public path (/screenshots//.webp) — from the blog today, +// from anywhere later. +// +// Single theme on purpose: these go in a single page read in one language, and +// a baked-in window frame can't follow the page's light/dark toggle — so we +// pick the light frame and keep it consistent. Per *language*, though — each +// localized surface shows the app in its own language. +// +// Source (first that exists), pointing at the *framed/ubuntu* output: +// WAVEKAT_FRAMES_DIR= — a framed/ubuntu dir directly +// WAVEKAT_LOCAL_REPOS=/wavekat-voice/apps/desktop/screenshots/framed/ubuntu +// ../wavekat-voice/apps/desktop/screenshots/framed/ubuntu (default sibling) +// +// To regenerate the source first, in the wavekat-voice repo: +// make screenshots && make screenshots-frames +// then here: +// npm run sync:screenshots +// +// Usage: +// node scripts/sync-screenshots.js # refresh committed WebPs +// node scripts/sync-screenshots.js --check # verify all present, no write + +import { existsSync, mkdirSync, rmSync, readdirSync, statSync } from "fs"; +import { join } from "path"; +import { fileURLToPath } from "url"; +import sharp from "sharp"; + +const root = join(fileURLToPath(import.meta.url), "../.."); +const destRoot = join(root, "public/screenshots"); + +// The scenes we actually surface. Only commit what's referenced — each shot +// should earn its place on a page, not exist because the pipeline can make it. +// Keep in sync with the `![](/screenshots//…)` refs across the site +// (today: src/content/blog/**/place-calls-from-the-command-line.md). +const SCENES = [ + "in-call", // a placed call, live transcript — reusable beyond the blog + "settings-automation", // enable command-line access + install the CLI + "settings-automation-agents", // one-click "connect an AI assistant" rows +]; + +// The nine shipped interface languages, by wavekat.com locale `code` — exactly +// the filename wavekat-voice writes (`-.png`). +const CODES = [ + "en", + "zh-Hans", + "zh-Hant", + "ja", + "ko", + "de", + "es", + "fr", + "it", +]; + +const THEME = "light"; // single, consistent theme for the blog + +// The framed shots are ~2080px wide (1920 content + shadow margins). A blog +// body is ~768px; 1200 is a crisp cap that keeps each WebP ~60–90 KB. +const MAX_WIDTH = 1200; +const WEBP_QUALITY = 86; + +function resolveSourceDir() { + const direct = process.env.WAVEKAT_FRAMES_DIR; + if (direct) return direct; + const base = process.env.WAVEKAT_LOCAL_REPOS; + if (base) + return join(base, "wavekat-voice/apps/desktop/screenshots/framed/ubuntu"); + return join(root, "../wavekat-voice/apps/desktop/screenshots/framed/ubuntu"); +} + +const check = process.argv.includes("--check"); + +function expected() { + const out = []; + for (const scene of SCENES) + for (const code of CODES) + out.push({ scene, name: `${code}.webp` }); + return out; +} + +if (check) { + const missing = expected().filter( + ({ scene, name }) => !existsSync(join(destRoot, scene, name)), + ); + if (missing.length) { + console.error( + `✗ ${missing.length} committed screenshot(s) missing:\n` + + missing.map((m) => ` ${m.scene}/${m.name}`).join("\n") + + `\n\nRegenerate with \`make screenshots && make screenshots-frames\` in ` + + `wavekat-voice, then \`npm run sync:screenshots\` here.`, + ); + process.exit(1); + } + console.log(`✓ all ${expected().length} screenshots present`); + process.exit(0); +} + +const srcRoot = resolveSourceDir(); +if (!existsSync(srcRoot)) { + console.error( + `✗ no framed screenshots at ${srcRoot}\n\n` + + `Generate them first — in your wavekat-voice checkout:\n` + + ` make screenshots && make screenshots-frames\n\n` + + `then point this script at them with WAVEKAT_FRAMES_DIR=, ` + + `WAVEKAT_LOCAL_REPOS=, or a sibling ../wavekat-voice checkout.`, + ); + process.exit(1); +} + +console.log(`▶ syncing screenshots from ${srcRoot}`); +rmSync(destRoot, { recursive: true, force: true }); + +let written = 0; +const missing = []; +for (const scene of SCENES) { + const srcDir = join(srcRoot, scene); + const destDir = join(destRoot, scene); + mkdirSync(destDir, { recursive: true }); + for (const code of CODES) { + const src = join(srcDir, `${code}-${THEME}.png`); + if (!existsSync(src)) { + missing.push(`${scene}/${code}-${THEME}.png`); + continue; + } + await sharp(src) + .resize({ width: MAX_WIDTH, withoutEnlargement: true }) + .webp({ quality: WEBP_QUALITY, effort: 6 }) + .toFile(join(destDir, `${code}.webp`)); + written++; + } +} + +console.log(`✓ wrote ${written} screenshots → public/screenshots/`); +if (missing.length) { + console.warn( + `\n⚠ ${missing.length} expected file(s) not found in source:\n` + + missing.map((m) => ` ${m}`).join("\n"), + ); + process.exitCode = 1; +} + +const totalKb = SCENES.reduce((sum, scene) => { + const d = join(destRoot, scene); + if (!existsSync(d)) return sum; + for (const f of readdirSync(d)) sum += statSync(join(d, f)).size / 1024; + return sum; +}, 0); +console.log(` (~${(totalKb / 1024).toFixed(1)} MB committed)`); diff --git a/src/content/blog/de/common-voice-explorer.md b/src/content/blog/de/common-voice-explorer.md index 8bffb99..5284ec2 100644 --- a/src/content/blog/de/common-voice-explorer.md +++ b/src/content/blog/de/common-voice-explorer.md @@ -49,7 +49,7 @@ Sie müssen kein technisches Wissen mitbringen, um es zu nutzen. Wenn Sie eine S ## Warum es uns wichtig ist -Bei WaveKat bauen wir [Sprach-KI-Werkzeuge für kleine Unternehmen](/blog/hello-world). Diese Arbeit hängt von hochwertigen Sprachdaten ab. Common Voice ist eine der wichtigsten offenen Ressourcen in diesem Bereich, und wir sind überzeugt, dass es allen zugutekommt, sie zugänglicher zu machen — nicht nur den Entwicklerinnen und Entwicklern. +Bei WaveKat bauen wir [Sprach-KI-Werkzeuge für kleine Unternehmen](/de/blog/hello-world/). Diese Arbeit hängt von hochwertigen Sprachdaten ab. Common Voice ist eine der wichtigsten offenen Ressourcen in diesem Bereich, und wir sind überzeugt, dass es allen zugutekommt, sie zugänglicher zu machen — nicht nur den Entwicklerinnen und Entwicklern. Offene Daten haben nur dann einen Wert, wenn Menschen sie tatsächlich erkunden können. Genau diese Lücke wollten wir schließen. diff --git a/src/content/blog/de/place-calls-from-the-command-line.md b/src/content/blog/de/place-calls-from-the-command-line.md index 284daaf..7243453 100644 --- a/src/content/blog/de/place-calls-from-the-command-line.md +++ b/src/content/blog/de/place-calls-from-the-command-line.md @@ -9,7 +9,7 @@ lang: "de" WaveKat Voice liefert jetzt ein Kommandozeilenwerkzeug, sodass ein Programm, dem Sie vertrauen — darunter ein KI-Assistent wie Claude — echte Telefonanrufe für Sie tätigen und verwalten kann. Bitten Sie Ihren Assistenten, „die Zahnarztpraxis anzurufen und zu warten, bis jemand abnimmt", und er wählt über die App, die Sie bereits geöffnet haben, verfolgt den Anruf und teilt Ihnen mit, wie er verlaufen ist. Es ist heute auf Mac und Linux in die App eingebaut und bleibt ausgeschaltet, bis Sie es aktivieren. -Das ist der nächste Schritt hin zu dem, worauf wir immer wieder zurückkommen: [jedem kleinen Unternehmen die Stimme eines großen zu geben](/blog/hello-world). Ein großes Unternehmen hat eine Telefonzentrale und Software, die sie steuert. Jetzt können Ihr Computer — und der darauf laufende Assistent — diese Telefonzentrale sein. +Das ist der nächste Schritt hin zu dem, worauf wir immer wieder zurückkommen: [jedem kleinen Unternehmen die Stimme eines großen zu geben](/de/blog/hello-world/). Ein großes Unternehmen hat eine Telefonzentrale und Software, die sie steuert. Jetzt können Ihr Computer — und der darauf laufende Assistent — diese Telefonzentrale sein. ## Was es tatsächlich tut @@ -22,15 +22,19 @@ Um die Grenze genau zu benennen, denn das ist wichtig: Der Assistent ist also die Hand am Wählfeld, nicht die Stimme in der Leitung. Das ist eine bewusste, ehrliche Grenze — und für die alltäglichen „verbinde mich mit einem Menschen"-Aufgaben ist es das meiste von dem, was Sie tatsächlich wollen. +![WaveKat Voice unter Ubuntu — ein vom Assistenten initiierter Anruf, laufend, mit Live-Transkript daneben.](/screenshots/in-call/de.webp) + ## Es gibt nichts zu installieren Der Befehl `wavekat-voice` ist dasselbe Programm, das die App ausführt — es liegt bereits auf Ihrer Festplatte, sobald Sie WaveKat Voice installieren. Kein zweiter Download, kein separates Paket, keine Version, die mit der App aus dem Takt geraten kann. -Es ist **standardmäßig ausgeschaltet**. Solange die Automatisierung aktiviert ist, kann jedes Programm, das Sie auf Ihrem Computer ausführen, über Ihr Konto Anrufe tätigen — und Anrufe können Kosten verursachen —, deshalb überlassen wir diese Entscheidung Ihnen. Schalten Sie es unter **Settings → Automation** ein; dort gibt es auch eine Schaltfläche, die `wavekat-voice` mit einem Klick zu Ihrem PATH hinzufügt, damit jedes Terminal es findet. +Es ist **standardmäßig ausgeschaltet**. Solange die Automatisierung aktiviert ist, kann jedes Programm, das Sie auf Ihrem Computer ausführen, über Ihr Konto Anrufe tätigen — und Anrufe können Kosten verursachen —, deshalb überlassen wir diese Entscheidung Ihnen. Schalten Sie es unter **Einstellungen → Automatisierung** (Settings → Automation) ein; dort gibt es auch eine Schaltfläche, die `wavekat-voice` mit einem Klick zu Ihrem PATH hinzufügt, damit jedes Terminal es findet. + +![WaveKat Voice unter Ubuntu — die Automatisierungseinstellungen mit aktiviertem Befehlszeilenzugriff und der Schaltfläche zum Installieren des Kommandozeilen-Tools.](/screenshots/settings-automation/de.webp) ## Verbinden Sie einen KI-Assistenten mit einem Klick -Der schnellste Weg ist die Seite **Settings → Automation** selbst. Sie sucht nach KI-Assistenten, die Sie bereits installiert haben, und bietet für jeden eine **Connect**-Schaltfläche an. Heute deckt das ab: +Der schnellste Weg ist die Seite **Einstellungen → Automatisierung** selbst. Sie sucht nach KI-Assistenten, die Sie bereits installiert haben, und bietet für jeden eine **Verbinden** (Connect)-Schaltfläche an. Heute deckt das ab: | Assistent | Wie er verbunden wird | |---|---| @@ -39,6 +43,8 @@ Der schnellste Weg ist die Seite **Settings → Automation** selbst. Sie sucht n Ein Klick richtet alles ein — nichts zu kopieren oder einzufügen. Danach bitten Sie den Assistenten einfach, einen Anruf zu tätigen. Zwei Dinge sind wissenswert: Manche Assistenten müssen vollständig neu gestartet werden (beenden und erneut öffnen), um die neuen Werkzeuge zu erkennen; und die Verbindung hält sich selbst aktuell — wenn WaveKat Voice im Hintergrund aktualisiert wird, wird jeder verbundene Assistent stillschweigend synchron gehalten, sodass Sie nie neu verbinden müssen. +![WaveKat Voice unter Ubuntu — KI-Assistenten wie Claude und Cursor verbinden, jeweils mit einer Ein-Klick-Schaltfläche „Verbinden“.](/screenshots/settings-automation-agents/de.webp) + ## Wie es im Terminal aussieht Jeder Befehl akzeptiert `--json` für maschinenlesbare Ausgabe, und genau das macht es für einen Assistenten angenehm, ihn zu steuern. Ein paar Beispiele: @@ -65,13 +71,13 @@ Ein paar Entscheidungen, mit denen wir zufrieden sind: - **Eine Binärdatei, keine neue Angriffsfläche.** Das Kommandozeilenwerkzeug ist der eigene Daemon der App mit einem anderen Hut auf — es erbt also die Signierung der App, ihre automatischen Updates und ihre Sicherheitsprüfung kostenlos und kann nie eine veraltete Version sein. - **Die Binärdatei ist die Quelle der Wahrheit.** Der Hilfetext trägt die Exit-Codes und Beispiele; die Assistenten-Integrationen verweisen auf `wavekat-voice --help`, statt eine Befehlsliste einzufrieren, die veralten würde. Aktualisieren Sie die App, und die Werkzeuge aktualisieren sich mit. -- **Standardmäßig aus, opt-in, widerrufbar.** Einen kostenpflichtigen Telefonanruf zu tätigen ist folgenreich, deshalb bleibt die Automatisierung aus, bis Sie darum bitten, und **Remove** hängt jeden Assistenten wieder aus, ohne den Rest seiner Einstellungen anzutasten. +- **Standardmäßig aus, opt-in, widerrufbar.** Einen kostenpflichtigen Telefonanruf zu tätigen ist folgenreich, deshalb bleibt die Automatisierung aus, bis Sie darum bitten, und **Entfernen** (Remove) hängt jeden Assistenten wieder aus, ohne den Rest seiner Einstellungen anzutasten. ## Häufig gestellte Fragen ### Kann ein KI-Assistent mit WaveKat Voice Telefonanrufe tätigen? -Ja. Mit aktivierter Automatisierung in WaveKat Voice (Settings → Automation) kann ein KI-Assistent wie Claude über das Kommandozeilenwerkzeug der App oder ihren MCP-Server echte Telefonanrufe tätigen, verfolgen und beenden. Der Assistent steuert den Anruf; Sie sprechen darin. +Ja. Mit aktivierter Automatisierung in WaveKat Voice (Einstellungen → Automatisierung) kann ein KI-Assistent wie Claude über das Kommandozeilenwerkzeug der App oder ihren MCP-Server echte Telefonanrufe tätigen, verfolgen und beenden. Der Assistent steuert den Anruf; Sie sprechen darin. ### Spricht die KI im Anruf statt mir? @@ -79,7 +85,7 @@ Nein. WaveKat Voice leitet das Anrufaudio über das Mikrofon und die Lautspreche ### Muss ich etwas zusätzlich installieren, um die Kommandozeile zu nutzen? -Nein. Der Befehl `wavekat-voice` wird mit der WaveKat-Voice-App geliefert, ist also bereits auf Ihrem Computer. Sie müssen nur die Automatisierung unter Settings → Automation einschalten und optional auf „Install command-line tool" klicken, um sie zu Ihrem PATH hinzuzufügen. +Nein. Der Befehl `wavekat-voice` wird mit der WaveKat-Voice-App geliefert, ist also bereits auf Ihrem Computer. Sie müssen nur die Automatisierung unter Einstellungen → Automatisierung einschalten und optional auf „Befehlszeilenwerkzeug installieren (Install command-line tool)" klicken, um sie zu Ihrem PATH hinzuzufügen. ### Ist es sicher, die Automatisierung eingeschaltet zu lassen? @@ -95,6 +101,6 @@ WaveKat Voice läuft heute auf Mac und Linux, Windows folgt, sobald die Nachfrag ## Probieren Sie es aus -[Laden Sie WaveKat Voice herunter](/voice/download/), öffnen Sie **Settings → Automation** und verbinden Sie Ihren Assistenten. Die vollständige Befehlsreferenz — jeder Befehl, seine JSON-Ausgabe und die Exit-Codes — finden Sie in der [Automatisierungsdokumentation](/voice/automation/). +[Laden Sie WaveKat Voice herunter](/de/voice/download/), öffnen Sie **Einstellungen → Automatisierung** und verbinden Sie Ihren Assistenten. Die vollständige Befehlsreferenz — jeder Befehl, seine JSON-Ausgabe und die Exit-Codes — finden Sie in der [Automatisierungsdokumentation](/docs/voice/automation/). Wir stehen hier erst am Anfang. Anrufe zu steuern ist die Grundlage; ein Assistent, der auch das Gespräch selbst führen kann, ist der nächste Schritt. diff --git a/src/content/blog/es/common-voice-explorer.md b/src/content/blog/es/common-voice-explorer.md index 4a22494..50b6da1 100644 --- a/src/content/blog/es/common-voice-explorer.md +++ b/src/content/blog/es/common-voice-explorer.md @@ -49,7 +49,7 @@ No hace falta tener conocimientos técnicos para usarlo. Si sabe usar una barra ## Por qué nos importa -En WaveKat estamos construyendo [herramientas de IA de voz para pequeñas empresas](/blog/hello-world). Ese trabajo depende de datos de voz de alta calidad. Common Voice es uno de los recursos abiertos más importantes en este ámbito, y creemos que hacerlo más accesible beneficia a todos, no solo a los ingenieros. +En WaveKat estamos construyendo [herramientas de IA de voz para pequeñas empresas](/es/blog/hello-world/). Ese trabajo depende de datos de voz de alta calidad. Common Voice es uno de los recursos abiertos más importantes en este ámbito, y creemos que hacerlo más accesible beneficia a todos, no solo a los ingenieros. Los datos abiertos solo tienen valor si las personas pueden explorarlos de verdad. Esa es la brecha que quisimos cerrar. diff --git a/src/content/blog/es/place-calls-from-the-command-line.md b/src/content/blog/es/place-calls-from-the-command-line.md index 712f3fb..263ee56 100644 --- a/src/content/blog/es/place-calls-from-the-command-line.md +++ b/src/content/blog/es/place-calls-from-the-command-line.md @@ -9,7 +9,7 @@ lang: "es" WaveKat Voice ahora incluye una herramienta de línea de comandos, para que un programa de su confianza —incluido un asistente de IA como Claude— pueda realizar y gestionar llamadas telefónicas reales por usted. Pídale a su asistente que "llame al dentista y espere hasta que alguien conteste", y marcará a través de la aplicación que ya tiene abierta, seguirá la llamada y le dirá cómo fue. Hoy está integrado en la aplicación en Mac y Linux, y permanece desactivado hasta que usted lo active. -Este es el siguiente paso hacia aquello a lo que siempre volvemos: [darle a cada pequeña empresa la voz de una grande](/blog/hello-world). Una gran empresa tiene una centralita y el software que la maneja. Ahora su computadora —y el asistente que se ejecuta en ella— puede ser esa centralita. +Este es el siguiente paso hacia aquello a lo que siempre volvemos: [darle a cada pequeña empresa la voz de una grande](/es/blog/hello-world/). Una gran empresa tiene una centralita y el software que la maneja. Ahora su computadora —y el asistente que se ejecuta en ella— puede ser esa centralita. ## Qué hace realmente @@ -22,15 +22,19 @@ Para ser precisos sobre el límite, porque importa: Así que el asistente es la mano sobre el teclado de marcación, no una voz en la línea. Es una línea deliberada y honesta, y para las tareas cotidianas de "comunícame con una persona", cubre la mayor parte de lo que en realidad usted quiere. +![WaveKat Voice en Ubuntu: una llamada iniciada por el asistente, en curso, con la transcripción en directo al lado.](/screenshots/in-call/es.webp) + ## No hay nada que instalar El comando `wavekat-voice` es el mismo programa que ejecuta la aplicación: ya está en su disco en el momento en que instala WaveKat Voice. No hay una segunda descarga, ni un paquete por separado, ni una versión que pueda desincronizarse de la aplicación. -Está **desactivado de forma predeterminada**. Mientras la automatización está activada, cualquier programa que ejecute en su computadora puede realizar llamadas a través de su cuenta —y las llamadas pueden costar dinero—, así que dejamos esa decisión en sus manos. Actívela en **Settings → Automation**, donde también hay un botón de un solo clic para añadir `wavekat-voice` a su PATH, de modo que cualquier terminal pueda encontrarlo. +Está **desactivado de forma predeterminada**. Mientras la automatización está activada, cualquier programa que ejecute en su computadora puede realizar llamadas a través de su cuenta —y las llamadas pueden costar dinero—, así que dejamos esa decisión en sus manos. Actívela en **Ajustes → Automatización** (Settings → Automation), donde también hay un botón de un solo clic para añadir `wavekat-voice` a su PATH, de modo que cualquier terminal pueda encontrarlo. + +![WaveKat Voice en Ubuntu: los ajustes de Automatización con el acceso por línea de comandos activado y el botón para instalar la herramienta de línea de comandos.](/screenshots/settings-automation/es.webp) ## Conecte un asistente de IA en un solo clic -La vía más rápida es la propia página **Settings → Automation**. Busca los asistentes de IA que ya tiene instalados y ofrece un botón **Connect** para cada uno. Hoy esto abarca: +La vía más rápida es la propia página **Ajustes → Automatización**. Busca los asistentes de IA que ya tiene instalados y ofrece un botón **Conectar** (Connect) para cada uno. Hoy esto abarca: | Asistente | Cómo se conecta | |---|---| @@ -39,6 +43,8 @@ La vía más rápida es la propia página **Settings → Automation**. Busca los Un clic lo deja todo conectado, sin nada que copiar ni pegar. Después de eso, solo tiene que pedirle al asistente que haga una llamada. Dos cosas que conviene saber: algunos asistentes necesitan un reinicio completo (cerrar y volver a abrir) para detectar las nuevas herramientas, y la conexión se mantiene al día por sí sola: cuando WaveKat Voice se actualiza en segundo plano, cualquier asistente que haya conectado se mantiene sincronizado de forma silenciosa, así que nunca tiene que volver a conectarlo. +![WaveKat Voice en Ubuntu: conectar asistentes de IA como Claude y Cursor, cada uno con un botón de Conectar de un clic.](/screenshots/settings-automation-agents/es.webp) + ## Cómo se ve desde una terminal Cada comando admite `--json` para obtener una salida legible por máquina, que es lo que hace cómodo que un asistente lo maneje. Algunos ejemplos: @@ -65,13 +71,13 @@ Algunas decisiones con las que estamos satisfechos: - **Un solo binario, sin nueva superficie.** La herramienta de línea de comandos es el propio daemon de la aplicación con otro sombrero, así que hereda gratis la firma de la aplicación, sus actualizaciones automáticas y su revisión de seguridad, y nunca puede ser una versión obsoleta. - **El binario es la fuente de la verdad.** El texto de ayuda lleva los códigos de salida y los ejemplos; las integraciones del asistente apuntan a `wavekat-voice --help` en lugar de congelar una lista de comandos que se quedaría desactualizada. Actualice la aplicación y las herramientas se actualizan con ella. -- **Desactivado de forma predeterminada, opcional y revocable.** Realizar una llamada telefónica de pago es algo de peso, así que la automatización permanece desactivada hasta que usted la solicite, y **Remove** vuelve a desvincular cualquier asistente sin tocar el resto de sus ajustes. +- **Desactivado de forma predeterminada, opcional y revocable.** Realizar una llamada telefónica de pago es algo de peso, así que la automatización permanece desactivada hasta que usted la solicite, y **Quitar** (Remove) vuelve a desvincular cualquier asistente sin tocar el resto de sus ajustes. ## Preguntas frecuentes ### ¿Puede un asistente de IA realizar llamadas telefónicas con WaveKat Voice? -Sí. Con la automatización habilitada en WaveKat Voice (Settings → Automation), un asistente de IA como Claude puede realizar, seguir y finalizar llamadas telefónicas reales a través de la herramienta de línea de comandos de la aplicación o de su servidor MCP. El asistente maneja la llamada; usted habla en ella. +Sí. Con la automatización habilitada en WaveKat Voice (Ajustes → Automatización), un asistente de IA como Claude puede realizar, seguir y finalizar llamadas telefónicas reales a través de la herramienta de línea de comandos de la aplicación o de su servidor MCP. El asistente maneja la llamada; usted habla en ella. ### ¿La IA habla en la llamada en lugar de mí? @@ -79,7 +85,7 @@ No. WaveKat Voice enruta el audio de la llamada a través del micrófono y los a ### ¿Necesito instalar algo más para usar la línea de comandos? -No. El comando `wavekat-voice` viene dentro de la aplicación WaveKat Voice, así que ya está en su computadora. Solo necesita activar la automatización en Settings → Automation y, opcionalmente, hacer clic en "Install command-line tool" para añadirlo a su PATH. +No. El comando `wavekat-voice` viene dentro de la aplicación WaveKat Voice, así que ya está en su computadora. Solo necesita activar la automatización en Ajustes → Automatización y, opcionalmente, hacer clic en "Instalar herramienta de línea de comandos (Install command-line tool)" para añadirlo a su PATH. ### ¿Es seguro dejar la automatización activada? @@ -95,6 +101,6 @@ WaveKat Voice funciona hoy en Mac y Linux, y Windows llegará cuando haya demand ## Pruébelo -[Descargue WaveKat Voice](/voice/download/), abra **Settings → Automation** y conecte su asistente. La referencia completa de comandos —cada comando, su salida JSON y los códigos de salida— se encuentra en la [documentación de automatización](/voice/automation/). +[Descargue WaveKat Voice](/es/voice/download/), abra **Ajustes → Automatización** y conecte su asistente. La referencia completa de comandos —cada comando, su salida JSON y los códigos de salida— se encuentra en la [documentación de automatización](/docs/voice/automation/). Esto no ha hecho más que empezar. Manejar las llamadas es la base; un asistente que también pueda sostener la conversación es hacia donde esto se dirige a continuación. diff --git a/src/content/blog/fr/common-voice-explorer.md b/src/content/blog/fr/common-voice-explorer.md index 6141ec3..9b04e5c 100644 --- a/src/content/blog/fr/common-voice-explorer.md +++ b/src/content/blog/fr/common-voice-explorer.md @@ -49,7 +49,7 @@ Nul besoin d'être technique pour l'utiliser. Si vous savez vous servir d'une ba ## Pourquoi cela compte pour nous -Chez WaveKat, nous construisons des [outils d'IA vocale pour les petites entreprises](/blog/hello-world). Ce travail dépend de données vocales de haute qualité. Common Voice est l'une des ressources ouvertes les plus importantes dans ce domaine, et nous pensons que la rendre plus accessible profite à tout le monde — pas seulement aux ingénieurs. +Chez WaveKat, nous construisons des [outils d'IA vocale pour les petites entreprises](/fr/blog/hello-world/). Ce travail dépend de données vocales de haute qualité. Common Voice est l'une des ressources ouvertes les plus importantes dans ce domaine, et nous pensons que la rendre plus accessible profite à tout le monde — pas seulement aux ingénieurs. Les données ouvertes n'ont de valeur que si les gens peuvent réellement les explorer. C'est le fossé que nous voulions combler. diff --git a/src/content/blog/fr/place-calls-from-the-command-line.md b/src/content/blog/fr/place-calls-from-the-command-line.md index 13e66b4..a04685c 100644 --- a/src/content/blog/fr/place-calls-from-the-command-line.md +++ b/src/content/blog/fr/place-calls-from-the-command-line.md @@ -9,7 +9,7 @@ lang: "fr" WaveKat Voice est désormais livré avec un outil en ligne de commande, pour qu'un programme en qui vous avez confiance — y compris un assistant IA comme Claude — puisse passer et gérer de vrais appels téléphoniques à votre place. Demandez à votre assistant d'« appeler le dentiste et d'attendre que quelqu'un décroche », et il compose le numéro via l'application que vous avez déjà ouverte, suit l'appel et vous dit comment il s'est déroulé. C'est intégré à l'application dès aujourd'hui sur Mac et Linux, et c'est désactivé jusqu'à ce que vous l'activiez. -C'est la prochaine étape vers ce à quoi nous revenons sans cesse : [donner à chaque petite entreprise la voix d'une grande](/blog/hello-world). Une grande entreprise dispose d'un standard téléphonique et d'un logiciel qui le pilote. Désormais, votre ordinateur — et l'assistant qui s'y exécute — peut être ce standard. +C'est la prochaine étape vers ce à quoi nous revenons sans cesse : [donner à chaque petite entreprise la voix d'une grande](/fr/blog/hello-world/). Une grande entreprise dispose d'un standard téléphonique et d'un logiciel qui le pilote. Désormais, votre ordinateur — et l'assistant qui s'y exécute — peut être ce standard. ## Ce qu'il fait réellement @@ -22,15 +22,19 @@ Pour être précis sur la limite, car elle compte : Ainsi, l'assistant est la main sur le clavier, pas la voix sur la ligne. C'est une limite délibérée et honnête — et pour les corvées quotidiennes du type « passe-moi un humain », c'est l'essentiel de ce que vous voulez vraiment. +![WaveKat Voice sous Ubuntu — un appel lancé par l'assistant, en cours, avec la transcription en direct à côté.](/screenshots/in-call/fr.webp) + ## Il n'y a rien à installer La commande `wavekat-voice` est le même programme qui fait tourner l'application — il est déjà sur votre disque dès l'instant où vous installez WaveKat Voice. Pas de second téléchargement, pas de paquet séparé, aucune version susceptible de se désynchroniser de l'application. -Elle est **désactivée par défaut**. Tant que l'automatisation est active, n'importe quel programme que vous exécutez sur votre ordinateur peut passer des appels via votre compte — et les appels peuvent coûter de l'argent — alors nous vous laissons cette décision. Activez-la dans **Settings → Automation**, où se trouve aussi un bouton en un clic pour ajouter `wavekat-voice` à votre PATH, afin que n'importe quel terminal puisse le trouver. +Elle est **désactivée par défaut**. Tant que l'automatisation est active, n'importe quel programme que vous exécutez sur votre ordinateur peut passer des appels via votre compte — et les appels peuvent coûter de l'argent — alors nous vous laissons cette décision. Activez-la dans **Réglages → Automatisation** (Settings → Automation), où se trouve aussi un bouton en un clic pour ajouter `wavekat-voice` à votre PATH, afin que n'importe quel terminal puisse le trouver. + +![WaveKat Voice sous Ubuntu — les réglages d'Automatisation avec l'accès en ligne de commande activé et le bouton pour installer l'outil en ligne de commande.](/screenshots/settings-automation/fr.webp) ## Connectez un assistant IA en un clic -Le chemin le plus rapide est la page **Settings → Automation** elle-même. Elle recherche les assistants IA que vous avez déjà installés et propose un bouton **Connect** pour chacun. Aujourd'hui, cela couvre : +Le chemin le plus rapide est la page **Réglages → Automatisation** elle-même. Elle recherche les assistants IA que vous avez déjà installés et propose un bouton **Connecter** (Connect) pour chacun. Aujourd'hui, cela couvre : | Assistant | Comment il se connecte | |---|---| @@ -39,6 +43,8 @@ Le chemin le plus rapide est la page **Settings → Automation** elle-même. Ell Un clic suffit pour tout brancher — rien à copier ni à coller. Ensuite, il vous suffit de demander à l'assistant de passer un appel. Deux choses valent la peine d'être sues : certains assistants nécessitent un redémarrage complet (quitter et rouvrir) pour reconnaître les nouveaux outils, et la connexion se maintient à jour d'elle-même — lorsque WaveKat Voice se met à jour en arrière-plan, tout assistant que vous avez connecté est discrètement gardé synchronisé, si bien que vous n'avez jamais à le reconnecter. +![WaveKat Voice sous Ubuntu — connecter des assistants IA comme Claude et Cursor, chacun avec un bouton Connecter en un clic.](/screenshots/settings-automation-agents/fr.webp) + ## À quoi cela ressemble depuis un terminal Chaque commande accepte `--json` pour une sortie lisible par machine, ce qui la rend confortable à piloter pour un assistant. Quelques exemples : @@ -65,13 +71,13 @@ Quelques choix dont nous sommes contents : - **Un seul binaire, aucune nouvelle surface.** L'outil en ligne de commande est le propre démon de l'application avec une autre casquette — il hérite donc gratuitement de la signature de l'application, de ses mises à jour automatiques et de sa revue de sécurité, et il ne peut jamais être une version périmée. - **Le binaire est la source de vérité.** Le texte d'aide contient les codes de sortie et les exemples ; les intégrations des assistants pointent vers `wavekat-voice --help` plutôt que de figer une liste de commandes qui finirait par pourrir. Mettez à jour l'application et les outils se mettent à jour avec elle. -- **Désactivé par défaut, sur acceptation, révocable.** Passer un appel téléphonique payant a des conséquences, alors l'automatisation reste désactivée jusqu'à ce que vous la demandiez, et **Remove** débranche n'importe quel assistant à nouveau sans toucher au reste de ses réglages. +- **Désactivé par défaut, sur acceptation, révocable.** Passer un appel téléphonique payant a des conséquences, alors l'automatisation reste désactivée jusqu'à ce que vous la demandiez, et **Retirer** (Remove) débranche n'importe quel assistant à nouveau sans toucher au reste de ses réglages. ## Foire aux questions ### Un assistant IA peut-il passer des appels téléphoniques avec WaveKat Voice ? -Oui. Avec l'automatisation activée dans WaveKat Voice (Settings → Automation), un assistant IA comme Claude peut passer, suivre et terminer de vrais appels téléphoniques via l'outil en ligne de commande de l'application ou son serveur MCP. L'assistant pilote l'appel ; c'est vous qui y parlez. +Oui. Avec l'automatisation activée dans WaveKat Voice (Réglages → Automatisation), un assistant IA comme Claude peut passer, suivre et terminer de vrais appels téléphoniques via l'outil en ligne de commande de l'application ou son serveur MCP. L'assistant pilote l'appel ; c'est vous qui y parlez. ### Est-ce l'IA qui parle dans l'appel à ma place ? @@ -79,7 +85,7 @@ Non. WaveKat Voice achemine l'audio de l'appel par le microphone et les haut-par ### Dois-je installer quoi que ce soit de plus pour utiliser la ligne de commande ? -Non. La commande `wavekat-voice` est livrée à l'intérieur de l'application WaveKat Voice, elle est donc déjà sur votre ordinateur. Il vous suffit d'activer l'automatisation dans Settings → Automation, et éventuellement de cliquer sur « Install command-line tool » pour l'ajouter à votre PATH. +Non. La commande `wavekat-voice` est livrée à l'intérieur de l'application WaveKat Voice, elle est donc déjà sur votre ordinateur. Il vous suffit d'activer l'automatisation dans Réglages → Automatisation, et éventuellement de cliquer sur « Installer l'outil en ligne de commande (Install command-line tool) » pour l'ajouter à votre PATH. ### Est-il sûr de laisser l'automatisation activée ? @@ -95,6 +101,6 @@ WaveKat Voice fonctionne aujourd'hui sur Mac et Linux, avec Windows à venir qua ## Essayez-le -[Téléchargez WaveKat Voice](/voice/download/), ouvrez **Settings → Automation** et connectez votre assistant. La référence complète des commandes — chaque commande, sa sortie JSON et les codes de sortie — se trouve dans la [documentation sur l'automatisation](/voice/automation/). +[Téléchargez WaveKat Voice](/fr/voice/download/), ouvrez **Réglages → Automatisation** et connectez votre assistant. La référence complète des commandes — chaque commande, sa sortie JSON et les codes de sortie — se trouve dans la [documentation sur l'automatisation](/docs/voice/automation/). Nous ne faisons que commencer ici. Piloter les appels est la fondation ; un assistant capable aussi de tenir la conversation, c'est là où cela ira ensuite. diff --git a/src/content/blog/it/common-voice-explorer.md b/src/content/blog/it/common-voice-explorer.md index c402e3b..e5a233f 100644 --- a/src/content/blog/it/common-voice-explorer.md +++ b/src/content/blog/it/common-voice-explorer.md @@ -49,7 +49,7 @@ Non serve essere tecnici per usarlo. Se sai usare una barra di ricerca e cliccar ## Perché è importante per noi -In WaveKat stiamo costruendo [strumenti di AI vocale per le piccole imprese](/blog/hello-world). Quel lavoro dipende da dati vocali di alta qualità. Common Voice è una delle risorse aperte più importanti in questo ambito e crediamo che renderlo più accessibile vada a vantaggio di tutti — non solo degli ingegneri. +In WaveKat stiamo costruendo [strumenti di AI vocale per le piccole imprese](/it/blog/hello-world/). Quel lavoro dipende da dati vocali di alta qualità. Common Voice è una delle risorse aperte più importanti in questo ambito e crediamo che renderlo più accessibile vada a vantaggio di tutti — non solo degli ingegneri. I dati aperti hanno valore solo se le persone possono davvero esplorarli. È questo il divario che volevamo colmare. diff --git a/src/content/blog/it/place-calls-from-the-command-line.md b/src/content/blog/it/place-calls-from-the-command-line.md index b39ca79..05a55d6 100644 --- a/src/content/blog/it/place-calls-from-the-command-line.md +++ b/src/content/blog/it/place-calls-from-the-command-line.md @@ -9,7 +9,7 @@ lang: "it" WaveKat Voice ora include uno strumento da riga di comando, così un programma di cui ti fidi — incluso un assistente AI come Claude — può effettuare e gestire vere telefonate per te. Chiedi al tuo assistente di "chiamare il dentista e aspettare finché qualcuno non risponde", e comporrà il numero attraverso l’app che hai già aperta, seguirà la chiamata e ti dirà com’è andata. Oggi è integrato nell’app su Mac e Linux, ed è disattivato finché non lo attivi. -Questo è il passo successivo verso ciò a cui torniamo sempre: [dare a ogni piccola impresa la voce di una grande](/blog/hello-world). Una grande azienda ha un centralino e il software che lo guida. Ora il tuo computer — e l’assistente che ci gira sopra — può essere quel centralino. +Questo è il passo successivo verso ciò a cui torniamo sempre: [dare a ogni piccola impresa la voce di una grande](/it/blog/hello-world/). Una grande azienda ha un centralino e il software che lo guida. Ora il tuo computer — e l’assistente che ci gira sopra — può essere quel centralino. ## Cosa fa davvero @@ -22,15 +22,19 @@ Per essere precisi sul confine, perché è importante: Quindi l’assistente è la mano sul tastierino, non una voce sulla linea. È una distinzione deliberata e onesta — e per le incombenze quotidiane del tipo "mettimi in contatto con una persona", è gran parte di ciò che vuoi davvero. +![WaveKat Voice su Ubuntu — una chiamata avviata dall'assistente, in corso, con la trascrizione dal vivo a fianco.](/screenshots/in-call/it.webp) + ## Non c’è nulla da installare Il comando `wavekat-voice` è lo stesso programma che fa girare l’app — è già sul tuo disco nel momento in cui installi WaveKat Voice. Nessun secondo download, nessun pacchetto separato, nessuna versione che possa disallinearsi dall’app. -È **disattivato per impostazione predefinita**. Mentre l’automazione è attiva, qualsiasi programma tu esegua sul computer può effettuare chiamate tramite il tuo account — e le chiamate possono costare denaro — quindi lasciamo a te questa decisione. Attivala in **Settings → Automation**, dove c’è anche un pulsante in un clic per aggiungere `wavekat-voice` al tuo PATH, così qualsiasi terminale possa trovarlo. +È **disattivato per impostazione predefinita**. Mentre l’automazione è attiva, qualsiasi programma tu esegua sul computer può effettuare chiamate tramite il tuo account — e le chiamate possono costare denaro — quindi lasciamo a te questa decisione. Attivala in **Impostazioni → Automazione** (Settings → Automation), dove c’è anche un pulsante in un clic per aggiungere `wavekat-voice` al tuo PATH, così qualsiasi terminale possa trovarlo. + +![WaveKat Voice su Ubuntu — le impostazioni di Automazione con l'accesso da riga di comando attivato e il pulsante per installare lo strumento da riga di comando.](/screenshots/settings-automation/it.webp) ## Collega un assistente AI in un clic -Il percorso più veloce è la pagina **Settings → Automation** stessa. Cerca gli assistenti AI che hai già installato e offre un pulsante **Connect** per ciascuno. Oggi questo copre: +Il percorso più veloce è la pagina **Impostazioni → Automazione** stessa. Cerca gli assistenti AI che hai già installato e offre un pulsante **Connetti** (Connect) per ciascuno. Oggi questo copre: | Assistente | Come si collega | |---|---| @@ -39,6 +43,8 @@ Il percorso più veloce è la pagina **Settings → Automation** stessa. Cerca g Un clic completa il collegamento — nulla da copiare o incollare. Dopodiché, basta chiedere all’assistente di effettuare una chiamata. Due cose da sapere: alcuni assistenti richiedono un riavvio completo (chiudere e riaprire) per riconoscere i nuovi strumenti, e la connessione si mantiene aggiornata da sola — quando WaveKat Voice si aggiorna in background, qualsiasi assistente che hai collegato viene tenuto silenziosamente in sincronia, così non devi mai ricollegarlo. +![WaveKat Voice su Ubuntu — collegare assistenti AI come Claude e Cursor, ciascuno con un pulsante Connetti con un clic.](/screenshots/settings-automation-agents/it.webp) + ## Come appare da un terminale Ogni comando accetta `--json` per un output leggibile dalle macchine, ed è proprio questo a renderlo comodo da guidare per un assistente. Qualche esempio: @@ -65,13 +71,13 @@ Alcune scelte di cui siamo soddisfatti: - **Un solo binario, nessuna nuova superficie.** Lo strumento da riga di comando è il demone stesso dell’app con un altro cappello — quindi eredita gratuitamente la firma dell’app, i suoi aggiornamenti automatici e la sua revisione di sicurezza, e non potrà mai essere una versione obsoleta. - **Il binario è la fonte di verità.** Il testo di aiuto contiene i codici di uscita e gli esempi; le integrazioni degli assistenti puntano a `wavekat-voice --help` invece di congelare un elenco di comandi destinato a invecchiare. Aggiorna l’app e gli strumenti si aggiornano con essa. -- **Disattivata per impostazione predefinita, attivabile su richiesta, revocabile.** Effettuare una telefonata a pagamento è una cosa importante, quindi l’automazione resta disattivata finché non la richiedi, e **Remove** sgancia di nuovo qualsiasi assistente senza toccare il resto delle sue impostazioni. +- **Disattivata per impostazione predefinita, attivabile su richiesta, revocabile.** Effettuare una telefonata a pagamento è una cosa importante, quindi l’automazione resta disattivata finché non la richiedi, e **Rimuovi** (Remove) sgancia di nuovo qualsiasi assistente senza toccare il resto delle sue impostazioni. ## Domande frequenti ### Un assistente AI può effettuare telefonate con WaveKat Voice? -Sì. Con l’automazione abilitata in WaveKat Voice (Settings → Automation), un assistente AI come Claude può effettuare, seguire e terminare vere telefonate tramite lo strumento da riga di comando dell’app o il suo server MCP. L’assistente guida la chiamata; a parlare sei tu. +Sì. Con l’automazione abilitata in WaveKat Voice (Impostazioni → Automazione), un assistente AI come Claude può effettuare, seguire e terminare vere telefonate tramite lo strumento da riga di comando dell’app o il suo server MCP. L’assistente guida la chiamata; a parlare sei tu. ### È l’AI a parlare durante la chiamata al posto mio? @@ -79,7 +85,7 @@ No. WaveKat Voice instrada l’audio della chiamata attraverso il microfono e gl ### Devo installare qualcosa in più per usare la riga di comando? -No. Il comando `wavekat-voice` è incluso nell’app WaveKat Voice, quindi è già sul tuo computer. Devi solo attivare l’automazione in Settings → Automation e, facoltativamente, cliccare su "Install command-line tool" per aggiungerlo al tuo PATH. +No. Il comando `wavekat-voice` è incluso nell’app WaveKat Voice, quindi è già sul tuo computer. Devi solo attivare l’automazione in Impostazioni → Automazione e, facoltativamente, cliccare su "Installa lo strumento da riga di comando (Install command-line tool)" per aggiungerlo al tuo PATH. ### È sicuro lasciare l’automazione attiva? @@ -95,6 +101,6 @@ WaveKat Voice oggi gira su Mac e Linux, con Windows in arrivo quando ci sarà ri ## Provalo -[Scarica WaveKat Voice](/voice/download/), apri **Settings → Automation** e collega il tuo assistente. Il riferimento completo dei comandi — ogni comando, il suo output JSON e i codici di uscita — si trova nella [documentazione sull’automazione](/voice/automation/). +[Scarica WaveKat Voice](/it/voice/download/), apri **Impostazioni → Automazione** e collega il tuo assistente. Il riferimento completo dei comandi — ogni comando, il suo output JSON e i codici di uscita — si trova nella [documentazione sull’automazione](/docs/voice/automation/). Qui stiamo solo iniziando. Guidare le chiamate è la base; un assistente capace anche di sostenere la conversazione è dove tutto questo andrà a finire. diff --git a/src/content/blog/ja/common-voice-explorer.md b/src/content/blog/ja/common-voice-explorer.md index c29efdb..b50289a 100644 --- a/src/content/blog/ja/common-voice-explorer.md +++ b/src/content/blog/ja/common-voice-explorer.md @@ -49,7 +49,7 @@ Common Voice には数十の言語にわたる数百万もの音声クリップ ## なぜ私たちにとって大切なのか -WaveKat では、私たちは[小規模ビジネスのための音声 AI ツール](/blog/hello-world)を作っています。この取り組みは高品質な音声データに支えられています。Common Voice はこの分野で最も重要なオープンリソースのひとつであり、それをより使いやすくすることは、エンジニアだけでなく、すべての人に恩恵をもたらすと私たちは信じています。 +WaveKat では、私たちは[小規模ビジネスのための音声 AI ツール](/ja/blog/hello-world/)を作っています。この取り組みは高品質な音声データに支えられています。Common Voice はこの分野で最も重要なオープンリソースのひとつであり、それをより使いやすくすることは、エンジニアだけでなく、すべての人に恩恵をもたらすと私たちは信じています。 オープンデータは、人々が実際にそれを探索できてはじめて価値を持ちます。私たちが埋めたかったのは、まさにその隔たりです。 diff --git a/src/content/blog/ja/place-calls-from-the-command-line.md b/src/content/blog/ja/place-calls-from-the-command-line.md index 3e277a9..afb9531 100644 --- a/src/content/blog/ja/place-calls-from-the-command-line.md +++ b/src/content/blog/ja/place-calls-from-the-command-line.md @@ -9,7 +9,7 @@ lang: "ja" WaveKat Voice にコマンドラインツールが付属するようになりました。これにより、あなたが信頼するプログラム —— Claude のような AI アシスタントを含む —— が、あなたの代わりに本物の電話をかけたり管理したりできます。アシスタントに「歯医者に電話して、誰かが出るまで待って」と頼めば、すでに開いているアプリを通して発信し、通話を追い、結果がどうだったかを伝えてくれます。今日では Mac と Linux 上のアプリに組み込まれており、あなたが手動でオンにするまでは無効のままです。 -これは、私たちが何度も立ち返るあの目標に向けた次の一歩です。[すべての小規模ビジネスに大企業のような声を](/blog/hello-world)。大企業には電話交換機と、それを動かすソフトウェアがあります。今や、あなたのコンピューター —— そしてその上で動くアシスタント —— が、その交換機になれるのです。 +これは、私たちが何度も立ち返るあの目標に向けた次の一歩です。[すべての小規模ビジネスに大企業のような声を](/ja/blog/hello-world/)。大企業には電話交換機と、それを動かすソフトウェアがあります。今や、あなたのコンピューター —— そしてその上で動くアシスタント —— が、その交換機になれるのです。 ## それが実際にすること @@ -22,15 +22,19 @@ WaveKat Voice には、ずっとバックグラウンドで静かに動く電話 つまりアシスタントはダイヤルパッド上の手であって、回線上の声ではありません。これは意図的で、誠実な一線です —— そして日常の「人間につないでほしい」という用事については、それがあなたの本当に求めるものの大半なのです。 +![Ubuntu 上の WaveKat Voice — アシスタントが発信した通話が進行中で、横にリアルタイムの文字起こしを表示。](/screenshots/in-call/ja.webp) + ## インストールするものは何もない `wavekat-voice` コマンドは、アプリを動かすのと同じプログラムです —— WaveKat Voice をインストールした瞬間に、すでにあなたのディスク上にあります。2 つ目のダウンロードも、別のパッケージも、アプリと同期がずれてしまうバージョンもありません。 -これは**デフォルトで無効**です。自動化が有効な間は、あなたがコンピューター上で実行するどんなプログラムも、あなたのアカウントを通じて電話をかけられます —— そして通話は料金が発生することがあります —— そのため、私たちはその判断をあなたに委ねています。**Settings → Automation** でオンにしてください。そこには、どのターミナルからでも見つけられるよう `wavekat-voice` をあなたの PATH に追加するワンクリックのボタンもあります。 +これは**デフォルトで無効**です。自動化が有効な間は、あなたがコンピューター上で実行するどんなプログラムも、あなたのアカウントを通じて電話をかけられます —— そして通話は料金が発生することがあります —— そのため、私たちはその判断をあなたに委ねています。**設定 → 自動化**(Settings → Automation)でオンにしてください。そこには、どのターミナルからでも見つけられるよう `wavekat-voice` をあなたの PATH に追加するワンクリックのボタンもあります。 + +![Ubuntu 上の WaveKat Voice — コマンドライン アクセスを有効にした自動化設定と、コマンドラインツールをインストールするボタン。](/screenshots/settings-automation/ja.webp) ## ワンクリックで AI アシスタントを接続する -最速の方法は、**Settings → Automation** ページそのものです。すでにインストールされている AI アシスタントを探し出し、それぞれに **Connect** ボタンを提供します。今日では次のものをカバーしています。 +最速の方法は、**設定 → 自動化** ページそのものです。すでにインストールされている AI アシスタントを探し出し、それぞれに **接続**(Connect)ボタンを提供します。今日では次のものをカバーしています。 | アシスタント | 接続方法 | |---|---| @@ -39,6 +43,8 @@ WaveKat Voice には、ずっとバックグラウンドで静かに動く電話 ワンクリックで接続完了 —— コピーやペーストは不要です。その後は、アシスタントに電話をかけるよう頼むだけです。知っておくとよいことが 2 つあります。アシスタントによっては新しいツールを認識するために完全な再起動(終了して再度開く)が必要です。そして接続は自身を最新に保ちます —— WaveKat Voice がバックグラウンドで更新されると、あなたが接続したどのアシスタントも静かに同期が保たれるので、再接続する必要は決してありません。 +![Ubuntu 上の WaveKat Voice — Claude や Cursor などの AI アシスタントを、ワンクリックの「接続」ボタンで連携。](/screenshots/settings-automation-agents/ja.webp) + ## ターミナルから見た様子 すべてのコマンドは機械可読な出力のために `--json` を受け付けます。これこそが、アシスタントにとってそれを快適に動かせるようにしている点です。いくつか例を挙げます。 @@ -65,13 +71,13 @@ wavekat-voice call list --json | jq -r '.[0].id' | xargs wavekat-voice call hang - **1 つのバイナリ、新たな攻撃面なし。** このコマンドラインツールは、アプリ自身のデーモンが別の帽子をかぶったもの —— なので、アプリの署名、自動更新、セキュリティレビューを無料で引き継ぎ、決して古いバージョンになることはありません。 - **バイナリこそが信頼できる情報源。** ヘルプテキストが終了コードと例を携えています。アシスタントの統合は、いずれ陳腐化するコマンド一覧を固定するのではなく、`wavekat-voice --help` を指し示します。アプリを更新すれば、ツールもそれとともに更新されます。 -- **デフォルトで無効、オプトイン、取り消し可能。** 有料の電話をかけることは重大なので、自動化はあなたが求めるまで無効のままであり、**Remove** は残りの設定に触れることなく、どのアシスタントの接続も再び解除できます。 +- **デフォルトで無効、オプトイン、取り消し可能。** 有料の電話をかけることは重大なので、自動化はあなたが求めるまで無効のままであり、**削除**(Remove)は残りの設定に触れることなく、どのアシスタントの接続も再び解除できます。 ## よくある質問 ### AI アシスタントは WaveKat Voice で電話をかけられますか? -はい。WaveKat Voice で自動化を有効にすると(Settings → Automation)、Claude のような AI アシスタントは、アプリのコマンドラインツールまたは MCP サーバーを通じて、本物の電話をかけ、追い、終わらせることができます。アシスタントが通話を動かし、あなたがその上で話します。 +はい。WaveKat Voice で自動化を有効にすると(設定 → 自動化)、Claude のような AI アシスタントは、アプリのコマンドラインツールまたは MCP サーバーを通じて、本物の電話をかけ、追い、終わらせることができます。アシスタントが通話を動かし、あなたがその上で話します。 ### 私の代わりに AI が通話で話すのですか? @@ -79,7 +85,7 @@ wavekat-voice call list --json | jq -r '.[0].id' | xargs wavekat-voice call hang ### コマンドラインを使うのに何か追加でインストールする必要がありますか? -いいえ。`wavekat-voice` コマンドは WaveKat Voice アプリの中に同梱されているので、すでにあなたのコンピューター上にあります。必要なのは Settings → Automation で自動化をオンにすることだけで、任意で「Install command-line tool」をクリックして PATH に追加できます。 +いいえ。`wavekat-voice` コマンドは WaveKat Voice アプリの中に同梱されているので、すでにあなたのコンピューター上にあります。必要なのは 設定 → 自動化 で自動化をオンにすることだけで、任意で「コマンドラインツールをインストール(Install command-line tool)」をクリックして PATH に追加できます。 ### 自動化をオンのままにしておくのは安全ですか? @@ -95,6 +101,6 @@ WaveKat Voice は今日では Mac と Linux で動作し、Windows は需要が ## 試してみる -[WaveKat Voice をダウンロード](/voice/download/)し、**Settings → Automation** を開いて、あなたのアシスタントを接続してください。完全なコマンドリファレンス —— すべてのコマンド、その JSON 出力、そして終了コード —— は[自動化ドキュメント](/voice/automation/)にあります。 +[WaveKat Voice をダウンロード](/ja/voice/download/)し、**設定 → 自動化** を開いて、あなたのアシスタントを接続してください。完全なコマンドリファレンス —— すべてのコマンド、その JSON 出力、そして終了コード —— は[自動化ドキュメント](/docs/voice/automation/)にあります。 私たちはここでまだ始まったばかりです。通話を動かすことは土台です。会話そのものも担えるアシスタントが、これが次に向かう先です。 diff --git a/src/content/blog/ko/common-voice-explorer.md b/src/content/blog/ko/common-voice-explorer.md index 2c1f40a..435836e 100644 --- a/src/content/blog/ko/common-voice-explorer.md +++ b/src/content/blog/ko/common-voice-explorer.md @@ -49,7 +49,7 @@ Common Voice는 수십 개 언어에 걸쳐 수백만 개의 오디오 클립을 ## 우리에게 왜 중요한가 -WaveKat에서 우리는 [소상공인을 위한 음성 AI 도구](/blog/hello-world)를 만들고 있습니다. 그 작업은 고품질 음성 데이터에 달려 있습니다. Common Voice는 이 분야에서 가장 중요한 오픈 리소스 중 하나이며, 우리는 이를 더 접근하기 쉽게 만드는 것이 엔지니어뿐 아니라 모두에게 도움이 된다고 믿습니다. +WaveKat에서 우리는 [소상공인을 위한 음성 AI 도구](/ko/blog/hello-world/)를 만들고 있습니다. 그 작업은 고품질 음성 데이터에 달려 있습니다. Common Voice는 이 분야에서 가장 중요한 오픈 리소스 중 하나이며, 우리는 이를 더 접근하기 쉽게 만드는 것이 엔지니어뿐 아니라 모두에게 도움이 된다고 믿습니다. 오픈 데이터는 사람들이 실제로 탐색할 수 있을 때에만 가치가 있습니다. 그것이 우리가 메우고 싶었던 격차입니다. diff --git a/src/content/blog/ko/place-calls-from-the-command-line.md b/src/content/blog/ko/place-calls-from-the-command-line.md index dff7851..6df1761 100644 --- a/src/content/blog/ko/place-calls-from-the-command-line.md +++ b/src/content/blog/ko/place-calls-from-the-command-line.md @@ -9,7 +9,7 @@ lang: "ko" WaveKat Voice는 이제 명령줄 도구를 함께 제공합니다. 그래서 당신이 신뢰하는 프로그램 — Claude 같은 AI 어시스턴트를 포함해 — 이 당신을 대신해 실제 전화를 걸고 관리할 수 있습니다. 어시스턴트에게 "치과에 전화해서 누군가 받을 때까지 기다려"라고 요청하면, 이미 열려 있는 앱을 통해 전화를 걸고, 통화를 따라가며, 결과가 어땠는지 알려줍니다. 오늘날 Mac과 Linux의 앱에 내장되어 있으며, 당신이 켜기 전까지는 꺼져 있습니다. -이것은 우리가 계속 되돌아오는 그 목표를 향한 다음 단계입니다: [모든 소상공인에게 대기업과 같은 목소리를 주는 것](/blog/hello-world)입니다. 대기업에는 교환대와 그것을 구동하는 소프트웨어가 있습니다. 이제 당신의 컴퓨터 — 그리고 그 위에서 실행되는 어시스턴트 — 가 바로 그 교환대가 될 수 있습니다. +이것은 우리가 계속 되돌아오는 그 목표를 향한 다음 단계입니다: [모든 소상공인에게 대기업과 같은 목소리를 주는 것](/ko/blog/hello-world/)입니다. 대기업에는 교환대와 그것을 구동하는 소프트웨어가 있습니다. 이제 당신의 컴퓨터 — 그리고 그 위에서 실행되는 어시스턴트 — 가 바로 그 교환대가 될 수 있습니다. ## 실제로 무엇을 하나요 @@ -22,15 +22,19 @@ WaveKat Voice에는 늘 백그라운드에서 조용히 돌아가는 전화기 그러니 어시스턴트는 다이얼패드 위의 손이지, 회선 위의 목소리가 아닙니다. 이것은 의도적이고 정직한 선입니다 — 그리고 "사람한테 연결해 줘"라는 일상의 잡일에 대해서는, 그것이 당신이 실제로 원하는 것의 대부분입니다. +![Ubuntu의 WaveKat Voice — 어시스턴트가 건 통화가 진행 중이며 옆에 실시간 자막이 표시됩니다.](/screenshots/in-call/ko.webp) + ## 설치할 것이 없습니다 `wavekat-voice` 명령은 앱을 실행하는 바로 그 프로그램입니다 — WaveKat Voice를 설치하는 순간 이미 디스크에 들어 있습니다. 두 번째 다운로드도, 별도의 패키지도, 앱과 어긋날 수 있는 버전도 없습니다. -이것은 **기본적으로 꺼져 있습니다**. 자동화가 켜져 있는 동안에는 당신이 컴퓨터에서 실행하는 어떤 프로그램이든 당신의 계정을 통해 전화를 걸 수 있고 — 통화에는 비용이 들 수 있으므로 — 그 결정을 당신에게 맡깁니다. **Settings → Automation**에서 켜세요. 그곳에는 어떤 터미널에서든 찾을 수 있도록 `wavekat-voice`를 PATH에 추가하는 원클릭 버튼도 있습니다. +이것은 **기본적으로 꺼져 있습니다**. 자동화가 켜져 있는 동안에는 당신이 컴퓨터에서 실행하는 어떤 프로그램이든 당신의 계정을 통해 전화를 걸 수 있고 — 통화에는 비용이 들 수 있으므로 — 그 결정을 당신에게 맡깁니다. **설정 → 자동화** (Settings → Automation)에서 켜세요. 그곳에는 어떤 터미널에서든 찾을 수 있도록 `wavekat-voice`를 PATH에 추가하는 원클릭 버튼도 있습니다. + +![Ubuntu의 WaveKat Voice — 명령줄 액세스가 켜진 자동화 설정과 명령줄 도구 설치 버튼.](/screenshots/settings-automation/ko.webp) ## 원클릭으로 AI 어시스턴트 연결하기 -가장 빠른 길은 **Settings → Automation** 페이지 그 자체입니다. 이미 설치되어 있는 AI 어시스턴트를 찾아 각각에 대해 **Connect** 버튼을 제공합니다. 오늘날 다음을 포함합니다: +가장 빠른 길은 **설정 → 자동화** 페이지 그 자체입니다. 이미 설치되어 있는 AI 어시스턴트를 찾아 각각에 대해 **연결** (Connect) 버튼을 제공합니다. 오늘날 다음을 포함합니다: | 어시스턴트 | 연결 방식 | |---|---| @@ -39,6 +43,8 @@ WaveKat Voice에는 늘 백그라운드에서 조용히 돌아가는 전화기 한 번의 클릭으로 연결됩니다 — 복사하거나 붙여넣을 것이 없습니다. 그 후에는 어시스턴트에게 전화를 걸어달라고 요청하기만 하면 됩니다. 알아둘 만한 두 가지: 일부 어시스턴트는 새 도구를 인식하려면 완전한 재시작(종료 후 다시 열기)이 필요합니다. 그리고 연결은 스스로 최신 상태를 유지합니다 — WaveKat Voice가 백그라운드에서 업데이트되면, 연결해 둔 어떤 어시스턴트든 조용히 동기화 상태로 유지되므로 다시 연결할 필요가 없습니다. +![Ubuntu의 WaveKat Voice — Claude와 Cursor 같은 AI 어시스턴트를 원클릭 연결 버튼으로 연결합니다.](/screenshots/settings-automation-agents/ko.webp) + ## 터미널에서는 어떤 모습일까요 모든 명령은 기계가 읽을 수 있는 출력을 위해 `--json`을 받으며, 바로 이것이 어시스턴트가 편하게 구동할 수 있게 해줍니다. 몇 가지 예시: @@ -65,13 +71,13 @@ wavekat-voice call list --json | jq -r '.[0].id' | xargs wavekat-voice call hang - **하나의 바이너리, 새로운 표면 없음.** 명령줄 도구는 앱 자신의 데몬이 다른 모자를 쓴 것입니다 — 그래서 앱의 서명, 자동 업데이트, 보안 검토를 거저 물려받으며, 결코 오래된 버전일 수 없습니다. - **바이너리가 진실의 원천입니다.** 도움말 텍스트가 종료 코드와 예시를 담고 있습니다; 어시스턴트 통합은 낡아갈 명령 목록을 고정하는 대신 `wavekat-voice --help`를 가리킵니다. 앱을 업데이트하면 도구도 함께 업데이트됩니다. -- **기본 꺼짐, 명시적 옵트인, 철회 가능.** 유료 전화를 거는 일은 중대하므로, 자동화는 당신이 요청하기 전까지 꺼져 있고, **Remove**는 나머지 설정을 건드리지 않고 어떤 어시스턴트든 다시 연결 해제합니다. +- **기본 꺼짐, 명시적 옵트인, 철회 가능.** 유료 전화를 거는 일은 중대하므로, 자동화는 당신이 요청하기 전까지 꺼져 있고, **제거** (Remove)는 나머지 설정을 건드리지 않고 어떤 어시스턴트든 다시 연결 해제합니다. ## 자주 묻는 질문 ### AI 어시스턴트가 WaveKat Voice로 전화를 걸 수 있나요? -네. WaveKat Voice에서 자동화를 활성화하면(Settings → Automation), Claude 같은 AI 어시스턴트가 앱의 명령줄 도구나 MCP 서버를 통해 실제 전화를 걸고, 따라가고, 끝낼 수 있습니다. 어시스턴트가 통화를 구동하고, 말하는 것은 당신입니다. +네. WaveKat Voice에서 자동화를 활성화하면(설정 → 자동화), Claude 같은 AI 어시스턴트가 앱의 명령줄 도구나 MCP 서버를 통해 실제 전화를 걸고, 따라가고, 끝낼 수 있습니다. 어시스턴트가 통화를 구동하고, 말하는 것은 당신입니다. ### 나 대신 AI가 통화에서 말하나요? @@ -79,7 +85,7 @@ wavekat-voice call list --json | jq -r '.[0].id' | xargs wavekat-voice call hang ### 명령줄을 사용하려면 추가로 설치해야 할 것이 있나요? -아닙니다. `wavekat-voice` 명령은 WaveKat Voice 앱 안에 함께 제공되므로 이미 당신의 컴퓨터에 있습니다. Settings → Automation에서 자동화를 켜기만 하면 되고, 선택적으로 "Install command-line tool"을 클릭해 PATH에 추가하면 됩니다. +아닙니다. `wavekat-voice` 명령은 WaveKat Voice 앱 안에 함께 제공되므로 이미 당신의 컴퓨터에 있습니다. 설정 → 자동화에서 자동화를 켜기만 하면 되고, 선택적으로 "명령줄 도구 설치 (Install command-line tool)"을 클릭해 PATH에 추가하면 됩니다. ### 자동화를 켜둔 채로 두는 것이 안전한가요? @@ -95,6 +101,6 @@ WaveKat Voice는 오늘날 Mac과 Linux에서 실행되며, Windows는 수요가 ## 사용해 보기 -[WaveKat Voice를 다운로드](/voice/download/)하고, **Settings → Automation**을 열어 어시스턴트를 연결하세요. 전체 명령 참조 — 모든 명령, JSON 출력, 종료 코드 — 는 [자동화 문서](/voice/automation/)에 있습니다. +[WaveKat Voice를 다운로드](/ko/voice/download/)하고, **설정 → 자동화**을 열어 어시스턴트를 연결하세요. 전체 명령 참조 — 모든 명령, JSON 출력, 종료 코드 — 는 [자동화 문서](/docs/voice/automation/)에 있습니다. 우리는 이제 막 시작했습니다. 통화를 구동하는 것은 기초입니다; 대화까지 직접 이어갈 수 있는 어시스턴트가 이것이 다음으로 향하는 곳입니다. diff --git a/src/content/blog/place-calls-from-the-command-line.md b/src/content/blog/place-calls-from-the-command-line.md index af669cb..d7a5662 100644 --- a/src/content/blog/place-calls-from-the-command-line.md +++ b/src/content/blog/place-calls-from-the-command-line.md @@ -8,7 +8,7 @@ tags: [voice-ai, automation, ai-agents] WaveKat Voice now ships with a command-line tool, so a program you trust — including an AI assistant like Claude — can place and manage real phone calls for you. Ask your assistant to "call the dentist and wait until someone picks up," and it dials through the app you already have open, follows the call, and tells you how it went. It's built into the app today on Mac and Linux, and it's off until you switch it on. -This is the next step toward the thing we keep coming back to: [giving every small business the voice of a big one](/blog/hello-world). A big company has a switchboard and software that drives it. Now your computer — and the assistant running on it — can be that switchboard. +This is the next step toward the thing we keep coming back to: [giving every small business the voice of a big one](/blog/hello-world/). A big company has a switchboard and software that drives it. Now your computer — and the assistant running on it — can be that switchboard. ## What it actually does @@ -21,12 +21,16 @@ To be precise about the boundary, because it matters: So the assistant is the hands on the dialpad, not a voice on the line. That's a deliberate, honest line — and for the everyday "get me through to a human" chores, it's most of what you actually want. +![WaveKat Voice on Ubuntu — a call the assistant placed, in progress, with a live transcript alongside.](/screenshots/in-call/en.webp) + ## There's nothing to install The `wavekat-voice` command is the same program that runs the app — it's already on your disk the moment you install WaveKat Voice. There's no second download, no separate package, no version that can drift out of sync with the app. It is **off by default**. While automation is on, any program you run on your computer can place calls through your account — and calls may cost money — so we leave that decision to you. Turn it on in **Settings → Automation**, where there's also a one-click button to add `wavekat-voice` to your PATH so any terminal can find it. +![WaveKat Voice on Ubuntu — Settings → Automation, with command-line access turned on and the Install command-line tool button.](/screenshots/settings-automation/en.webp) + ## Connect an AI assistant in one click The fastest path is the **Settings → Automation** page itself. It looks for AI assistants you already have installed and offers a **Connect** button for each. Today that covers: @@ -38,6 +42,8 @@ The fastest path is the **Settings → Automation** page itself. It looks for AI One click wires it up — nothing to copy or paste. After that, you just ask the assistant to make a call. Two things worth knowing: some assistants need a full restart (quit and reopen) to pick up the new tools, and the connection keeps itself current — when WaveKat Voice updates in the background, any assistant you've connected is quietly kept in sync, so you never have to reconnect. +![WaveKat Voice on Ubuntu — connecting AI assistants like Claude and Cursor, each with a one-click Connect button.](/screenshots/settings-automation-agents/en.webp) + ## What it looks like from a terminal Every command takes `--json` for machine-readable output, which is what makes it comfortable for an assistant to drive. A few examples: @@ -94,6 +100,6 @@ WaveKat Voice runs on Mac and Linux today, with Windows coming when there's dema ## Try it -[Download WaveKat Voice](/voice/download/), open **Settings → Automation**, and connect your assistant. The full command reference — every command, its JSON output, and the exit codes — lives in the [automation docs](/voice/automation/). +[Download WaveKat Voice](/voice/download/), open **Settings → Automation**, and connect your assistant. The full command reference — every command, its JSON output, and the exit codes — lives in the [automation docs](/docs/voice/automation/). We're just getting started here. Driving calls is the foundation; an assistant that can also hold the conversation is where this goes next. diff --git a/src/content/blog/zh-hant/common-voice-explorer.md b/src/content/blog/zh-hant/common-voice-explorer.md index 4f19383..cd41cd0 100644 --- a/src/content/blog/zh-hant/common-voice-explorer.md +++ b/src/content/blog/zh-hant/common-voice-explorer.md @@ -49,7 +49,7 @@ Common Voice 包含數百萬段音訊片段,涵蓋數十種語言。要查看 ## 這對我們為什麼重要 -在 WaveKat,我們正在為小型企業打造[語音 AI 工具](/blog/hello-world)。這項工作仰賴於高品質的語音資料。Common Voice 是這一領域最重要的開源資源之一,我們相信讓它變得更易於存取會讓所有人受益——而不僅僅是工程師。 +在 WaveKat,我們正在為小型企業打造[語音 AI 工具](/zh-hant/blog/hello-world/)。這項工作仰賴於高品質的語音資料。Common Voice 是這一領域最重要的開源資源之一,我們相信讓它變得更易於存取會讓所有人受益——而不僅僅是工程師。 開放資料只有在人們能真正去瀏覽它時才有價值。這正是我們想要填補的空白。 diff --git a/src/content/blog/zh-hant/place-calls-from-the-command-line.md b/src/content/blog/zh-hant/place-calls-from-the-command-line.md index e7b2970..7adc9ba 100644 --- a/src/content/blog/zh-hant/place-calls-from-the-command-line.md +++ b/src/content/blog/zh-hant/place-calls-from-the-command-line.md @@ -9,7 +9,7 @@ lang: "zh-Hant" WaveKat Voice 現在附帶了一個命令列工具,讓你信任的程式——包括像 Claude 這樣的 AI 助理——可以替你撥打和管理真實電話。讓你的助理「打給牙醫,等到有人接聽為止」,它就會透過你已經打開的應用程式撥號、跟進通話,並告訴你結果如何。今天它已內建於 Mac 和 Linux 上的應用程式中,並且在你手動開啟之前一直處於關閉狀態。 -這是邁向我們始終念念不忘的目標的下一步:[讓每一家小企業都擁有大企業的聲音](/blog/hello-world)。大公司有總機和驅動總機的軟體。現在,你的電腦——以及執行在它上面的助理——就可以成為那個總機。 +這是邁向我們始終念念不忘的目標的下一步:[讓每一家小企業都擁有大企業的聲音](/zh-hant/blog/hello-world/)。大公司有總機和驅動總機的軟體。現在,你的電腦——以及執行在它上面的助理——就可以成為那個總機。 ## 它究竟能做什麼 @@ -22,15 +22,19 @@ WaveKat Voice 一直在背景靜靜執行著一部電話:它向你的 SIP 供 所以助理是撥號盤上的手,而不是線路上的聲音。這是一條經過深思熟慮的、誠實的界線——而對於日常那些「幫我接通一個真人」的瑣事來說,它已經滿足了你真正想要的大部分需求。 +![Ubuntu 上的 WaveKat Voice——助理發起的通話正在進行,旁邊顯示即時逐字稿。](/screenshots/in-call/zh-Hant.webp) + ## 沒有任何東西需要安裝 `wavekat-voice` 命令就是執行該應用程式的同一個程式——在你安裝 WaveKat Voice 的那一刻,它就已經在你的磁碟上了。沒有第二次下載,沒有單獨的安裝套件,也沒有可能與應用程式脫節的版本。 -它**預設關閉**。當自動化處於開啟狀態時,你在電腦上執行的任何程式都可以透過你的帳戶撥打電話——而通話可能會產生費用——所以我們把這個決定交給你。在 **Settings → Automation** 中開啟它,那裡還有一個一鍵按鈕,可以把 `wavekat-voice` 加入到你的 PATH 中,讓任何終端機都能找到它。 +它**預設關閉**。當自動化處於開啟狀態時,你在電腦上執行的任何程式都可以透過你的帳戶撥打電話——而通話可能會產生費用——所以我們把這個決定交給你。在 **設定 → 自動化**(Settings → Automation)中開啟它,那裡還有一個一鍵按鈕,可以把 `wavekat-voice` 加入到你的 PATH 中,讓任何終端機都能找到它。 + +![Ubuntu 上的 WaveKat Voice——已開啟命令列存取的自動化設定,以及安裝命令列工具的按鈕。](/screenshots/settings-automation/zh-Hant.webp) ## 一鍵連接 AI 助理 -最快的途徑就是 **Settings → Automation** 頁面本身。它會尋找你已經安裝的 AI 助理,並為每一個提供一個 **Connect** 按鈕。目前涵蓋: +最快的途徑就是 **設定 → 自動化** 頁面本身。它會尋找你已經安裝的 AI 助理,並為每一個提供一個 **連接**(Connect)按鈕。目前涵蓋: | 助理 | 如何連接 | |---|---| @@ -39,6 +43,8 @@ WaveKat Voice 一直在背景靜靜執行著一部電話:它向你的 SIP 供 一鍵即可接通——無需複製或貼上。之後,你只需讓助理撥打電話即可。有兩點值得了解:有些助理需要完全重新啟動(結束並重新打開)才能辨識新工具;而且連接會保持自身最新——當 WaveKat Voice 在背景更新時,你已連接的任何助理都會被悄悄地保持同步,所以你永遠不必重新連接。 +![Ubuntu 上的 WaveKat Voice——透過一鍵「連接」按鈕接入 Claude、Cursor 等 AI 助理。](/screenshots/settings-automation-agents/zh-Hant.webp) + ## 在終端機中是什麼樣子 每個命令都接受 `--json` 以輸出機器可讀的內容,這正是讓助理能夠輕鬆驅動它的原因。舉幾個例子: @@ -65,13 +71,13 @@ wavekat-voice call list --json | jq -r '.[0].id' | xargs wavekat-voice call hang - **一個二進位檔案,沒有新的攻擊面。** 這個命令列工具就是應用程式自己的常駐程式換了頂帽子——所以它免費繼承了應用程式的簽章、自動更新和安全稽核,並且永遠不會是過時的版本。 - **二進位檔案就是事實的來源。** 說明文字攜帶了離開碼和範例;助理的整合指向 `wavekat-voice --help`,而不是凍結一份會過時的命令清單。更新應用程式,工具也隨之更新。 -- **預設關閉、需主動開啟、可撤銷。** 撥打一通付費電話事關重大,所以自動化在你主動要求之前保持關閉,而 **Remove** 可以再次解除任何助理的掛鉤,且不會觸及其餘設定。 +- **預設關閉、需主動開啟、可撤銷。** 撥打一通付費電話事關重大,所以自動化在你主動要求之前保持關閉,而 **移除**(Remove)可以再次解除任何助理的掛鉤,且不會觸及其餘設定。 ## 常見問題 ### AI 助理能用 WaveKat Voice 撥打電話嗎? -可以。在 WaveKat Voice 中啟用自動化後(Settings → Automation),像 Claude 這樣的 AI 助理可以透過應用程式的命令列工具或其 MCP 伺服器來撥打、跟進和結束真實電話。助理驅動通話;說話的是你。 +可以。在 WaveKat Voice 中啟用自動化後(設定 → 自動化),像 Claude 這樣的 AI 助理可以透過應用程式的命令列工具或其 MCP 伺服器來撥打、跟進和結束真實電話。助理驅動通話;說話的是你。 ### 是 AI 在通話中說話而不是我嗎? @@ -79,7 +85,7 @@ wavekat-voice call list --json | jq -r '.[0].id' | xargs wavekat-voice call hang ### 使用命令列需要額外安裝任何東西嗎? -不需要。`wavekat-voice` 命令隨 WaveKat Voice 應用程式一起提供,所以它已經在你的電腦上了。你只需在 Settings → Automation 中開啟自動化,並可選擇性地點擊「Install command-line tool」將它加入到你的 PATH 中。 +不需要。`wavekat-voice` 命令隨 WaveKat Voice 應用程式一起提供,所以它已經在你的電腦上了。你只需在 設定 → 自動化 中開啟自動化,並可選擇性地點擊「安裝命令列工具(Install command-line tool)」將它加入到你的 PATH 中。 ### 讓自動化一直開著安全嗎? @@ -95,6 +101,6 @@ WaveKat Voice 目前執行在 Mac 和 Linux 上,Windows 將在有需求時推 ## 試試看 -[下載 WaveKat Voice](/voice/download/),打開 **Settings → Automation**,然後連接你的助理。完整的命令參考——每一個命令、它的 JSON 輸出以及離開碼——都在[自動化文件](/voice/automation/)中。 +[下載 WaveKat Voice](/zh-hant/voice/download/),打開 **設定 → 自動化**,然後連接你的助理。完整的命令參考——每一個命令、它的 JSON 輸出以及離開碼——都在[自動化文件](/docs/voice/automation/)中。 我們才剛剛起步。驅動通話是基礎;一個還能親自維持對話的助理,是這件事接下來要去的方向。 diff --git a/src/content/blog/zh/common-voice-explorer.md b/src/content/blog/zh/common-voice-explorer.md index d31fbb2..9000917 100644 --- a/src/content/blog/zh/common-voice-explorer.md +++ b/src/content/blog/zh/common-voice-explorer.md @@ -49,7 +49,7 @@ Common Voice 包含数百万段音频片段,覆盖数十种语言。要查看 ## 这对我们为什么重要 -在 WaveKat,我们正在为小型企业打造[语音 AI 工具](/blog/hello-world)。这项工作依赖于高质量的语音数据。Common Voice 是这一领域最重要的开源资源之一,我们相信让它变得更易于访问会让所有人受益——而不仅仅是工程师。 +在 WaveKat,我们正在为小型企业打造[语音 AI 工具](/zh/blog/hello-world/)。这项工作依赖于高质量的语音数据。Common Voice 是这一领域最重要的开源资源之一,我们相信让它变得更易于访问会让所有人受益——而不仅仅是工程师。 开放数据只有在人们能真正去浏览它时才有价值。这正是我们想要填补的空白。 diff --git a/src/content/blog/zh/place-calls-from-the-command-line.md b/src/content/blog/zh/place-calls-from-the-command-line.md index f232212..e629664 100644 --- a/src/content/blog/zh/place-calls-from-the-command-line.md +++ b/src/content/blog/zh/place-calls-from-the-command-line.md @@ -9,7 +9,7 @@ lang: "zh-Hans" WaveKat Voice 现在附带了一个命令行工具,让你信任的程序——包括像 Claude 这样的 AI 助手——可以替你拨打和管理真实电话。让你的助手"打给牙医,等到有人接听为止",它就会通过你已经打开的应用拨号、跟进通话,并告诉你结果如何。今天它已内置于 Mac 和 Linux 上的应用中,并且在你手动开启之前一直处于关闭状态。 -这是迈向我们始终念念不忘的目标的下一步:[让每一家小企业都拥有大企业的声音](/blog/hello-world)。大公司有总机和驱动总机的软件。现在,你的电脑——以及运行在它上面的助手——就可以成为那个总机。 +这是迈向我们始终念念不忘的目标的下一步:[让每一家小企业都拥有大企业的声音](/zh/blog/hello-world/)。大公司有总机和驱动总机的软件。现在,你的电脑——以及运行在它上面的助手——就可以成为那个总机。 ## 它究竟能做什么 @@ -22,15 +22,19 @@ WaveKat Voice 一直在后台静静运行着一部电话:它向你的 SIP 提 所以助手是拨号盘上的手,而不是线路上的声音。这是一条经过深思熟虑的、诚实的界线——而对于日常那些"帮我接通一个真人"的琐事来说,它已经满足了你真正想要的大部分需求。 +![Ubuntu 上的 WaveKat Voice——助手发起的通话正在进行,旁边显示实时字幕。](/screenshots/in-call/zh-Hans.webp) + ## 没有任何东西需要安装 `wavekat-voice` 命令就是运行该应用的同一个程序——在你安装 WaveKat Voice 的那一刻,它就已经在你的磁盘上了。没有第二次下载,没有单独的安装包,也没有可能与应用脱节的版本。 -它**默认关闭**。当自动化处于开启状态时,你在电脑上运行的任何程序都可以通过你的账户拨打电话——而通话可能会产生费用——所以我们把这个决定交给你。在 **Settings → Automation** 中开启它,那里还有一个一键按钮,可以把 `wavekat-voice` 添加到你的 PATH 中,让任何终端都能找到它。 +它**默认关闭**。当自动化处于开启状态时,你在电脑上运行的任何程序都可以通过你的账户拨打电话——而通话可能会产生费用——所以我们把这个决定交给你。在 **设置 → 自动化**(Settings → Automation)中开启它,那里还有一个一键按钮,可以把 `wavekat-voice` 添加到你的 PATH 中,让任何终端都能找到它。 + +![Ubuntu 上的 WaveKat Voice——已开启命令行访问的自动化设置,以及安装命令行工具的按钮。](/screenshots/settings-automation/zh-Hans.webp) ## 一键连接 AI 助手 -最快的途径就是 **Settings → Automation** 页面本身。它会查找你已经安装的 AI 助手,并为每一个提供一个 **Connect** 按钮。目前涵盖: +最快的途径就是 **设置 → 自动化** 页面本身。它会查找你已经安装的 AI 助手,并为每一个提供一个 **连接**(Connect)按钮。目前涵盖: | 助手 | 如何连接 | |---|---| @@ -39,6 +43,8 @@ WaveKat Voice 一直在后台静静运行着一部电话:它向你的 SIP 提 一键即可接通——无需复制或粘贴。之后,你只需让助手拨打电话即可。有两点值得了解:有些助手需要完全重启(退出并重新打开)才能识别新工具;而且连接会保持自身最新——当 WaveKat Voice 在后台更新时,你已连接的任何助手都会被悄悄地保持同步,所以你永远不必重新连接。 +![Ubuntu 上的 WaveKat Voice——通过一键“连接”按钮接入 Claude、Cursor 等 AI 助手。](/screenshots/settings-automation-agents/zh-Hans.webp) + ## 在终端中是什么样子 每个命令都接受 `--json` 以输出机器可读的内容,这正是让助手能够轻松驱动它的原因。举几个例子: @@ -65,13 +71,13 @@ wavekat-voice call list --json | jq -r '.[0].id' | xargs wavekat-voice call hang - **一个二进制文件,没有新的攻击面。** 这个命令行工具就是应用自己的守护进程换了顶帽子——所以它免费继承了应用的签名、自动更新和安全审查,并且永远不会是过时的版本。 - **二进制文件就是事实的来源。** 帮助文本携带了退出码和示例;助手的集成指向 `wavekat-voice --help`,而不是冻结一份会过时的命令清单。更新应用,工具也随之更新。 -- **默认关闭、需主动开启、可撤销。** 拨打一通付费电话事关重大,所以自动化在你主动要求之前保持关闭,而 **Remove** 可以再次解除任何助手的挂钩,且不会触及其余设置。 +- **默认关闭、需主动开启、可撤销。** 拨打一通付费电话事关重大,所以自动化在你主动要求之前保持关闭,而 **移除**(Remove)可以再次解除任何助手的挂钩,且不会触及其余设置。 ## 常见问题 ### AI 助手能用 WaveKat Voice 拨打电话吗? -可以。在 WaveKat Voice 中启用自动化后(Settings → Automation),像 Claude 这样的 AI 助手可以通过应用的命令行工具或其 MCP 服务器来拨打、跟进和结束真实电话。助手驱动通话;说话的是你。 +可以。在 WaveKat Voice 中启用自动化后(设置 → 自动化),像 Claude 这样的 AI 助手可以通过应用的命令行工具或其 MCP 服务器来拨打、跟进和结束真实电话。助手驱动通话;说话的是你。 ### 是 AI 在通话中说话而不是我吗? @@ -79,7 +85,7 @@ wavekat-voice call list --json | jq -r '.[0].id' | xargs wavekat-voice call hang ### 使用命令行需要额外安装任何东西吗? -不需要。`wavekat-voice` 命令随 WaveKat Voice 应用一起提供,所以它已经在你的电脑上了。你只需在 Settings → Automation 中开启自动化,并可选地点击"Install command-line tool"将它添加到你的 PATH 中。 +不需要。`wavekat-voice` 命令随 WaveKat Voice 应用一起提供,所以它已经在你的电脑上了。你只需在 设置 → 自动化 中开启自动化,并可选地点击"安装命令行工具(Install command-line tool)"将它添加到你的 PATH 中。 ### 让自动化一直开着安全吗? @@ -95,6 +101,6 @@ WaveKat Voice 目前运行在 Mac 和 Linux 上,Windows 将在有需求时推 ## 试试看 -[下载 WaveKat Voice](/voice/download/),打开 **Settings → Automation**,然后连接你的助手。完整的命令参考——每一个命令、它的 JSON 输出以及退出码——都在[自动化文档](/voice/automation/)中。 +[下载 WaveKat Voice](/zh/voice/download/),打开 **设置 → 自动化**,然后连接你的助手。完整的命令参考——每一个命令、它的 JSON 输出以及退出码——都在[自动化文档](/docs/voice/automation/)中。 我们才刚刚起步。驱动通话是基础;一个还能亲自维持对话的助手,是这件事接下来要去的方向。