diff --git a/public/screenshots/account-2talk-filled/de.webp b/public/screenshots/account-2talk-filled/de.webp index f436791..27064fd 100644 Binary files a/public/screenshots/account-2talk-filled/de.webp and b/public/screenshots/account-2talk-filled/de.webp differ diff --git a/public/screenshots/account-2talk-filled/en.webp b/public/screenshots/account-2talk-filled/en.webp index 7b0ebd1..91f487d 100644 Binary files a/public/screenshots/account-2talk-filled/en.webp and b/public/screenshots/account-2talk-filled/en.webp differ diff --git a/public/screenshots/account-2talk-filled/es.webp b/public/screenshots/account-2talk-filled/es.webp index bc9762f..c4a679d 100644 Binary files a/public/screenshots/account-2talk-filled/es.webp and b/public/screenshots/account-2talk-filled/es.webp differ diff --git a/public/screenshots/account-2talk-filled/fr.webp b/public/screenshots/account-2talk-filled/fr.webp index 5785e9c..6cb524a 100644 Binary files a/public/screenshots/account-2talk-filled/fr.webp and b/public/screenshots/account-2talk-filled/fr.webp differ diff --git a/public/screenshots/account-2talk-filled/it.webp b/public/screenshots/account-2talk-filled/it.webp index 71258ea..1d535fd 100644 Binary files a/public/screenshots/account-2talk-filled/it.webp and b/public/screenshots/account-2talk-filled/it.webp differ diff --git a/public/screenshots/account-2talk-filled/ja.webp b/public/screenshots/account-2talk-filled/ja.webp index 4ca7bc7..55c1944 100644 Binary files a/public/screenshots/account-2talk-filled/ja.webp and b/public/screenshots/account-2talk-filled/ja.webp differ diff --git a/public/screenshots/account-2talk-filled/ko.webp b/public/screenshots/account-2talk-filled/ko.webp index 9ddde2a..54c5ccd 100644 Binary files a/public/screenshots/account-2talk-filled/ko.webp and b/public/screenshots/account-2talk-filled/ko.webp differ diff --git a/public/screenshots/account-2talk-filled/zh-Hans.webp b/public/screenshots/account-2talk-filled/zh-Hans.webp index 4b361d0..8dcbb76 100644 Binary files a/public/screenshots/account-2talk-filled/zh-Hans.webp and b/public/screenshots/account-2talk-filled/zh-Hans.webp differ diff --git a/public/screenshots/account-2talk-filled/zh-Hant.webp b/public/screenshots/account-2talk-filled/zh-Hant.webp index 350c55f..6e1324a 100644 Binary files a/public/screenshots/account-2talk-filled/zh-Hant.webp and b/public/screenshots/account-2talk-filled/zh-Hant.webp differ diff --git a/public/screenshots/in-call-hold/de.webp b/public/screenshots/in-call-hold/de.webp index bff13c9..51b62f1 100644 Binary files a/public/screenshots/in-call-hold/de.webp and b/public/screenshots/in-call-hold/de.webp differ diff --git a/public/screenshots/in-call-hold/en.webp b/public/screenshots/in-call-hold/en.webp index 9b33896..156bbb8 100644 Binary files a/public/screenshots/in-call-hold/en.webp and b/public/screenshots/in-call-hold/en.webp differ diff --git a/public/screenshots/in-call-hold/es.webp b/public/screenshots/in-call-hold/es.webp index 812db53..561dc96 100644 Binary files a/public/screenshots/in-call-hold/es.webp and b/public/screenshots/in-call-hold/es.webp differ diff --git a/public/screenshots/in-call-hold/fr.webp b/public/screenshots/in-call-hold/fr.webp index 457eabf..d64e4e7 100644 Binary files a/public/screenshots/in-call-hold/fr.webp and b/public/screenshots/in-call-hold/fr.webp differ diff --git a/public/screenshots/in-call-hold/it.webp b/public/screenshots/in-call-hold/it.webp index 1315a40..469df00 100644 Binary files a/public/screenshots/in-call-hold/it.webp and b/public/screenshots/in-call-hold/it.webp differ diff --git a/public/screenshots/in-call-hold/ja.webp b/public/screenshots/in-call-hold/ja.webp index 0b40b62..e9b3bf6 100644 Binary files a/public/screenshots/in-call-hold/ja.webp and b/public/screenshots/in-call-hold/ja.webp differ diff --git a/public/screenshots/in-call-hold/ko.webp b/public/screenshots/in-call-hold/ko.webp index 21b3283..0e4f8ff 100644 Binary files a/public/screenshots/in-call-hold/ko.webp and b/public/screenshots/in-call-hold/ko.webp differ diff --git a/public/screenshots/in-call-hold/zh-Hans.webp b/public/screenshots/in-call-hold/zh-Hans.webp index 955fd04..c1c79fa 100644 Binary files a/public/screenshots/in-call-hold/zh-Hans.webp and b/public/screenshots/in-call-hold/zh-Hans.webp differ diff --git a/public/screenshots/in-call-hold/zh-Hant.webp b/public/screenshots/in-call-hold/zh-Hant.webp index 7a346a8..591849e 100644 Binary files a/public/screenshots/in-call-hold/zh-Hant.webp and b/public/screenshots/in-call-hold/zh-Hant.webp differ diff --git a/public/screenshots/in-call-transfer/de.webp b/public/screenshots/in-call-transfer/de.webp index 305ba2d..25ee818 100644 Binary files a/public/screenshots/in-call-transfer/de.webp and b/public/screenshots/in-call-transfer/de.webp differ diff --git a/public/screenshots/in-call-transfer/en.webp b/public/screenshots/in-call-transfer/en.webp index 8bab46a..05d5179 100644 Binary files a/public/screenshots/in-call-transfer/en.webp and b/public/screenshots/in-call-transfer/en.webp differ diff --git a/public/screenshots/in-call-transfer/es.webp b/public/screenshots/in-call-transfer/es.webp index 9ec7aee..9519206 100644 Binary files a/public/screenshots/in-call-transfer/es.webp and b/public/screenshots/in-call-transfer/es.webp differ diff --git a/public/screenshots/in-call-transfer/fr.webp b/public/screenshots/in-call-transfer/fr.webp index b05a81c..81b82f9 100644 Binary files a/public/screenshots/in-call-transfer/fr.webp and b/public/screenshots/in-call-transfer/fr.webp differ diff --git a/public/screenshots/in-call-transfer/it.webp b/public/screenshots/in-call-transfer/it.webp index a14c673..4df7285 100644 Binary files a/public/screenshots/in-call-transfer/it.webp and b/public/screenshots/in-call-transfer/it.webp differ diff --git a/public/screenshots/in-call-transfer/ja.webp b/public/screenshots/in-call-transfer/ja.webp index eb75470..6d8c02c 100644 Binary files a/public/screenshots/in-call-transfer/ja.webp and b/public/screenshots/in-call-transfer/ja.webp differ diff --git a/public/screenshots/in-call-transfer/ko.webp b/public/screenshots/in-call-transfer/ko.webp index a0eac22..455e0d2 100644 Binary files a/public/screenshots/in-call-transfer/ko.webp and b/public/screenshots/in-call-transfer/ko.webp differ diff --git a/public/screenshots/in-call-transfer/zh-Hans.webp b/public/screenshots/in-call-transfer/zh-Hans.webp index f9dd3ab..f5eb1a2 100644 Binary files a/public/screenshots/in-call-transfer/zh-Hans.webp and b/public/screenshots/in-call-transfer/zh-Hans.webp differ diff --git a/public/screenshots/in-call-transfer/zh-Hant.webp b/public/screenshots/in-call-transfer/zh-Hant.webp index 52cccd1..8af3eb9 100644 Binary files a/public/screenshots/in-call-transfer/zh-Hant.webp and b/public/screenshots/in-call-transfer/zh-Hant.webp differ diff --git a/public/screenshots/in-call-waiting/de.webp b/public/screenshots/in-call-waiting/de.webp index 9220632..2e3dd4c 100644 Binary files a/public/screenshots/in-call-waiting/de.webp and b/public/screenshots/in-call-waiting/de.webp differ diff --git a/public/screenshots/in-call-waiting/en.webp b/public/screenshots/in-call-waiting/en.webp index 20afa2b..5933e2e 100644 Binary files a/public/screenshots/in-call-waiting/en.webp and b/public/screenshots/in-call-waiting/en.webp differ diff --git a/public/screenshots/in-call-waiting/es.webp b/public/screenshots/in-call-waiting/es.webp index 2a80d6a..cd9194a 100644 Binary files a/public/screenshots/in-call-waiting/es.webp and b/public/screenshots/in-call-waiting/es.webp differ diff --git a/public/screenshots/in-call-waiting/fr.webp b/public/screenshots/in-call-waiting/fr.webp index 6bb9b56..edc4a27 100644 Binary files a/public/screenshots/in-call-waiting/fr.webp and b/public/screenshots/in-call-waiting/fr.webp differ diff --git a/public/screenshots/in-call-waiting/it.webp b/public/screenshots/in-call-waiting/it.webp index 72cca85..521ae9c 100644 Binary files a/public/screenshots/in-call-waiting/it.webp and b/public/screenshots/in-call-waiting/it.webp differ diff --git a/public/screenshots/in-call-waiting/ja.webp b/public/screenshots/in-call-waiting/ja.webp index 983889b..6fb4580 100644 Binary files a/public/screenshots/in-call-waiting/ja.webp and b/public/screenshots/in-call-waiting/ja.webp differ diff --git a/public/screenshots/in-call-waiting/ko.webp b/public/screenshots/in-call-waiting/ko.webp index d8ec488..cce3a02 100644 Binary files a/public/screenshots/in-call-waiting/ko.webp and b/public/screenshots/in-call-waiting/ko.webp differ diff --git a/public/screenshots/in-call-waiting/zh-Hans.webp b/public/screenshots/in-call-waiting/zh-Hans.webp index 6f1fec2..f86c8fc 100644 Binary files a/public/screenshots/in-call-waiting/zh-Hans.webp and b/public/screenshots/in-call-waiting/zh-Hans.webp differ diff --git a/public/screenshots/in-call-waiting/zh-Hant.webp b/public/screenshots/in-call-waiting/zh-Hant.webp index a621670..be61fc3 100644 Binary files a/public/screenshots/in-call-waiting/zh-Hant.webp and b/public/screenshots/in-call-waiting/zh-Hant.webp differ diff --git a/public/screenshots/in-call/de.webp b/public/screenshots/in-call/de.webp index b151c73..e9f28e4 100644 Binary files a/public/screenshots/in-call/de.webp 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 index 75a2c73..717dd0d 100644 Binary files a/public/screenshots/in-call/en.webp 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 index 3660799..509c584 100644 Binary files a/public/screenshots/in-call/es.webp 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 index 78e2e72..2779ed5 100644 Binary files a/public/screenshots/in-call/fr.webp 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 index c5a8cbe..993d7ad 100644 Binary files a/public/screenshots/in-call/it.webp 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 index 3f43672..77add0d 100644 Binary files a/public/screenshots/in-call/ja.webp 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 index 0d9dce8..f5d6894 100644 Binary files a/public/screenshots/in-call/ko.webp 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 index ca64437..cf3769e 100644 Binary files a/public/screenshots/in-call/zh-Hans.webp 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 index c2ffe04..26b3135 100644 Binary files a/public/screenshots/in-call/zh-Hant.webp and b/public/screenshots/in-call/zh-Hant.webp differ diff --git a/public/screenshots/provider-picker-2talk/de.webp b/public/screenshots/provider-picker-2talk/de.webp index dca4ef8..521e21f 100644 Binary files a/public/screenshots/provider-picker-2talk/de.webp and b/public/screenshots/provider-picker-2talk/de.webp differ diff --git a/public/screenshots/provider-picker-2talk/en.webp b/public/screenshots/provider-picker-2talk/en.webp index 3f37efd..65eae4e 100644 Binary files a/public/screenshots/provider-picker-2talk/en.webp and b/public/screenshots/provider-picker-2talk/en.webp differ diff --git a/public/screenshots/provider-picker-2talk/es.webp b/public/screenshots/provider-picker-2talk/es.webp index b651c5b..d34eaf4 100644 Binary files a/public/screenshots/provider-picker-2talk/es.webp and b/public/screenshots/provider-picker-2talk/es.webp differ diff --git a/public/screenshots/provider-picker-2talk/fr.webp b/public/screenshots/provider-picker-2talk/fr.webp index c93a889..5626246 100644 Binary files a/public/screenshots/provider-picker-2talk/fr.webp and b/public/screenshots/provider-picker-2talk/fr.webp differ diff --git a/public/screenshots/provider-picker-2talk/it.webp b/public/screenshots/provider-picker-2talk/it.webp index 985331e..1c2381a 100644 Binary files a/public/screenshots/provider-picker-2talk/it.webp and b/public/screenshots/provider-picker-2talk/it.webp differ diff --git a/public/screenshots/provider-picker-2talk/ja.webp b/public/screenshots/provider-picker-2talk/ja.webp index 000abad..eb5bb93 100644 Binary files a/public/screenshots/provider-picker-2talk/ja.webp and b/public/screenshots/provider-picker-2talk/ja.webp differ diff --git a/public/screenshots/provider-picker-2talk/ko.webp b/public/screenshots/provider-picker-2talk/ko.webp index caea9c7..2ac35b0 100644 Binary files a/public/screenshots/provider-picker-2talk/ko.webp and b/public/screenshots/provider-picker-2talk/ko.webp differ diff --git a/public/screenshots/provider-picker-2talk/zh-Hans.webp b/public/screenshots/provider-picker-2talk/zh-Hans.webp index d93d805..f48c666 100644 Binary files a/public/screenshots/provider-picker-2talk/zh-Hans.webp and b/public/screenshots/provider-picker-2talk/zh-Hans.webp differ diff --git a/public/screenshots/provider-picker-2talk/zh-Hant.webp b/public/screenshots/provider-picker-2talk/zh-Hant.webp index 9c7dd54..dd7e809 100644 Binary files a/public/screenshots/provider-picker-2talk/zh-Hant.webp and b/public/screenshots/provider-picker-2talk/zh-Hant.webp differ diff --git a/public/screenshots/settings-automation-agents/de.webp b/public/screenshots/settings-automation-agents/de.webp index 0c6d901..8885167 100644 Binary files a/public/screenshots/settings-automation-agents/de.webp 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 index 7ea16be..47a9b13 100644 Binary files a/public/screenshots/settings-automation-agents/en.webp 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 index f96b2b2..53be4dc 100644 Binary files a/public/screenshots/settings-automation-agents/es.webp 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 index 373e64f..a4694e6 100644 Binary files a/public/screenshots/settings-automation-agents/fr.webp 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 index df1192e..f41bd17 100644 Binary files a/public/screenshots/settings-automation-agents/it.webp 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 index 7d9e44f..521e54e 100644 Binary files a/public/screenshots/settings-automation-agents/ja.webp 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 index 6db1c48..1a19ae3 100644 Binary files a/public/screenshots/settings-automation-agents/ko.webp 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 index 3fce9f6..5ef55f4 100644 Binary files a/public/screenshots/settings-automation-agents/zh-Hans.webp 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 index 3baf007..d938ecf 100644 Binary files a/public/screenshots/settings-automation-agents/zh-Hant.webp 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 index 8eb2324..8a32b0c 100644 Binary files a/public/screenshots/settings-automation/de.webp 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 index e4dc30e..721b37f 100644 Binary files a/public/screenshots/settings-automation/en.webp 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 index 497d737..c37e241 100644 Binary files a/public/screenshots/settings-automation/es.webp 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 index 9c28962..0c56b04 100644 Binary files a/public/screenshots/settings-automation/fr.webp 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 index 6b0b64f..7768361 100644 Binary files a/public/screenshots/settings-automation/it.webp 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 index 3e34b42..b062b05 100644 Binary files a/public/screenshots/settings-automation/ja.webp 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 index 3ff0768..0d174e8 100644 Binary files a/public/screenshots/settings-automation/ko.webp 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 index 39f0720..91c8697 100644 Binary files a/public/screenshots/settings-automation/zh-Hans.webp 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 index 5b126f2..9d8a9c9 100644 Binary files a/public/screenshots/settings-automation/zh-Hant.webp and b/public/screenshots/settings-automation/zh-Hant.webp differ diff --git a/public/screenshots/share-sheet/de.webp b/public/screenshots/share-sheet/de.webp index f44e74c..bd0bb9b 100644 Binary files a/public/screenshots/share-sheet/de.webp and b/public/screenshots/share-sheet/de.webp differ diff --git a/public/screenshots/share-sheet/en.webp b/public/screenshots/share-sheet/en.webp index 5bec705..e9130a2 100644 Binary files a/public/screenshots/share-sheet/en.webp and b/public/screenshots/share-sheet/en.webp differ diff --git a/public/screenshots/share-sheet/es.webp b/public/screenshots/share-sheet/es.webp index b99eaf8..9d03e36 100644 Binary files a/public/screenshots/share-sheet/es.webp and b/public/screenshots/share-sheet/es.webp differ diff --git a/public/screenshots/share-sheet/fr.webp b/public/screenshots/share-sheet/fr.webp index 96dc1a1..de11bd5 100644 Binary files a/public/screenshots/share-sheet/fr.webp and b/public/screenshots/share-sheet/fr.webp differ diff --git a/public/screenshots/share-sheet/it.webp b/public/screenshots/share-sheet/it.webp index 7f1df3e..3bf3307 100644 Binary files a/public/screenshots/share-sheet/it.webp and b/public/screenshots/share-sheet/it.webp differ diff --git a/public/screenshots/share-sheet/ja.webp b/public/screenshots/share-sheet/ja.webp index 1f85bca..581c596 100644 Binary files a/public/screenshots/share-sheet/ja.webp and b/public/screenshots/share-sheet/ja.webp differ diff --git a/public/screenshots/share-sheet/ko.webp b/public/screenshots/share-sheet/ko.webp index 13580cf..002b2f4 100644 Binary files a/public/screenshots/share-sheet/ko.webp and b/public/screenshots/share-sheet/ko.webp differ diff --git a/public/screenshots/share-sheet/zh-Hans.webp b/public/screenshots/share-sheet/zh-Hans.webp index 1bdd5b7..efc9b40 100644 Binary files a/public/screenshots/share-sheet/zh-Hans.webp and b/public/screenshots/share-sheet/zh-Hans.webp differ diff --git a/public/screenshots/share-sheet/zh-Hant.webp b/public/screenshots/share-sheet/zh-Hant.webp index 588af81..089ee97 100644 Binary files a/public/screenshots/share-sheet/zh-Hant.webp and b/public/screenshots/share-sheet/zh-Hant.webp differ diff --git a/src/components/ProductCarousel.astro b/src/components/ProductCarousel.astro new file mode 100644 index 0000000..1a22998 --- /dev/null +++ b/src/components/ProductCarousel.astro @@ -0,0 +1,146 @@ +--- +// A single, big image at a time with dot indicators to switch between them +// (a "carousel" — click a dot, an arrow, or swipe). Reused across the Voice +// overview page in every locale; only `shots` (alt/caption text) and +// `imgCode` change per locale. +import { ChevronLeft, ChevronRight } from '@lucide/astro'; + +interface Shot { + scene: string; + alt: string; + caption: string; +} + +interface Props { + imgCode: string; + shots: Shot[]; + // Outer frame — a border, a surface background, inset padding, and a + // shadow — around the image. On by default; pass `framed={false}` for a + // bare screenshot (rounded corners only, flush to the edge) when the + // shot's own chrome is enough. + framed?: boolean; +} + +const { imgCode, shots, framed = true } = Astro.props; +--- + + + + diff --git a/src/content/blog/de/hold-switch-and-transfer-calls.md b/src/content/blog/de/hold-switch-and-transfer-calls.md index 0fd2980..83db9a0 100644 --- a/src/content/blog/de/hold-switch-and-transfer-calls.md +++ b/src/content/blog/de/hold-switch-and-transfer-calls.md @@ -9,7 +9,7 @@ lang: "de" WaveKat Voice — das SIP-Softphone für Mac und Linux, das jeden Anruf aufzeichnet und transkribiert — kann jetzt die drei Dinge, die ein Empfang den ganzen Tag tut: einen Anrufer in die Warteschleife legen, einen zweiten Anruf annehmen, während der erste wartet, und einen Anrufer an jemand anderen weiterleiten — entweder sofort oder erst nach Rücksprache. Sie erscheinen mit WaveKat Voice [0.0.42](/de/voice/changelog/#0.0.42). -Das ist der bislang wörtlichste Schritt hin zu unserem Ziel, [jedem kleinen Unternehmen die Stimme eines großen zu geben](/de/blog/hello-world/). Wer bei einem großen Unternehmen anruft, hört „Einen Moment, ich stelle Sie durch" — und es funktioniert, weil dort eine Empfangskraft mit einer Telefonzentrale sitzt. Jetzt gibt [WaveKat Voice](/de/voice/) — das bereits jeden Anruf aufzeichnet und transkribiert — einem Ein-Personen-Betrieb dieselben Handgriffe. Halten, Anklopfen und Weiterleiten sind die Bedienelemente, nach denen am Empfang ständig gegriffen wird, und jedes ernstzunehmende [Softphone](/de/voice/alternatives/) muss sie haben — WaveKat Voice hat sie jetzt, mit einer eigenen Besonderheit: Was während des Haltens passiert, bleibt aus der Aufnahme heraus. +Das ist der bislang wörtlichste Schritt hin zu unserem Ziel, [jedem kleinen Unternehmen die Stimme eines großen zu geben](/de/blog/hello-world/). Wer bei einem großen Unternehmen anruft, hört „Einen Moment, ich stelle Sie durch" — und es funktioniert, weil dort eine Empfangskraft mit einer Telefonzentrale sitzt. Jetzt gibt [WaveKat Voice](/de/voice/) — das bereits jeden Anruf aufzeichnet und transkribiert — einem Ein-Personen-Betrieb dieselben Handgriffe. Halten, Anklopfen und Weiterleiten sind die Bedienelemente, nach denen am Empfang ständig gegriffen wird, und jedes ernstzunehmende [Softphone](/de/voice/alternatives/) muss sie haben — WaveKat Voice hat sie jetzt, mit einer eigenen Besonderheit: Was während des Haltens passiert, bleibt aus der Aufnahme heraus. Bedienelemente wie diese stecken tief in der Telefonsignalisierung selbst, was mit ein Grund ist, warum WaveKat Voice nun auf einer [eigenen, von Grund auf gebauten SIP-Engine](/de/blog/our-own-sip-engine/) läuft. ## Einen Anrufer halten diff --git a/src/content/blog/de/our-own-sip-engine.md b/src/content/blog/de/our-own-sip-engine.md new file mode 100644 index 0000000..f8d4466 --- /dev/null +++ b/src/content/blog/de/our-own-sip-engine.md @@ -0,0 +1,72 @@ +--- +title: "Warum WaveKat Voice auf einer eigenen SIP-Engine läuft" +description: "WaveKat Voice läuft jetzt auf wavekat-sip — unserer von Grund auf selbst gebauten, quelloffenen SIP/RTP-Engine. Kein fremder SIP-Stack, keine Blackbox zwischen Ihnen und Ihren Anrufen." +date: 2026-07-06 +author: Eason Guo +tags: [Sprach-KI, Technik, Open-Source, SIP] +lang: "de" +--- + +WaveKat Voice — das Softphone für Mac und Linux, das [jeden Anruf aufzeichnet und transkribiert](/de/voice/) — läuft jetzt auf einer SIP-Engine, die wir von Grund auf selbst geschrieben haben. [`wavekat-sip`](https://github.com/wavekat/wavekat-sip) ist ein quelloffenes Rust-Crate, das die Telefonsignalisierung und den Audiotransport selbst übernimmt, ganz ohne fremden SIP-Stack darunter. Jeder Anruf, den Sie führen oder annehmen, jedes Halten und jede Weiterleitung läuft nun über Code, der uns von A bis Z gehört. + +Das ist ein weiterer Schritt hin zu dem, worauf wir immer wieder zurückkommen: [jedem kleinen Unternehmen die Stimme eines großen zu geben](/de/blog/hello-world/). Eine große Telefonanlage ist verlässlich, weil die Menschen, die sie betreiben, jede ihrer Schichten kontrollieren. Die SIP-Engine selbst zu besitzen bedeutet, dass wir die Schicht kontrollieren, auf der Ihr Anruf tatsächlich reist — wenn also etwas zuverlässiger werden muss oder eine Funktion ausgeliefert werden soll, steht keine Blackbox im Weg. + +## Was SIP ist und warum es der schwierige Teil ist + +SIP (Session Initiation Protocol) ist die Sprache, die Telefone sprechen, um einen Anruf aufzubauen — Ihre Leitung beim Anbieter zu registrieren, die Gegenseite klingeln zu lassen, auszuhandeln, welcher Audio-Codec verwendet wird, und den Anruf am Ende sauber wieder abzubauen. RTP ist das, was das eigentliche Audio trägt, sobald der Anruf steht. Macht man SIP an einer feinen Stelle falsch, brechen Anrufe ab, es entsteht einseitiges Audio, oder eine Leitung nimmt still und leise keine Anrufe mehr an. Es ist der unglamouröse, präzise Kern, auf dem alles andere in einem Softphone aufsitzt. + +Bis vor Kurzem wickelte WaveKat Voice seine Anrufe über eine SIP-Bibliothek eines Drittanbieters ab. Damit waren wir schnell am Telefon, und das war früh die richtige Entscheidung. Aber ein geliehener Stack entscheidet für Sie, wie ein Anruf modelliert wird, wie Fehler zutage treten und welche Funktionen überhaupt erreichbar sind — und in dem Moment, in dem wir anfingen, Dinge wie Anrufweiterleitung und HD-Audio zu bauen, arbeiteten wir gegen seine Form statt mit ihr. + +## Warum wir eine eigene gebaut haben + +Wir haben die SIP-Engine von WaveKat Voice von Grund auf neu geschrieben, als `wavekat-sip`, aus drei schlichten Gründen: + +- **Kontrolle.** Funktionen wie einen Anrufer in die Warteschleife zu legen, [einen Anruf weiterzuleiten](/de/blog/hold-switch-and-transfer-calls/) und ein langes Gespräch mit Session-Timern am Leben zu halten, liegen allesamt auf der SIP-Schicht. Diese Schicht selbst zu besitzen heißt, dass wir sie direkt hinzufügen, statt das Modell eines anderen passend zu biegen. +- **Fußabdruck.** WaveKat Voice ist eine schlanke Desktop-App, die still und unauffällig aus dem Weg bleiben soll. Eine fokussierte, für den Zweck gebaute Engine hält sie klein — sie trägt nur das SIP und RTP, das sie tatsächlich nutzt, nicht den ganzen Ballast eines Allzweck-Stacks. +- **Keine Blackbox.** Wenn ein Anruf sich danebenbenimmt, können wir jede Zeile zwischen dem Knopf, den Sie gedrückt haben, und dem Paket auf der Leitung lesen und reparieren. Nichts daran, wie Ihre Anrufe funktionieren, ist für uns tabu. + +## Was die Engine übernimmt + +`wavekat-sip` kümmert sich um die Belange auf Leitungsebene und hält sich aus den Schichten für Audiogeräte und Anruforchestrierung heraus, damit es klein und einbettbar bleibt: + +| Bereich | Was es tut | +|------|-------------| +| **Registrierung** | Registriert Ihre Leitung beim Anbieter (Digest-Authentifizierung) und hält sie am Leben, damit eingehende Anrufe Sie immer erreichen. | +| **Anrufe** | Baut ausgehende Anrufe auf und nimmt eingehende an, und signalisiert Anrufern mit einem ordentlichen Klingelton, bevor Sie abheben. | +| **Steuerung im Anruf** | Halten und Fortsetzen (SIP re-INVITE, RFC 3264), Weiterleitung ohne und mit Rückfrage (SIP REFER, RFC 3515) und DTMF (Tastentöne) für Telefonmenüs. | +| **Audioqualität** | Handelt den [Opus-Codec](/de/voice/) für breitbandige „HD"-Sprache aus, mit automatischem Rückfall auf das Standard-G.711, wenn die Gegenseite ihn nicht unterstützt. | +| **Zuverlässigkeit** | RFC 4028 Session-Timer verhindern, dass lange Anrufe vom Netz mittendrin still gekappt werden. | + +## Es ist quelloffen — wie der Rest von WaveKat + +`wavekat-sip` ist keine private interne Komponente. Es ist unter der Apache-2.0-Lizenz auf [crates.io](https://crates.io/crates/wavekat-sip) veröffentlicht, mit Dokumentation auf [docs.rs](https://docs.rs/wavekat-sip), genau wie unsere Crates für [Voice-Activity-Detection](https://github.com/wavekat/wavekat-vad) und [Turn-Detection](https://github.com/wavekat/wavekat-turn). Wer in Rust ein Softphone, einen Voice-Bot oder eine Brücke zur Anrufaufzeichnung baut, kann genau die Engine nutzen, auf der WaveKat Voice läuft. Offen zu bauen ist unsere Arbeitsweise — die Werkzeuge unter unserem Produkt gehören Ihnen zum Prüfen und Weiterverwenden, sie sind kein Burggraben. + +Ehrlich gesagt ist es früh: Das Crate ist in aktiver Entwicklung, und seine API ändert sich zwischen den Versionen noch. Aber es ist die echte Engine hinter einem echten Produkt, kein Demo. + +## Häufige Fragen + +### Was ist wavekat-sip? + +`wavekat-sip` ist WaveKats eigenes quelloffenes Rust-Crate für SIP-Signalisierung und RTP-Audiotransport. Es ist die Engine hinter jedem Anruf, den WaveKat Voice führt oder annimmt, ganz ohne fremden SIP-Stack darunter. + +### Ist wavekat-sip Open Source, und kann ich es in meinem eigenen Projekt verwenden? + +Ja. `wavekat-sip` ist unter der Apache-2.0-Lizenz auf [crates.io](https://crates.io/crates/wavekat-sip) veröffentlicht, mit Dokumentation auf [docs.rs](https://docs.rs/wavekat-sip). Wer in Rust ein Softphone, einen Voice-Bot oder eine Brücke zur Anrufaufzeichnung baut, kann dieselbe Engine nutzen, auf der WaveKat Voice läuft. + +### Unterstützt WaveKat Voice HD-Audio? + +Ja. WaveKat Voice handelt den Opus-Codec für breitbandige „HD"-Sprache aus und fällt automatisch auf das Standard-G.711 zurück, wenn die Gegenseite des Anrufs Opus nicht unterstützt. + +### Funktioniert WaveKat Voice mit jedem SIP-Anbieter? + +Ja. `wavekat-sip` übernimmt die standardmäßige SIP-Registrierung mit Digest-Authentifizierung, es funktioniert also mit jedem SIP-konformen Anbieter oder jeder SIP-konformen Telefonanlage — mit dem Konto, das Sie bereits haben, ohne anbieterspezifische Einrichtung. + +### Ist wavekat-sip produktionsreif? + +Es ist die echte Engine hinter einem echten Produkt, also bereits täglich im Einsatz — aber es ist früh. Das Crate ist in aktiver Entwicklung, und seine API ändert sich zwischen den Versionen noch, also fixieren Sie eine Version, wenn Sie heute darauf aufbauen. + +## Was das für Ihre Anrufe bedeutet + +Meistens werden sich die Anrufe von WaveKat Voice überhaupt nicht anders anfühlen — und genau das ist der Sinn. Sie kommen zustande und klingen so, wie sie sollen. Was sich ändert, spielt sich hinter den Kulissen ab: Die Funktionen, die WaveKat Voice wie einen echten Empfang wirken lassen — Halten, Anklopfen, Weiterleiten, HD-Audio — werden nun nach unserem Zeitplan ausgeliefert statt nach dem einer Abhängigkeit, und wenn etwas stabiler werden muss, gehen wir direkt zu dem Code, der es betreibt. + +WaveKat Voice ist während der öffentlichen Beta [kostenlos](/de/voice/download/) auf Mac und Linux. Verbinden Sie den Telefonanbieter, den Sie bereits haben, und Ihr nächster Anruf läuft auf einer Engine, die wir selbst gebaut — und verschenkt — haben. diff --git a/src/content/blog/es/hold-switch-and-transfer-calls.md b/src/content/blog/es/hold-switch-and-transfer-calls.md index d34fb67..298f6b5 100644 --- a/src/content/blog/es/hold-switch-and-transfer-calls.md +++ b/src/content/blog/es/hold-switch-and-transfer-calls.md @@ -9,7 +9,7 @@ lang: "es" WaveKat Voice — el softphone SIP para Mac y Linux que graba y transcribe cada llamada — ahora puede hacer las tres cosas que una recepción hace todo el día: poner a quien llama en espera, contestar una segunda llamada mientras la primera espera y transferir a quien llama a otra persona — ya sea de inmediato o después de consultarlo primero. Llega con WaveKat Voice [0.0.42](/es/voice/changelog/#0.0.42). -Es el paso más literal hasta ahora hacia [dar a cada pequeño negocio la voz de uno grande](/es/blog/hello-world/). Cuando usted llama a una gran empresa, alguien dice «un momento, le comunico» — y funciona, porque hay una recepcionista con un conmutador. Ahora [WaveKat Voice](/es/voice/), que ya graba y transcribe cada llamada, le da a un negocio de una sola persona los mismos movimientos. Retener, la llamada en espera y la transferencia son los controles que quien atiende un escritorio usa constantemente, y cualquier [softphone](/es/voice/alternatives/) serio debe tenerlos — WaveKat Voice ya los tiene, con un matiz propio: lo que ocurre durante la espera queda fuera de la grabación. +Es el paso más literal hasta ahora hacia [dar a cada pequeño negocio la voz de uno grande](/es/blog/hello-world/). Cuando usted llama a una gran empresa, alguien dice «un momento, le comunico» — y funciona, porque hay una recepcionista con un conmutador. Ahora [WaveKat Voice](/es/voice/), que ya graba y transcribe cada llamada, le da a un negocio de una sola persona los mismos movimientos. Retener, la llamada en espera y la transferencia son los controles que quien atiende un escritorio usa constantemente, y cualquier [softphone](/es/voice/alternatives/) serio debe tenerlos — WaveKat Voice ya los tiene, con un matiz propio: lo que ocurre durante la espera queda fuera de la grabación. Controles como estos viven en lo más profundo de la propia señalización telefónica, lo que es en parte por lo que WaveKat Voice ahora funciona con [su propio motor SIP hecho desde cero](/es/blog/our-own-sip-engine/). ## Poner a quien llama en espera diff --git a/src/content/blog/es/our-own-sip-engine.md b/src/content/blog/es/our-own-sip-engine.md new file mode 100644 index 0000000..82c45d1 --- /dev/null +++ b/src/content/blog/es/our-own-sip-engine.md @@ -0,0 +1,72 @@ +--- +title: "Por qué WaveKat Voice funciona con su propio motor SIP" +description: "WaveKat Voice ahora funciona con wavekat-sip, nuestro motor SIP/RTP de código abierto hecho desde cero — sin protocolo SIP de terceros ni cajas negras entre usted y sus llamadas." +date: 2026-07-06 +author: Eason Guo +tags: [voz-ia, ingeniería, código-abierto, SIP] +lang: "es" +--- + +WaveKat Voice — el softphone para Mac y Linux que [graba y transcribe cada llamada](/es/voice/) — ahora funciona con un motor SIP que escribimos desde cero. [`wavekat-sip`](https://github.com/wavekat/wavekat-sip) es una crate de Rust de código abierto que se encarga por sí misma de la señalización telefónica y del transporte de audio, sin ningún protocolo SIP de terceros por debajo. Cada llamada que hace o contesta, cada retención y cada transferencia, ahora pasa por código que controlamos de principio a fin. + +Es otro paso hacia aquello a lo que siempre volvemos: [dar a cada pequeño negocio la voz de uno grande](/es/blog/hello-world/). Un gran sistema telefónico es fiable porque quienes lo operan controlan cada una de sus capas. Ser dueños del motor SIP es controlar la capa por la que su llamada realmente viaja — así, cuando algo necesita ser más fiable, o hay que lanzar una función, no hay ninguna caja negra en el medio. + +## Qué es SIP, y por qué es la parte difícil + +SIP (Protocolo de Inicio de Sesión) es el idioma que hablan los teléfonos para establecer una llamada — para registrar su línea con su proveedor, hacer sonar al otro lado, negociar qué códec de audio usar y colgar la llamada limpiamente al final. RTP es lo que transporta el audio real una vez que la llamada está en curso. Si SIP se hace sutilmente mal, las llamadas se caen, aparece audio unidireccional o una línea deja de recibir llamadas en silencio. Es el núcleo poco glamuroso y exigente sobre el que se apoya todo lo demás de un softphone. + +Hasta hace poco, WaveKat Voice conducía sus llamadas a través de una biblioteca SIP de terceros. Eso nos puso al teléfono rápidamente, lo cual fue la decisión correcta al principio. Pero un protocolo prestado decide por usted cómo se modela una llamada, cómo se manifiestan los errores y qué funciones son siquiera alcanzables — y en cuanto empezamos a construir cosas como la transferencia de llamadas y el audio HD, estábamos trabajando en contra de su forma en vez de con ella. + +## Por qué construimos el nuestro + +Reescribimos el motor SIP de WaveKat Voice desde cero, como `wavekat-sip`, por tres razones sencillas: + +- **Control.** Funciones como poner a quien llama en espera, [transferir una llamada](/es/blog/hold-switch-and-transfer-calls/) y mantener viva una llamada larga con temporizadores de sesión viven todas en la capa SIP. Ser dueños de esa capa significa que las añadimos directamente, en vez de doblegar el modelo de otro para que encaje. +- **Huella.** WaveKat Voice es una aplicación de escritorio ligera pensada para quedarse tranquila y fuera de su camino. Un motor enfocado y hecho a propósito lo mantiene pequeño — lleva solo el SIP y el RTP que realmente usa, no todo lo demás que trae un protocolo de propósito general. +- **Sin caja negra.** Cuando una llamada se porta mal, podemos leer y arreglar cada línea entre el botón que pulsó y el paquete que va por el cable. Nada sobre cómo funcionan sus llamadas queda vedado para nosotros. + +## De qué se encarga el motor + +`wavekat-sip` es dueño de los asuntos a nivel de cable y se mantiene al margen de las capas de dispositivo de audio y de orquestación de llamadas, por lo que sigue siendo pequeño e integrable: + +| Área | Qué hace | +|------|---------| +| **Registro** | Registra su línea con su proveedor (autenticación digest) y la mantiene viva para que las llamadas entrantes siempre le lleguen. | +| **Llamadas** | Realiza llamadas salientes y contesta las entrantes, y avisa a quien llama con una señal de timbre adecuada antes de que usted conteste. | +| **Control en llamada** | Retener y reanudar (SIP re-INVITE, RFC 3264), transferencia ciega y atendida (SIP REFER, RFC 3515) y DTMF (tonos del teclado) para menús telefónicos. | +| **Calidad de audio** | Negocia el [códec Opus](/es/voice/) para voz «HD» de banda ancha, con retorno automático al G.711 estándar cuando el otro lado no lo admite. | +| **Fiabilidad** | Los temporizadores de sesión de RFC 4028 evitan que las llamadas largas sean cortadas en silencio por la red a mitad de camino. | + +## Es de código abierto — como el resto de WaveKat + +`wavekat-sip` no es un componente interno privado. Está publicado en [crates.io](https://crates.io/crates/wavekat-sip) bajo la licencia Apache-2.0, con documentación en [docs.rs](https://docs.rs/wavekat-sip), igual que nuestras crates de [detección de actividad de voz](https://github.com/wavekat/wavekat-vad) y [detección de turno](https://github.com/wavekat/wavekat-turn). Cualquiera que construya un softphone, un bot de voz o un puente de grabación de llamadas en Rust puede usar el mismo motor con el que funciona WaveKat Voice. Construir en abierto es como trabajamos — las herramientas bajo nuestro producto están ahí para que las inspeccione y las reutilice, no como un foso. + +Es honesto decir que es temprano: la crate está en desarrollo activo y su API todavía cambia entre versiones. Pero es el motor real detrás de un producto real, no una demo. + +## Preguntas frecuentes + +### ¿Qué es wavekat-sip? + +`wavekat-sip` es la propia crate de Rust de código abierto de WaveKat para la señalización SIP y el transporte de audio RTP. Es el motor detrás de cada llamada que WaveKat Voice realiza o contesta, sin ningún protocolo SIP de terceros por debajo. + +### ¿Es wavekat-sip de código abierto, y puedo usarlo en mi propio proyecto? + +Sí. `wavekat-sip` está publicado en [crates.io](https://crates.io/crates/wavekat-sip) bajo la licencia Apache-2.0, con documentación en [docs.rs](https://docs.rs/wavekat-sip). Cualquiera que construya un softphone, un bot de voz o un puente de grabación de llamadas en Rust puede usar el mismo motor con el que funciona WaveKat Voice. + +### ¿WaveKat Voice admite audio HD? + +Sí. WaveKat Voice negocia el códec Opus para voz «HD» de banda ancha, y recurre automáticamente al G.711 estándar cuando el otro lado de la llamada no admite Opus. + +### ¿Funciona WaveKat Voice con cualquier proveedor SIP? + +Sí. `wavekat-sip` maneja el registro SIP estándar con autenticación digest, así que funciona con cualquier proveedor o centralita PBX compatible con SIP — la cuenta que usted ya tiene, sin configuración específica del proveedor. + +### ¿Está wavekat-sip listo para producción? + +Es el motor real detrás de un producto real, así que ya está en uso diario — pero es temprano. La crate está en desarrollo activo y su API todavía cambia entre versiones, así que fije una versión si construye sobre ella hoy. + +## Qué significa esto para sus llamadas + +En su mayoría, las llamadas de WaveKat Voice no se sentirán diferentes — y ese es el objetivo. Se conectan y suenan como deben. Lo que cambia está entre bastidores: las funciones que hacen que WaveKat Voice se sienta como una recepción de verdad — retención, llamada en espera, transferencia, audio HD — ahora se lanzan en nuestros tiempos en vez de los de una dependencia, y cuando algo necesita ser más estable, podemos ir directo al código que lo ejecuta. + +WaveKat Voice es [gratis durante la beta pública](/es/voice/download/) en Mac y Linux. Conecte el proveedor telefónico que ya tiene, y su próxima llamada funcionará con un motor que construimos nosotros mismos — y regalamos. diff --git a/src/content/blog/fr/hold-switch-and-transfer-calls.md b/src/content/blog/fr/hold-switch-and-transfer-calls.md index 93ed983..38ab9ea 100644 --- a/src/content/blog/fr/hold-switch-and-transfer-calls.md +++ b/src/content/blog/fr/hold-switch-and-transfer-calls.md @@ -9,7 +9,7 @@ lang: "fr" WaveKat Voice — le softphone SIP pour Mac et Linux qui enregistre et transcrit chaque appel — sait désormais faire les trois choses qu'un accueil fait toute la journée : mettre un appelant en attente, répondre à un second appel pendant que le premier patiente, et transférer un appelant vers quelqu'un d'autre — soit directement, soit après l'avoir consulté. Elles arrivent avec WaveKat Voice [0.0.42](/fr/voice/changelog/#0.0.42). -C'est le pas le plus littéral à ce jour vers notre objectif : [donner à chaque petite entreprise la voix d'une grande](/fr/blog/hello-world/). Quand vous appelez une grande entreprise, quelqu'un dit « un instant, je vous mets en relation » — et ça marche, parce qu'il y a une standardiste devant un standard. Désormais, [WaveKat Voice](/fr/voice/), qui enregistre et transcrit déjà chaque appel, donne les mêmes gestes à un commerce tenu par une seule personne. La mise en attente, le double appel et le transfert sont les commandes qu'une personne à l'accueil utilise sans cesse, et tout [softphone](/fr/voice/alternatives/) sérieux est censé les avoir — WaveKat Voice les a maintenant, avec sa touche à lui : ce qui se passe pendant l'attente reste hors de l'enregistrement. +C'est le pas le plus littéral à ce jour vers notre objectif : [donner à chaque petite entreprise la voix d'une grande](/fr/blog/hello-world/). Quand vous appelez une grande entreprise, quelqu'un dit « un instant, je vous mets en relation » — et ça marche, parce qu'il y a une standardiste devant un standard. Désormais, [WaveKat Voice](/fr/voice/), qui enregistre et transcrit déjà chaque appel, donne les mêmes gestes à un commerce tenu par une seule personne. La mise en attente, le double appel et le transfert sont les commandes qu'une personne à l'accueil utilise sans cesse, et tout [softphone](/fr/voice/alternatives/) sérieux est censé les avoir — WaveKat Voice les a maintenant, avec sa touche à lui : ce qui se passe pendant l'attente reste hors de l'enregistrement. Des commandes comme celles-ci vivent au plus profond de la signalisation téléphonique elle-même, ce qui explique en partie pourquoi WaveKat Voice tourne désormais sur [son propre moteur SIP écrit de zéro](/fr/blog/our-own-sip-engine/). ## Mettre un appelant en attente diff --git a/src/content/blog/fr/our-own-sip-engine.md b/src/content/blog/fr/our-own-sip-engine.md new file mode 100644 index 0000000..9b777be --- /dev/null +++ b/src/content/blog/fr/our-own-sip-engine.md @@ -0,0 +1,72 @@ +--- +title: "Pourquoi WaveKat Voice tourne sur son propre moteur SIP" +description: "WaveKat Voice tourne désormais sur wavekat-sip, notre moteur SIP/RTP open source écrit de zéro — aucune pile SIP tierce, et plus aucune boîte noire entre vous et vos appels." +date: 2026-07-06 +author: Eason Guo +tags: [ia-vocale, ingénierie, open-source, SIP] +lang: "fr" +--- + +WaveKat Voice — le softphone pour Mac et Linux qui [enregistre et transcrit chaque appel](/fr/voice/) — tourne désormais sur un moteur SIP que nous avons écrit de zéro. [`wavekat-sip`](https://github.com/wavekat/wavekat-sip) est un crate Rust open source qui prend en charge lui-même la signalisation téléphonique et le transport audio, sans aucune pile SIP tierce en dessous. Chaque appel que vous passez ou décrochez, chaque mise en attente et chaque transfert passe maintenant par du code que nous maîtrisons de bout en bout. + +C'est un pas de plus vers ce à quoi nous revenons sans cesse : [donner à chaque petite entreprise la voix d'une grande](/fr/blog/hello-world/). Un grand système téléphonique est fiable parce que ceux qui l'exploitent en contrôlent chaque couche. Maîtriser le moteur SIP, c'est maîtriser la couche sur laquelle votre appel voyage réellement — ainsi, quand quelque chose doit gagner en fiabilité, ou qu'une fonction doit sortir, aucune boîte noire ne se met en travers. + +## Ce qu'est SIP, et pourquoi c'est la partie difficile + +SIP (Session Initiation Protocol) est la langue que parlent les téléphones pour établir un appel — enregistrer votre ligne auprès de votre opérateur, faire sonner l'autre côté, négocier le codec audio à utiliser, puis raccrocher proprement à la fin. RTP est ce qui transporte l'audio proprement dit une fois l'appel établi. Un SIP subtilement mal fait, et les appels tombent, l'audio ne passe que dans un sens, ou une ligne cesse silencieusement de recevoir des appels. C'est le cœur ingrat et exigeant sur lequel repose tout le reste d'un softphone. + +Jusqu'à récemment, WaveKat Voice pilotait ses appels via une bibliothèque SIP tierce. Cela nous a mis au téléphone rapidement, ce qui était le bon choix au début. Mais une pile empruntée décide à votre place comment un appel est modélisé, comment les erreurs remontent, et quelles fonctions sont même atteignables — et dès que nous avons commencé à construire des choses comme le transfert d'appel et l'audio HD, nous travaillions en contournant sa forme au lieu d'aller avec elle. + +## Pourquoi nous avons construit le nôtre + +Nous avons réécrit le moteur SIP de WaveKat Voice de zéro, sous le nom de `wavekat-sip`, pour trois raisons toutes simples : + +- **Maîtrise.** Des fonctions comme mettre un appelant en attente, [transférer un appel](/fr/blog/hold-switch-and-transfer-calls/) et garder un long appel en vie avec des minuteurs de session vivent toutes à la couche SIP. Maîtriser cette couche signifie que nous les ajoutons directement, au lieu de plier le modèle de quelqu'un d'autre pour qu'il colle. +- **Empreinte.** WaveKat Voice est une application de bureau légère, faite pour rester discrètement à l'écart. Un moteur ciblé, conçu pour l'usage, la garde petite — il n'embarque que le SIP et le RTP qu'il utilise réellement, pas tout le fatras d'une pile généraliste. +- **Aucune boîte noire.** Quand un appel se comporte mal, nous pouvons lire et corriger chaque ligne entre le bouton que vous avez pressé et le paquet sur le fil. Rien dans le fonctionnement de vos appels ne nous est interdit. + +## Ce dont le moteur s'occupe + +`wavekat-sip` prend en charge les préoccupations de bas niveau, au ras du fil, et reste en dehors des couches périphérique audio et orchestration d'appel, de sorte qu'il reste petit et embarquable : + +| Domaine | Ce qu'il fait | +|------|-------------| +| **Enregistrement** | Enregistre votre ligne auprès de votre opérateur (authentification digest), et la maintient en vie pour que les appels entrants vous atteignent toujours. | +| **Appels** | Passe les appels sortants et décroche les entrants, et signale aux appelants une véritable sonnerie avant que vous ne répondiez. | +| **Contrôle en cours d'appel** | Mise en attente et reprise (SIP re-INVITE, RFC 3264), transfert aveugle et supervisé (SIP REFER, RFC 3515), et DTMF (tonalités du clavier) pour les menus téléphoniques. | +| **Qualité audio** | Négocie le [codec Opus](/fr/voice/) pour une voix « HD » à large bande, avec repli automatique vers le G.711 standard quand l'autre côté ne le prend pas en charge. | +| **Fiabilité** | Les minuteurs de session RFC 4028 empêchent les longs appels d'être silencieusement coupés par le réseau en plein milieu. | + +## C'est open source — comme le reste de WaveKat + +`wavekat-sip` n'est pas un composant interne privé. Il est publié sur [crates.io](https://crates.io/crates/wavekat-sip) sous licence Apache-2.0, avec sa documentation sur [docs.rs](https://docs.rs/wavekat-sip), au même titre que nos crates de [détection d'activité vocale](https://github.com/wavekat/wavekat-vad) et de [détection de tour de parole](https://github.com/wavekat/wavekat-turn). Quiconque construit un softphone, un bot vocal ou une passerelle d'enregistrement d'appels en Rust peut utiliser le moteur exact sur lequel tourne WaveKat Voice. Construire à découvert, c'est notre façon de travailler — les outils sous notre produit sont à vous, à inspecter et à réutiliser, pas des douves. + +Soyons honnêtes : c'est encore tôt. Le crate est en développement actif et son API change encore d'une version à l'autre. Mais c'est le vrai moteur derrière un vrai produit, pas une démo. + +## Questions fréquentes + +### Qu'est-ce que wavekat-sip ? + +`wavekat-sip` est le crate Rust open source de WaveKat pour la signalisation SIP et le transport audio RTP. C'est le moteur derrière chaque appel que WaveKat Voice passe ou décroche, sans aucune pile SIP tierce en dessous. + +### wavekat-sip est-il open source, et puis-je l'utiliser dans mon propre projet ? + +Oui. `wavekat-sip` est publié sur [crates.io](https://crates.io/crates/wavekat-sip) sous licence Apache-2.0, avec sa documentation sur [docs.rs](https://docs.rs/wavekat-sip). Quiconque construit un softphone, un bot vocal ou une passerelle d'enregistrement d'appels en Rust peut utiliser le même moteur sur lequel tourne WaveKat Voice. + +### WaveKat Voice prend-il en charge l'audio HD ? + +Oui. WaveKat Voice négocie le codec Opus pour une voix « HD » à large bande, et se replie automatiquement vers le G.711 standard quand l'autre côté de l'appel ne prend pas Opus en charge. + +### WaveKat Voice fonctionne-t-il avec n'importe quel opérateur SIP ? + +Oui. `wavekat-sip` gère l'enregistrement SIP standard avec authentification digest, si bien qu'il fonctionne avec n'importe quel opérateur ou PBX conforme à SIP — le compte que vous avez déjà, sans configuration propre à l'opérateur. + +### wavekat-sip est-il prêt pour la production ? + +C'est le vrai moteur derrière un vrai produit, il est donc déjà utilisé au quotidien — mais c'est encore tôt. Le crate est en développement actif et son API change encore d'une version à l'autre, alors épinglez une version si vous construisez dessus aujourd'hui. + +## Ce que cela change pour vos appels + +Le plus souvent, les appels de WaveKat Voice ne vous sembleront pas différents — et c'est bien le but. Ils s'établissent et sonnent comme ils le doivent. Ce qui change est en coulisses : les fonctions qui donnent à WaveKat Voice des airs de véritable accueil — mise en attente, double appel, transfert, audio HD — sortent désormais à notre rythme plutôt qu'à celui d'une dépendance, et quand quelque chose doit gagner en stabilité, nous pouvons aller droit au code qui l'exécute. + +WaveKat Voice est [gratuit pendant la bêta publique](/fr/voice/download/) sur Mac et Linux. Connectez l'opérateur téléphonique que vous avez déjà, et votre prochain appel tournera sur un moteur que nous avons construit nous-mêmes — et offert. diff --git a/src/content/blog/hold-switch-and-transfer-calls.md b/src/content/blog/hold-switch-and-transfer-calls.md index 71aab05..18bd73c 100644 --- a/src/content/blog/hold-switch-and-transfer-calls.md +++ b/src/content/blog/hold-switch-and-transfer-calls.md @@ -8,7 +8,7 @@ tags: [voice-ai, calls] WaveKat Voice — the SIP softphone for Mac and Linux that records and transcribes every call — can now do the three things a front desk does all day: put a caller on hold, answer a second call while the first one waits, and transfer a caller to someone else, either straight away or after checking with them first. It lands in [0.0.42](/voice/changelog/#0.0.42). -This is the most literal step yet toward [giving every small business the voice of a big one](/blog/hello-world/). When you call a big company, someone says "one moment, let me put you through" — and it works, because there's a receptionist with a switchboard. Now [WaveKat Voice](/voice/), which already records and transcribes every call, gives a one-person shop the same moves. Hold, call waiting, and transfer are the controls a desk worker reaches for constantly, and any serious [softphone](/voice/alternatives/) is expected to have them — WaveKat Voice now does, with its own twist: what happens on hold stays out of the recording. +This is the most literal step yet toward [giving every small business the voice of a big one](/blog/hello-world/). When you call a big company, someone says "one moment, let me put you through" — and it works, because there's a receptionist with a switchboard. Now [WaveKat Voice](/voice/), which already records and transcribes every call, gives a one-person shop the same moves. Hold, call waiting, and transfer are the controls a desk worker reaches for constantly, and any serious [softphone](/voice/alternatives/) is expected to have them — WaveKat Voice now does, with its own twist: what happens on hold stays out of the recording. Controls like these live deep in the phone signaling itself, which is part of why WaveKat Voice now runs on [its own from-scratch SIP engine](/blog/our-own-sip-engine/). ## Put a caller on hold diff --git a/src/content/blog/it/hold-switch-and-transfer-calls.md b/src/content/blog/it/hold-switch-and-transfer-calls.md index 0977b07..d0ac612 100644 --- a/src/content/blog/it/hold-switch-and-transfer-calls.md +++ b/src/content/blog/it/hold-switch-and-transfer-calls.md @@ -9,7 +9,7 @@ lang: "it" WaveKat Voice — il softphone SIP per Mac e Linux che registra e trascrive ogni chiamata — ora sa fare le tre cose che una reception fa tutto il giorno: mettere in attesa chi chiama, rispondere a una seconda chiamata mentre la prima aspetta e trasferire chi chiama a qualcun altro — subito, oppure dopo averlo prima consultato. Arriva con WaveKat Voice [0.0.42](/it/voice/changelog/#0.0.42). -È il passo più letterale finora verso il nostro obiettivo: [dare a ogni piccola attività la voce di una grande](/it/blog/hello-world/). Quando chiami una grande azienda, qualcuno dice «un attimo, la metto in linea» — e funziona, perché c'è una centralinista con un centralino. Ora [WaveKat Voice](/it/voice/), che già registra e trascrive ogni chiamata, dà a un negozio con una sola persona le stesse mosse. Attesa, avviso di chiamata e trasferimento sono i comandi che chi sta a una scrivania usa di continuo, e qualsiasi [softphone](/it/voice/alternatives/) serio deve averli — WaveKat Voice ora li ha, con un tocco tutto suo: quello che succede durante l'attesa resta fuori dalla registrazione. +È il passo più letterale finora verso il nostro obiettivo: [dare a ogni piccola attività la voce di una grande](/it/blog/hello-world/). Quando chiami una grande azienda, qualcuno dice «un attimo, la metto in linea» — e funziona, perché c'è una centralinista con un centralino. Ora [WaveKat Voice](/it/voice/), che già registra e trascrive ogni chiamata, dà a un negozio con una sola persona le stesse mosse. Attesa, avviso di chiamata e trasferimento sono i comandi che chi sta a una scrivania usa di continuo, e qualsiasi [softphone](/it/voice/alternatives/) serio deve averli — WaveKat Voice ora li ha, con un tocco tutto suo: quello che succede durante l'attesa resta fuori dalla registrazione. Comandi come questi vivono nel profondo del segnalamento telefonico stesso, il che è in parte il motivo per cui WaveKat Voice ora gira su un [motore SIP scritto da zero tutto suo](/it/blog/our-own-sip-engine/). ## Mettere in attesa chi chiama diff --git a/src/content/blog/it/our-own-sip-engine.md b/src/content/blog/it/our-own-sip-engine.md new file mode 100644 index 0000000..5f999fc --- /dev/null +++ b/src/content/blog/it/our-own-sip-engine.md @@ -0,0 +1,72 @@ +--- +title: "Perché WaveKat Voice gira su un motore SIP tutto suo" +description: "WaveKat Voice ora gira su wavekat-sip, il nostro motore SIP/RTP open source scritto da zero — nessuno stack SIP di terze parti, e nessuna scatola nera tra te e le tue chiamate." +date: 2026-07-06 +author: Eason Guo +tags: [voice-ai, ingegneria, open-source, SIP] +lang: "it" +--- + +WaveKat Voice — il softphone per Mac e Linux che [registra e trascrive ogni chiamata](/it/voice/) — ora gira su un motore SIP che abbiamo scritto da zero. [`wavekat-sip`](https://github.com/wavekat/wavekat-sip) è un crate Rust open source che gestisce da solo il segnalamento telefonico e il trasporto audio, senza alcuno stack SIP di terze parti al di sotto. Ogni chiamata che fai o ricevi, ogni attesa e ogni trasferimento, ora passa attraverso codice che controlliamo da un capo all'altro. + +È un altro passo verso ciò a cui torniamo sempre: [dare a ogni piccola attività la voce di una grande](/it/blog/hello-world/). Un grande sistema telefonico è affidabile perché chi lo gestisce controlla ogni suo strato. Possedere il motore SIP significa che siamo noi a controllare lo strato su cui la tua chiamata viaggia davvero — così quando qualcosa deve essere più affidabile, o una funzione deve uscire, non c'è nessuna scatola nera di mezzo. + +## Cos'è SIP, e perché è la parte difficile + +SIP (Session Initiation Protocol) è la lingua che i telefoni parlano per impostare una chiamata — per registrare la tua linea presso l'operatore, far squillare l'altra parte, negoziare quale codec audio usare e chiudere la chiamata in modo pulito alla fine. RTP è ciò che trasporta l'audio vero e proprio una volta che la chiamata è attiva. Basta sbagliare SIP di poco e le chiamate cadono, si sente l'audio in una sola direzione, oppure una linea smette in silenzio di ricevere chiamate. È il nocciolo poco appariscente ma esigente su cui poggia tutto il resto di un softphone. + +Fino a poco tempo fa, WaveKat Voice gestiva le sue chiamate attraverso una libreria SIP di terze parti. Ci ha permesso di telefonare in fretta, il che era la scelta giusta all'inizio. Ma uno stack preso in prestito decide al posto tuo come una chiamata viene modellata, come emergono gli errori e quali funzioni sono addirittura raggiungibili — e nel momento in cui abbiamo iniziato a costruire cose come il trasferimento di chiamata e l'audio HD, stavamo lavorando aggirando la sua forma invece che assecondandola. + +## Perché ne abbiamo costruito uno nostro + +Abbiamo riscritto il motore SIP di WaveKat Voice da zero, sotto il nome di `wavekat-sip`, per tre ragioni molto semplici: + +- **Controllo.** Funzioni come mettere in attesa chi chiama, [trasferire una chiamata](/it/blog/hold-switch-and-transfer-calls/) e mantenere viva una chiamata lunga con i session timer vivono tutte allo strato SIP. Possedere quello strato significa che le aggiungiamo direttamente, invece di piegare il modello di qualcun altro per farcele stare. +- **Ingombro.** WaveKat Voice è un'app desktop leggera, pensata per starsene tranquilla senza intralciarti. Un motore mirato e costruito su misura la mantiene piccola — porta con sé solo il SIP e l'RTP che usa davvero, non tutto il resto di uno stack generico. +- **Nessuna scatola nera.** Quando una chiamata si comporta male, possiamo leggere e correggere ogni riga tra il pulsante che hai premuto e il pacchetto sul filo. Nulla di come funzionano le tue chiamate ci è precluso. + +## Di cosa si occupa il motore + +`wavekat-sip` si occupa delle questioni a livello di filo e resta fuori dallo strato dei dispositivi audio e da quello dell'orchestrazione delle chiamate, così rimane piccolo e integrabile: + +| Ambito | Cosa fa | +|------|-------------| +| **Registrazione** | Registra la tua linea presso l'operatore (autenticazione digest) e la mantiene attiva, così le chiamate in arrivo ti raggiungono sempre. | +| **Chiamate** | Effettua chiamate in uscita e risponde a quelle in arrivo, e avvisa chi chiama con un vero segnale di squillo prima che tu risponda. | +| **Controllo durante la chiamata** | Attesa e ripresa (SIP re-INVITE, RFC 3264), trasferimento cieco e assistito (SIP REFER, RFC 3515) e DTMF (toni del tastierino) per i menu telefonici. | +| **Qualità audio** | Negozia il [codec Opus](/it/voice/) per la voce «HD» a banda larga, con ripiego automatico allo standard G.711 quando l'altra parte non lo supporta. | +| **Affidabilità** | I session timer RFC 4028 impediscono che le chiamate lunghe vengano fatte cadere in silenzio dalla rete a metà. | + +## È open source — come il resto di WaveKat + +`wavekat-sip` non è un componente interno privato. È pubblicato su [crates.io](https://crates.io/crates/wavekat-sip) sotto licenza Apache-2.0, con la documentazione su [docs.rs](https://docs.rs/wavekat-sip), esattamente come i nostri crate di [rilevamento dell'attività vocale](https://github.com/wavekat/wavekat-vad) e [rilevamento del turno](https://github.com/wavekat/wavekat-turn). Chiunque costruisca un softphone, un voice bot o un ponte di registrazione delle chiamate in Rust può usare lo stesso identico motore su cui gira WaveKat Voice. Costruire allo scoperto è il nostro modo di lavorare — gli strumenti sotto il nostro prodotto sono lì perché tu li ispezioni e li riusi, non un fossato difensivo. + +È onesto dire che è agli inizi: il crate è in sviluppo attivo e la sua API cambia ancora tra una versione e l'altra. Ma è il motore vero dietro un prodotto vero, non una demo. + +## Domande frequenti + +### Cos'è wavekat-sip? + +`wavekat-sip` è il crate Rust open source di WaveKat per il segnalamento SIP e il trasporto audio RTP. È il motore dietro ogni chiamata che WaveKat Voice fa o riceve, senza alcuno stack SIP di terze parti al di sotto. + +### wavekat-sip è open source, e posso usarlo nel mio progetto? + +Sì. `wavekat-sip` è pubblicato su [crates.io](https://crates.io/crates/wavekat-sip) sotto licenza Apache-2.0, con la documentazione su [docs.rs](https://docs.rs/wavekat-sip). Chiunque costruisca un softphone, un voice bot o un ponte di registrazione delle chiamate in Rust può usare lo stesso motore su cui gira WaveKat Voice. + +### WaveKat Voice supporta l'audio HD? + +Sì. WaveKat Voice negozia il codec Opus per la voce «HD» a banda larga, e ripiega automaticamente sullo standard G.711 quando l'altra parte della chiamata non supporta Opus. + +### WaveKat Voice funziona con qualsiasi operatore SIP? + +Sì. `wavekat-sip` gestisce la registrazione SIP standard con autenticazione digest, quindi funziona con qualsiasi operatore o centralino conforme a SIP — l'account che hai già, senza configurazione specifica dell'operatore. + +### wavekat-sip è pronto per la produzione? + +È il motore vero dietro un prodotto vero, quindi è già in uso quotidiano — ma è agli inizi. Il crate è in sviluppo attivo e la sua API cambia ancora tra una versione e l'altra, perciò se ci costruisci sopra oggi conviene fissare una versione. + +## Cosa significa questo per le tue chiamate + +Nella maggior parte dei casi, le chiamate di WaveKat Voice non ti sembreranno diverse — ed è proprio questo il punto. Si connettono e suonano come devono. Ciò che cambia è dietro le quinte: le funzioni che fanno sembrare WaveKat Voice una vera reception — attesa, avviso di chiamata, trasferimento, audio HD — ora escono secondo i nostri tempi invece che secondo quelli di una dipendenza, e quando qualcosa deve essere più solido, possiamo andare dritti al codice che lo fa girare. + +WaveKat Voice è [gratuito durante la beta pubblica](/it/voice/download/) su Mac e Linux. Collega l'operatore telefonico che hai già, e la tua prossima chiamata girerà su un motore che abbiamo costruito noi stessi — e regalato. diff --git a/src/content/blog/ja/hold-switch-and-transfer-calls.md b/src/content/blog/ja/hold-switch-and-transfer-calls.md index e044786..3b2cd78 100644 --- a/src/content/blog/ja/hold-switch-and-transfer-calls.md +++ b/src/content/blog/ja/hold-switch-and-transfer-calls.md @@ -9,7 +9,7 @@ lang: "ja" WaveKat Voice——通話をすべて録音・文字起こしする Mac・Linux 向けの SIP ソフトフォン——が、受付係が一日中こなしている 3 つのことをできるようになりました。通話を保留にする、最初の通話を待たせたまま 2 本目の着信に出る、そして通話を別の人へ転送する — すぐに転送することも、先に相手と話して確認してからつなぐこともできます。この機能は WaveKat Voice [0.0.42](/ja/voice/changelog/#0.0.42) で提供されます。 -これは、[すべての小規模ビジネスに大企業のような声を](/ja/blog/hello-world/)という目標に向けた、これまでで最も文字どおりの一歩です。大きな会社に電話をかけると、「少々お待ちください、おつなぎします」と言われ、実際につながります。受付係と電話交換機があるからです。いまや、[WaveKat Voice](/ja/voice/)——すでにすべての通話を録音し文字起こしするアプリ——が、ひとりで営むお店にも同じ動きを与えます。保留、キャッチホン、転送は、電話番の人が絶えず手を伸ばす操作であり、まともな[ソフトフォン](/ja/voice/alternatives/)なら備えていて当然の機能です。WaveKat Voice はそれらを備えたうえで、独自のこだわりをひとつ加えました。保留中に起きたことは、録音に残りません。 +これは、[すべての小規模ビジネスに大企業のような声を](/ja/blog/hello-world/)という目標に向けた、これまでで最も文字どおりの一歩です。大きな会社に電話をかけると、「少々お待ちください、おつなぎします」と言われ、実際につながります。受付係と電話交換機があるからです。いまや、[WaveKat Voice](/ja/voice/)——すでにすべての通話を録音し文字起こしするアプリ——が、ひとりで営むお店にも同じ動きを与えます。保留、キャッチホン、転送は、電話番の人が絶えず手を伸ばす操作であり、まともな[ソフトフォン](/ja/voice/alternatives/)なら備えていて当然の機能です。WaveKat Voice はそれらを備えたうえで、独自のこだわりをひとつ加えました。保留中に起きたことは、録音に残りません。こうした操作は電話の信号処理そのものの奥深くにあり、それも、WaveKat Voice がいまや[ゼロから作った自社製 SIP エンジン](/ja/blog/our-own-sip-engine/)で動いている理由のひとつです。 ## 通話を保留にする diff --git a/src/content/blog/ja/our-own-sip-engine.md b/src/content/blog/ja/our-own-sip-engine.md new file mode 100644 index 0000000..f4484da --- /dev/null +++ b/src/content/blog/ja/our-own-sip-engine.md @@ -0,0 +1,72 @@ +--- +title: "WaveKat Voice が自社製 SIP エンジンで動く理由" +description: "WaveKat Voice は、ゼロから書き上げたオープンソースの SIP/RTP エンジン wavekat-sip で動作するようになりました。第三者の SIP スタックも、あなたと通話の間に立ちはだかるブラックボックスもありません。" +date: 2026-07-06 +author: Eason Guo +tags: [音声AI, エンジニアリング, オープンソース, SIP] +lang: "ja" +--- + +WaveKat Voice——[通話をすべて録音・文字起こしする](/ja/voice/) Mac・Linux 向けのソフトフォン——が、私たちがゼロから書き上げた SIP エンジンで動くようになりました。[`wavekat-sip`](https://github.com/wavekat/wavekat-sip) は、電話の信号処理と音声伝送そのものを担うオープンソースの Rust クレートで、その下に第三者の SIP スタックは一切ありません。あなたが発信・応答するすべての通話、あらゆる保留や転送が、いまや私たちが端から端まで所有するコードを通ります。 + +これは、私たちが繰り返し立ち返る目標——[すべての小規模ビジネスに大企業のような声を](/ja/blog/hello-world/)——に向けたもう一歩です。大きな電話システムが頼りになるのは、それを運用する人たちがあらゆる層を掌握しているからです。SIP エンジンを所有するとは、あなたの通話が実際に通る層を私たちが掌握するということ——だから、もっと信頼できるものにしたいとき、あるいは機能を出したいときに、行く手をふさぐブラックボックスがありません。 + +## SIP とは何か、そしてなぜそこが難所なのか + +SIP(Session Initiation Protocol)は、通話を確立するために電話同士が話す言語です——あなたの回線をプロバイダーに登録し、相手を呼び出し、どの音声コーデックを使うかを交渉し、通話の終わりにきれいに切断します。通話がつながったあと、実際の音声を運ぶのが RTP です。SIP をほんの少し間違えるだけで、通話が切れたり、片方向しか聞こえなかったり、ある回線が何の前触れもなく着信を受けられなくなったりします。それは地味で厳密な中核であり、ソフトフォンのほかのすべてがその上に乗っています。 + +つい最近まで、WaveKat Voice は第三者の SIP ライブラリを通じて通話を動かしていました。おかげで私たちは素早く電話をつなげられ、初期にはそれが正しい判断でした。しかし借り物のスタックは、通話をどうモデル化するか、エラーをどう表に出すか、そもそもどの機能に手が届くかを、あなたの代わりに決めてしまいます——そして呼び出し転送や HD 音声のような機能を作り始めた瞬間から、私たちはその形に合わせて回り道をしていて、その形と一緒に作ってはいませんでした。 + +## なぜ自分たちで作ったのか + +私たちは WaveKat Voice の SIP エンジンを `wavekat-sip` としてゼロから書き直しました。理由は素朴に 3 つあります。 + +- **掌握。** 発信者を保留にする、[通話を転送する](/ja/blog/hold-switch-and-transfer-calls/)、セッションタイマーで長い通話を維持する——こうした機能はすべて SIP の層に存在します。その層を所有していれば、他人のモデルを無理に曲げて合わせるのではなく、直接そこに機能を加えられます。 +- **軽さ。** WaveKat Voice は、静かに邪魔にならず控えている軽量なデスクトップアプリです。焦点を絞った専用エンジンなら小さく保てます——汎用スタックが抱え込むあらゆるものではなく、実際に使う SIP と RTP だけを積んでいるからです。 +- **ブラックボックスがない。** 通話がおかしな動きをしたとき、あなたが押したボタンから回線上のパケットまで、あいだのすべての行を私たちが読み、直せます。あなたの通話がどう動いているかについて、私たちに立ち入れない領域はありません。 + +## このエンジンが担うこと + +`wavekat-sip` は回線レベルの事柄を所有し、音声デバイスや通話のオーケストレーションの層には踏み込まないので、小さく組み込みやすいまま保たれます。 + +| 領域 | 何をするか | +|------|-------------| +| **登録** | あなたの回線をプロバイダーに登録し(ダイジェスト認証)、着信が常に届くよう接続を維持します。 | +| **通話** | 外部への発信と着信への応答を行い、あなたが出る前に発信者へ正しい呼び出し信号を鳴らします。 | +| **通話中の制御** | 保留と再開(SIP re-INVITE、RFC 3264)、ブラインド転送と取り次ぎ転送(SIP REFER、RFC 3515)、そして電話メニュー用の DTMF(キーパッドのトーン)。 | +| **音質** | 広帯域の「HD」音声のために [Opus コーデック](/ja/voice/)を交渉し、相手が対応していないときは標準の G.711 に自動的にフォールバックします。 | +| **信頼性** | RFC 4028 のセッションタイマーが、長い通話が途中でネットワークに無言で切られるのを防ぎます。 | + +## オープンソースです——WaveKat のほかの部分と同じように + +`wavekat-sip` は非公開の内部コンポーネントではありません。私たちの[音声区間検出](https://github.com/wavekat/wavekat-vad)や[ターン検出](https://github.com/wavekat/wavekat-turn)のクレートと同じく、Apache-2.0 ライセンスで [crates.io](https://crates.io/crates/wavekat-sip) に公開され、ドキュメントは [docs.rs](https://docs.rs/wavekat-sip) にあります。Rust でソフトフォンや音声ボット、通話録音ブリッジを作る人なら誰でも、WaveKat Voice が動かしているのと同じエンジンをそのまま使えます。オープンに作ることが私たちのやり方です——製品の下にあるツールは、堀ではなく、あなたが調べて再利用できるものです。 + +正直に言えば、まだ早い段階です。このクレートは活発に開発中で、API はバージョン間でまだ変わります。それでも、デモではなく、本物の製品を支える本物のエンジンです。 + +## よくある質問 + +### wavekat-sip とは何ですか? + +`wavekat-sip` は、SIP 信号処理と RTP 音声伝送のための WaveKat 自社製のオープンソース Rust クレートです。WaveKat Voice が発信・応答するすべての通話を支えるエンジンであり、その下に第三者の SIP スタックはありません。 + +### wavekat-sip はオープンソースですか、自分のプロジェクトで使えますか? + +はい。`wavekat-sip` は Apache-2.0 ライセンスで [crates.io](https://crates.io/crates/wavekat-sip) に公開され、ドキュメントは [docs.rs](https://docs.rs/wavekat-sip) にあります。Rust でソフトフォンや音声ボット、通話録音ブリッジを作る人なら誰でも、WaveKat Voice が動かしているのと同じエンジンを使えます。 + +### WaveKat Voice は HD 音声に対応していますか? + +はい。WaveKat Voice は広帯域の「HD」音声のために Opus コーデックを交渉し、通話の相手が Opus に対応していないときは標準の G.711 に自動的にフォールバックします。 + +### WaveKat Voice はどの SIP プロバイダーでも使えますか? + +はい。`wavekat-sip` はダイジェスト認証による標準的な SIP 登録を扱うので、SIP に準拠したプロバイダーや PBX なら何でも動作します——いまお使いのアカウントのまま、プロバイダー固有の設定は不要です。 + +### wavekat-sip は本番運用に耐えますか? + +本物の製品を支える本物のエンジンなので、すでに毎日使われています——ですが、まだ早い段階です。このクレートは活発に開発中で、API はバージョン間でまだ変わるため、今日これを土台に構築するならバージョンを固定してください。 + +## これがあなたの通話に何をもたらすか + +たいていの場合、WaveKat Voice の通話は今までと何ら変わって感じられないでしょう——そしてそれこそが狙いです。通話はあるべきようにつながり、あるべきように聞こえます。変わるのは舞台裏です。WaveKat Voice を本物の受付のように感じさせる機能——保留、キャッチホン、転送、HD 音声——が、いまや依存ライブラリの都合ではなく私たちの都合で出せるようになり、もっと安定させたい部分があれば、それを動かすコードへ私たちが直接向かえます。 + +WaveKat Voice は Mac と Linux で[公開ベータの間は無料](/ja/voice/download/)です。すでにお持ちの電話プロバイダーを接続すれば、次の通話は、私たち自身が作り——そして手放したエンジンの上で動きます。 diff --git a/src/content/blog/ko/hold-switch-and-transfer-calls.md b/src/content/blog/ko/hold-switch-and-transfer-calls.md index fb716c8..928ccb4 100644 --- a/src/content/blog/ko/hold-switch-and-transfer-calls.md +++ b/src/content/blog/ko/hold-switch-and-transfer-calls.md @@ -9,7 +9,7 @@ lang: "ko" WaveKat Voice——모든 통화를 녹음하고 받아 적는 Mac·Linux용 SIP 소프트폰——가 이제 안내 데스크가 하루 종일 하는 세 가지 일을 할 수 있습니다. 전화를 보류하고, 첫 번째 통화가 기다리는 동안 두 번째 전화를 받고, 전화를 다른 사람에게 돌려줍니다 — 바로 넘길 수도 있고, 먼저 상대와 이야기해 확인한 뒤 넘길 수도 있습니다. 이 기능은 WaveKat Voice [0.0.42](/ko/voice/changelog/#0.0.42)에서 제공됩니다. -이것은 [모든 작은 비즈니스에 큰 기업의 목소리를](/ko/blog/hello-world/) 주겠다는 목표를 향한, 지금까지 중 가장 문자 그대로의 한 걸음입니다. 큰 회사에 전화를 걸면 누군가 "잠시만요, 연결해 드리겠습니다"라고 말하고 — 실제로 연결됩니다. 교환대를 갖춘 안내 직원이 있기 때문입니다. 이제 [WaveKat Voice](/ko/voice/)——이미 모든 통화를 녹음하고 받아 적는 이 앱——가 1인 가게에도 같은 능력을 줍니다. 보류, 통화 중 대기, 호전환은 데스크에서 일하는 사람이 쉴 새 없이 쓰는 조작이고, 제대로 된 [소프트폰](/ko/voice/alternatives/)이라면 당연히 갖춰야 할 기능입니다. WaveKat Voice는 이제 이 기능들을 갖췄고, 거기에 자신만의 원칙을 하나 더했습니다. 보류 중에 일어난 일은 녹음에 남지 않습니다. +이것은 [모든 작은 비즈니스에 큰 기업의 목소리를](/ko/blog/hello-world/) 주겠다는 목표를 향한, 지금까지 중 가장 문자 그대로의 한 걸음입니다. 큰 회사에 전화를 걸면 누군가 "잠시만요, 연결해 드리겠습니다"라고 말하고 — 실제로 연결됩니다. 교환대를 갖춘 안내 직원이 있기 때문입니다. 이제 [WaveKat Voice](/ko/voice/)——이미 모든 통화를 녹음하고 받아 적는 이 앱——가 1인 가게에도 같은 능력을 줍니다. 보류, 통화 중 대기, 호전환은 데스크에서 일하는 사람이 쉴 새 없이 쓰는 조작이고, 제대로 된 [소프트폰](/ko/voice/alternatives/)이라면 당연히 갖춰야 할 기능입니다. WaveKat Voice는 이제 이 기능들을 갖췄고, 거기에 자신만의 원칙을 하나 더했습니다. 보류 중에 일어난 일은 녹음에 남지 않습니다. 이런 조작은 전화 신호 그 깊은 곳에 자리 잡고 있는데, 이것이 바로 WaveKat Voice가 이제 [처음부터 직접 만든 자체 SIP 엔진](/ko/blog/our-own-sip-engine/) 위에서 돌아가는 이유의 일부입니다. ## 전화를 보류하기 diff --git a/src/content/blog/ko/our-own-sip-engine.md b/src/content/blog/ko/our-own-sip-engine.md new file mode 100644 index 0000000..b6418cb --- /dev/null +++ b/src/content/blog/ko/our-own-sip-engine.md @@ -0,0 +1,72 @@ +--- +title: "WaveKat Voice가 자체 SIP 엔진 위에서 돌아가는 이유" +description: "WaveKat Voice가 이제 wavekat-sip 위에서 돌아갑니다 — 처음부터 직접 만든 오픈소스 SIP·RTP 엔진으로, 제3자 SIP 스택도, 당신과 통화 사이를 가로막는 블랙박스도 없습니다." +date: 2026-07-06 +author: Eason Guo +tags: [음성AI, 엔지니어링, 오픈소스, SIP] +lang: "ko" +--- + +WaveKat Voice——[모든 통화를 녹음하고 받아 적는](/ko/voice/) Mac·Linux용 소프트폰——가 이제 우리가 처음부터 직접 만든 SIP 엔진 위에서 돌아갑니다. [`wavekat-sip`](https://github.com/wavekat/wavekat-sip)은 전화 신호와 오디오 전송을 스스로 처리하는 오픈소스 Rust 크레이트로, 그 아래에 제3자 SIP 스택이 전혀 없습니다. 당신이 걸거나 받는 모든 통화, 모든 보류와 호전환이 이제 우리가 처음부터 끝까지 소유한 코드를 거칩니다. + +이것은 우리가 늘 되돌아가는 그 목표를 향한 또 한 걸음입니다. [모든 작은 비즈니스에 큰 기업의 목소리를](/ko/blog/hello-world/) 주는 것 말입니다. 큰 전화 시스템이 믿음직한 이유는, 그것을 운영하는 사람들이 모든 계층을 직접 통제하기 때문입니다. SIP 엔진을 소유한다는 것은 당신의 통화가 실제로 지나가는 그 계층을 우리가 통제한다는 뜻입니다 — 더 안정적으로 만들어야 할 때도, 새 기능을 내보내야 할 때도, 중간을 가로막는 블랙박스가 없습니다. + +## SIP가 무엇이고, 왜 가장 어려운 부분인가 + +SIP(세션 개시 프로토콜)는 통화를 설정하기 위해 전화기끼리 나누는 언어입니다 — 당신의 회선을 통신사에 등록하고, 상대편을 울리고, 어떤 오디오 코덱을 쓸지 협상하고, 통화가 끝나면 깔끔하게 끊습니다. 통화가 연결된 뒤 실제 오디오를 실어 나르는 것은 RTP입니다. SIP를 미묘하게라도 잘못 다루면 통화가 끊기고, 한쪽만 소리가 들리고, 회선이 소리 없이 더 이상 전화를 받지 못하게 됩니다. 화려하지 않지만 한 치의 오차도 허용하지 않는, 소프트폰의 다른 모든 것이 그 위에 얹혀 있는 핵심입니다. + +얼마 전까지 WaveKat Voice는 통화를 제3자 SIP 라이브러리를 통해 구동했습니다. 덕분에 빠르게 전화를 걸 수 있었고, 초기에는 그것이 옳은 선택이었습니다. 하지만 빌려 온 스택은 통화를 어떻게 모델링할지, 오류를 어떻게 드러낼지, 어떤 기능에 아예 손이 닿을 수 있는지를 대신 결정합니다 — 그래서 호전환이나 HD 오디오 같은 것을 만들기 시작한 순간, 우리는 우리 생각대로가 아니라 그 스택의 형태에 맞춰 우회하며 일하고 있었습니다. + +## 우리가 직접 만든 이유 + +우리는 WaveKat Voice의 SIP 엔진을 `wavekat-sip`이라는 이름으로 처음부터 다시 만들었습니다. 이유는 아주 단순하게 세 가지입니다. + +- **통제.** 발신자를 보류에 두고, [통화를 전환하고](/ko/blog/hold-switch-and-transfer-calls/), 세션 타이머로 긴 통화를 살아 있게 유지하는 기능은 모두 SIP 계층에 있습니다. 그 계층을 소유하면, 남의 모델을 억지로 맞추는 대신 우리가 직접 기능을 더할 수 있습니다. +- **경량.** WaveKat Voice는 조용히 당신의 시야 밖에 머무르도록 만들어진 가벼운 데스크톱 앱입니다. 목적에 맞춰 만든 집중된 엔진은 앱을 작게 유지합니다 — 범용 스택의 온갖 것을 다 짊어지는 대신, 실제로 쓰는 SIP와 RTP만 담습니다. +- **블랙박스 없음.** 통화가 이상하게 굴 때, 당신이 누른 버튼과 회선 위의 패킷 사이에 있는 모든 줄을 우리가 읽고 고칠 수 있습니다. 당신의 통화가 어떻게 작동하는지에 대해 우리에게 금지된 영역은 없습니다. + +## 이 엔진이 담당하는 것 + +`wavekat-sip`은 연결 수준의 일만 맡고 오디오 장치와 통화 조율 계층에는 손대지 않아, 작고 임베드하기 쉬운 상태를 유지합니다. + +| 영역 | 하는 일 | +|------|-------------| +| **등록** | 당신의 회선을 통신사에 등록(다이제스트 인증)하고, 걸려 오는 전화가 언제나 당신에게 닿도록 계속 살려 둡니다. | +| **통화** | 발신 통화를 걸고 수신 통화를 받으며, 당신이 받기 전에 제대로 된 링잉 신호로 발신자에게 알립니다. | +| **통화 중 제어** | 보류와 재개(SIP re-INVITE, RFC 3264), 블라인드·협의 호전환(SIP REFER, RFC 3515), 그리고 전화 메뉴용 DTMF(키패드 톤). | +| **음질** | 광대역 "HD" 음성을 위해 [Opus 코덱](/ko/voice/)을 협상하고, 상대편이 지원하지 않으면 자동으로 표준 G.711로 되돌립니다. | +| **안정성** | RFC 4028 세션 타이머로 긴 통화가 도중에 네트워크에 의해 소리 없이 끊기는 것을 막습니다. | + +## 오픈소스입니다 — WaveKat의 나머지처럼 + +`wavekat-sip`은 비공개 내부 부품이 아닙니다. 우리의 [음성 활동 검출](https://github.com/wavekat/wavekat-vad)과 [발화 순서 검출](https://github.com/wavekat/wavekat-turn) 크레이트와 똑같이, Apache-2.0 라이선스로 [crates.io](https://crates.io/crates/wavekat-sip)에 공개되어 있고 문서는 [docs.rs](https://docs.rs/wavekat-sip)에 있습니다. Rust로 소프트폰, 음성 봇, 통화 녹음 브리지를 만드는 누구든 WaveKat Voice가 돌아가는 바로 그 엔진을 쓸 수 있습니다. 열린 방식으로 만드는 것이 우리의 일하는 방식입니다 — 제품 아래에 깔린 도구들은 해자가 아니라, 당신이 들여다보고 다시 쓰라고 있는 것입니다. + +솔직히 말하면 아직 이릅니다. 이 크레이트는 활발히 개발 중이고 API도 버전마다 아직 바뀝니다. 하지만 데모가 아니라 진짜 제품 뒤에서 돌아가는 진짜 엔진입니다. + +## 자주 묻는 질문 + +### wavekat-sip이 무엇인가요? + +`wavekat-sip`은 SIP 신호와 RTP 오디오 전송을 담당하는 WaveKat 자체 오픈소스 Rust 크레이트입니다. WaveKat Voice가 걸거나 받는 모든 통화 뒤에 있는 엔진이며, 그 아래에 제3자 SIP 스택이 전혀 없습니다. + +### wavekat-sip은 오픈소스인가요? 제 프로젝트에 써도 되나요? + +네. `wavekat-sip`은 Apache-2.0 라이선스로 [crates.io](https://crates.io/crates/wavekat-sip)에 공개되어 있고, 문서는 [docs.rs](https://docs.rs/wavekat-sip)에 있습니다. Rust로 소프트폰, 음성 봇, 통화 녹음 브리지를 만드는 누구든 WaveKat Voice가 돌아가는 바로 그 엔진을 쓸 수 있습니다. + +### WaveKat Voice는 HD 오디오를 지원하나요? + +네. WaveKat Voice는 광대역 "HD" 음성을 위해 Opus 코덱을 협상하고, 상대편이 Opus를 지원하지 않으면 자동으로 표준 G.711로 되돌립니다. + +### WaveKat Voice는 아무 SIP 통신사에서나 작동하나요? + +네. `wavekat-sip`은 다이제스트 인증을 쓰는 표준 SIP 등록을 처리하므로, SIP 표준을 따르는 어떤 통신사나 PBX에서도 작동합니다 — 이미 가지고 있는 계정 그대로, 통신사별 설정 없이요. + +### wavekat-sip은 프로덕션에 쓸 수 있나요? + +진짜 제품 뒤에서 돌아가는 진짜 엔진이라 이미 매일 쓰이고 있습니다 — 하지만 아직 이릅니다. 이 크레이트는 활발히 개발 중이고 API도 버전마다 아직 바뀌므로, 지금 이것을 기반으로 만든다면 버전을 고정하세요. + +## 이것이 당신의 통화에 의미하는 것 + +대부분의 경우 WaveKat Voice의 통화는 별로 달라진 느낌이 없을 것입니다 — 바로 그게 핵심입니다. 마땅히 그래야 하는 대로 연결되고 들립니다. 달라지는 것은 무대 뒤입니다. WaveKat Voice를 진짜 안내 데스크처럼 느끼게 하는 기능들 — 보류, 통화 중 대기, 호전환, HD 오디오 — 이 이제 의존 라이브러리가 아니라 우리 일정에 맞춰 나오고, 무언가를 더 안정적으로 해야 할 때 그것을 돌리는 코드로 곧장 갈 수 있습니다. + +WaveKat Voice는 Mac과 Linux에서 [공개 베타 기간 동안 무료](/ko/voice/download/)입니다. 이미 쓰고 있는 전화 통신사를 연결하면, 다음 통화는 우리가 직접 만들어 — 그리고 거저 내놓은 — 엔진 위에서 돌아갑니다. diff --git a/src/content/blog/our-own-sip-engine.md b/src/content/blog/our-own-sip-engine.md new file mode 100644 index 0000000..8950bef --- /dev/null +++ b/src/content/blog/our-own-sip-engine.md @@ -0,0 +1,71 @@ +--- +title: "Why WaveKat Voice Runs on Its Own SIP Engine" +description: "WaveKat Voice now runs on wavekat-sip, our from-scratch, open-source SIP/RTP engine — no third-party SIP stack, and no black box between you and your calls." +date: 2026-07-06 +author: Eason Guo +tags: [voice-ai, engineering, open-source, sip] +--- + +WaveKat Voice — the softphone for Mac and Linux that [records and transcribes every call](/voice/) — now runs on a SIP engine we wrote from scratch. [`wavekat-sip`](https://github.com/wavekat/wavekat-sip) is an open-source Rust crate that handles the phone signaling and audio transport itself, with no third-party SIP stack underneath. Every call you place or answer, every hold and transfer, now goes through code we own end to end. + +This is another step toward the thing we keep coming back to: [giving every small business the voice of a big one](/blog/hello-world/). A big phone system is dependable because the people who run it control every layer of it. Owning the SIP engine is us controlling the layer your call actually travels on — so when something needs to be more reliable, or a feature needs to ship, there's no black box in the way. + +## What SIP is, and why it's the hard part + +SIP (Session Initiation Protocol) is the language phones speak to set up a call — to register your line with your provider, ring the other side, negotiate which audio codec to use, and tear the call down cleanly at the end. RTP is what carries the actual audio once the call is up. Get SIP subtly wrong and calls drop, one-way audio happens, or a line silently stops receiving calls. It's the unglamorous, exacting core that everything else in a softphone sits on top of. + +Until recently, WaveKat Voice drove its calls through a third-party SIP library. That got us on the phone quickly, which was the right call early on. But a borrowed stack decides for you how a call is modeled, how errors surface, and which features are even reachable — and the moment we started building things like call transfer and HD audio, we were working around its shape instead of with it. + +## Why we built our own + +We rewrote WaveKat Voice's SIP engine from scratch, as `wavekat-sip`, for three plain reasons: + +- **Control.** Features like putting a caller on hold, [transferring a call](/blog/hold-switch-and-transfer-calls/), and keeping a long call alive with session timers all live at the SIP layer. Owning that layer means we add them directly, instead of bending someone else's model to fit. +- **Footprint.** WaveKat Voice is a lightweight desktop app that's meant to sit quietly out of your way. A focused, purpose-built engine keeps it small — it carries only the SIP and RTP it actually uses, not a general-purpose stack's worth of everything else. +- **No black box.** When a call misbehaves, we can read and fix every line between the button you pressed and the packet on the wire. Nothing about how your calls work is off-limits to us. + +## What the engine handles + +`wavekat-sip` owns the wire-level concerns and stays out of the audio-device and call-orchestration layers, so it remains small and embeddable: + +| Area | What it does | +|------|-------------| +| **Registration** | Registers your line with your provider (digest auth), and keeps it alive so incoming calls always reach you. | +| **Calls** | Places outbound calls and answers inbound ones, and alerts callers with a proper ringing signal before you pick up. | +| **In-call control** | Hold and resume (SIP re-INVITE, RFC 3264), blind and attended transfer (SIP REFER, RFC 3515), and DTMF (keypad tones) for phone menus. | +| **Audio quality** | Negotiates the [Opus codec](/voice/) for wideband "HD" voice, with automatic fallback to standard G.711 when the other side doesn't support it. | +| **Reliability** | RFC 4028 session timers keep long calls from being silently dropped by the network in the middle. | + +## It's open source — like the rest of WaveKat + +`wavekat-sip` isn't a private internal component. It's published on [crates.io](https://crates.io/crates/wavekat-sip) under the Apache-2.0 license, with docs on [docs.rs](https://docs.rs/wavekat-sip), the same way our [voice-activity detection](https://github.com/wavekat/wavekat-vad) and [turn detection](https://github.com/wavekat/wavekat-turn) crates are. Anyone building a softphone, a voice bot, or a call-recording bridge in Rust can use the exact engine WaveKat Voice runs on. Building in the open is how we work — the tools underneath our product are yours to inspect and reuse, not a moat. + +It's honest to say it's early: the crate is in active development and its API still changes between versions. But it's the real engine behind a real product, not a demo. + +## Frequently asked questions + +### What is wavekat-sip? + +`wavekat-sip` is WaveKat's own open-source Rust crate for SIP signaling and RTP audio transport. It's the engine behind every call WaveKat Voice places or answers, with no third-party SIP stack underneath. + +### Is wavekat-sip open source, and can I use it in my own project? + +Yes. `wavekat-sip` is published on [crates.io](https://crates.io/crates/wavekat-sip) under the Apache-2.0 license, with docs on [docs.rs](https://docs.rs/wavekat-sip). Anyone building a softphone, a voice bot, or a call-recording bridge in Rust can use the same engine WaveKat Voice runs on. + +### Does WaveKat Voice support HD audio? + +Yes. WaveKat Voice negotiates the Opus codec for wideband "HD" voice, and falls back automatically to standard G.711 when the other side of the call doesn't support Opus. + +### Does WaveKat Voice work with any SIP provider? + +Yes. `wavekat-sip` handles standard SIP registration with digest authentication, so it works with any SIP-compliant provider or PBX — the account you already have, with no provider-specific setup. + +### Is wavekat-sip production-ready? + +It's the real engine behind a real product, so it's already in daily use — but it's early. The crate is in active development and its API still changes between versions, so pin a version if you build on it today. + +## What this means for your calls + +Mostly, WaveKat Voice's calls won't feel any different — and that's the point. They connect and sound the way they should. What changes is behind the scenes: the features that make WaveKat Voice feel like a real front desk — hold, call waiting, transfer, HD audio — now ship on our timeline instead of a dependency's, and when something needs to be steadier, we can go straight to the code that runs it. + +WaveKat Voice is [free during the public beta](/voice/download/) on Mac and Linux. Connect the phone provider you already have, and your next call runs on an engine we built ourselves — and gave away. diff --git a/src/content/blog/zh-hant/hold-switch-and-transfer-calls.md b/src/content/blog/zh-hant/hold-switch-and-transfer-calls.md index 7bdf963..9bb9d75 100644 --- a/src/content/blog/zh-hant/hold-switch-and-transfer-calls.md +++ b/src/content/blog/zh-hant/hold-switch-and-transfer-calls.md @@ -9,7 +9,7 @@ lang: "zh-Hant" WaveKat Voice——一款可在 Mac 和 Linux 上執行、會記錄並轉寫每一通通話的 SIP 軟體電話——現在可以做總機每天都在做的三件事:把來電者保留、在第一通電話等待時接聽第二通來電,以及把來電者轉接給其他人——可以直接轉過去,也可以先和對方溝通確認。該功能隨 WaveKat Voice [0.0.42](/zh-hant/voice/changelog/#0.0.42) 推出。 -這是我們朝著[讓每一家小企業都擁有大企業的聲音](/zh-hant/blog/hello-world/)邁出的最直觀的一步。當你致電一家大公司時,會有人說「請稍候,我幫您轉過去」——之所以能做到,是因為有一位總機和一台話務台。現在,[WaveKat Voice](/zh-hant/voice/)——這款已經記錄並轉寫每一通通話的應用程式——讓一個人的小店也擁有同樣的能力。保留、話中插接和轉接是接線員每天都離不開的操作,也是任何一款像樣的[軟體電話](/zh-hant/voice/alternatives/)都應具備的功能——WaveKat Voice 現在不僅有了它們,還多了一層自己的堅持:保留期間發生的一切,不會進入錄音。 +這是我們朝著[讓每一家小企業都擁有大企業的聲音](/zh-hant/blog/hello-world/)邁出的最直觀的一步。當你致電一家大公司時,會有人說「請稍候,我幫您轉過去」——之所以能做到,是因為有一位總機和一台話務台。現在,[WaveKat Voice](/zh-hant/voice/)——這款已經記錄並轉寫每一通通話的應用程式——讓一個人的小店也擁有同樣的能力。保留、話中插接和轉接是接線員每天都離不開的操作,也是任何一款像樣的[軟體電話](/zh-hant/voice/alternatives/)都應具備的功能——WaveKat Voice 現在不僅有了它們,還多了一層自己的堅持:保留期間發生的一切,不會進入錄音。像這樣的控制功能都藏在電話信令本身之中,這也是 WaveKat Voice 如今運行在[自研的 SIP 引擎](/zh-hant/blog/our-own-sip-engine/)上的部分原因。 ## 將來電者保留 diff --git a/src/content/blog/zh-hant/our-own-sip-engine.md b/src/content/blog/zh-hant/our-own-sip-engine.md new file mode 100644 index 0000000..4d68d50 --- /dev/null +++ b/src/content/blog/zh-hant/our-own-sip-engine.md @@ -0,0 +1,72 @@ +--- +title: "WaveKat Voice 為什麼執行在自研 SIP 引擎上" +description: "WaveKat Voice 現已執行在 wavekat-sip 上——我們從零編寫的開源 SIP 與 RTP 引擎,不依賴任何第三方協定堆疊。為什麼要自己寫,這對你的通話意味著什麼。" +date: 2026-07-06 +author: Eason Guo +tags: [語音AI, 工程, 開源, SIP] +lang: "zh-Hant" +--- + +WaveKat Voice——這款可在 Mac 和 Linux 上執行、[會記錄並轉寫每一通通話](/zh-hant/voice/)的軟體電話——現在執行在一個我們從零編寫的 SIP 引擎上:[`wavekat-sip`](https://github.com/wavekat/wavekat-sip)。這是一個開源的 Rust crate,電話信令和音訊傳輸都由它自己完成,底下沒有任何第三方 SIP 協定堆疊。你撥出或接聽的每一通電話、每一次保留和轉接,如今都跑在我們從頭到尾自己掌握的程式碼上。 + +這是我們朝著那個念念不忘的目標又邁進的一步:[讓每一家小企業都擁有大企業的聲音](/zh-hant/blog/hello-world/)。大公司的電話系統之所以可靠,是因為營運它的人掌控著它的每一層。自己掌握 SIP 引擎,就是我們掌控了你的通話真正經過的那一層——需要更可靠時、需要新功能時,中間不再隔著一個黑盒。 + +## SIP 是什麼,為什麼它是難啃的那部分 + +SIP(工作階段起始協定)是電話之間建立通話所講的語言——把你的線路註冊到電信業者、讓對方的電話響起來、協商用哪種音訊編解碼器,並在通話結束時乾淨地掛斷。通話接通之後,實際的音訊則由 RTP 承載。SIP 只要有一點微妙的差錯,就會出現掉線、單向聽不到聲音,或者一條線路悄無聲息地再也收不到來電。它不起眼、卻極為嚴苛,是軟體電話裡其他一切功能賴以立足的核心。 + +不久之前,WaveKat Voice 的通話還是透過一個第三方 SIP 函式庫來驅動的。它讓我們很快就能打通電話,在早期這是正確的選擇。但借來的協定堆疊會替你決定通話如何建模、錯誤如何暴露、哪些功能根本觸及不到——當我們開始做通話轉接和高清音訊這樣的功能時,我們是在遷就它的形狀,而不是順著自己的思路做事。 + +## 我們為什麼要自己寫 + +我們從零重寫了 WaveKat Voice 的 SIP 引擎,也就是 `wavekat-sip`,理由很樸素,有三條: + +- **掌控。** 把來電者置於保留狀態、[轉接通話](/zh-hant/blog/hold-switch-and-transfer-calls/)、用工作階段計時器讓長通話保持存活——這些功能都落在 SIP 這一層。掌握了這一層,我們就能直接把功能加上去,而不是把別人的模型掰彎來湊合。 +- **輕量。** WaveKat Voice 是一款安靜地待在一旁的輕量桌面應用程式。一個專注、為此而生的引擎能讓它保持小巧——只帶上它真正用到的 SIP 和 RTP,而不是一個通用協定堆疊裡包羅萬象的一切。 +- **沒有黑盒。** 當一通電話出問題時,從你按下的按鈕到線路上的封包,中間的每一行程式碼我們都能讀、都能改。你的通話是怎麼運作的,對我們來說沒有任何禁區。 + +## 這個引擎負責什麼 + +`wavekat-sip` 只管連線層面的事務,不涉足音訊裝置和通話編排層,因此保持著小巧和可嵌入: + +| 領域 | 它做什麼 | +|------|---------| +| **註冊** | 把你的線路註冊到電信業者(摘要認證),並保持在線,讓來電始終能找到你。 | +| **通話** | 撥出電話、接聽來電,並在你接起之前給對方送出規範的振鈴訊號。 | +| **通話中控制** | 保留與恢復(SIP re-INVITE,RFC 3264)、盲轉與詢問轉接(SIP REFER,RFC 3515),以及電話選單所需的 DTMF(按鍵音)。 | +| **音質** | 協商 [Opus 編解碼器](/zh-hant/voice/)實現寬頻「高清」語音,對方不支援時自動回落到標準的 G.711。 | +| **可靠性** | RFC 4028 工作階段計時器,防止長通話在中途被網路悄悄掐斷。 | + +## 它是開源的——和 WaveKat 的其他部分一樣 + +`wavekat-sip` 不是一個私有的內部元件。它以 Apache-2.0 授權發布在 [crates.io](https://crates.io/crates/wavekat-sip) 上,文件在 [docs.rs](https://docs.rs/wavekat-sip),就像我們的[語音活動偵測](https://github.com/wavekat/wavekat-vad)和[話輪偵測](https://github.com/wavekat/wavekat-turn) crate 一樣。任何用 Rust 建構軟體電話、語音機器人或通話錄音橋接器的人,都可以使用 WaveKat Voice 正在執行的這個引擎。開放地建構就是我們的工作方式——產品底下的工具供你審閱、供你重複使用,而不是一道護城河。 + +說句實話:它還早。這個 crate 正在積極開發中,API 在版本之間仍會變化。但它是驅動一個真實產品的真實引擎,不是一個展示品。 + +## 常見問題 + +### wavekat-sip 是什麼? + +`wavekat-sip` 是 WaveKat 自研的開源 Rust crate,負責 SIP 信令和 RTP 音訊傳輸。它是 WaveKat Voice 撥出或接聽每一通電話背後的引擎,底下沒有任何第三方 SIP 協定堆疊。 + +### wavekat-sip 是開源的嗎?我能用在自己的專案裡嗎? + +可以。`wavekat-sip` 以 Apache-2.0 授權發布在 [crates.io](https://crates.io/crates/wavekat-sip) 上,文件在 [docs.rs](https://docs.rs/wavekat-sip)。任何用 Rust 建構軟體電話、語音機器人或通話錄音橋接器的人,都可以使用 WaveKat Voice 正在執行的這同一個引擎。 + +### WaveKat Voice 支援高清音訊嗎? + +支援。WaveKat Voice 會協商 Opus 編解碼器來實現寬頻「高清」語音;當對方不支援 Opus 時,會自動回落到標準的 G.711。 + +### WaveKat Voice 能搭配任意 SIP 電信業者使用嗎? + +可以。`wavekat-sip` 採用標準的 SIP 註冊(摘要認證),因此可與任何相容 SIP 的電信業者或 PBX 搭配——用你已有的帳號,無需任何電信業者專屬設定。 + +### wavekat-sip 可以用於生產環境了嗎? + +它是驅動一個真實產品的真實引擎,因此已經每天在用——但它還早。這個 crate 正在積極開發中,API 在版本之間仍會變化,所以如果你現在就基於它建構,請鎖定版本。 + +## 這對你的通話意味著什麼 + +大多數時候,WaveKat Voice 的通話不會讓你察覺到任何變化——這正是重點。電話照常接通,聲音一如既往。變化發生在幕後:那些讓 WaveKat Voice 用起來像一個真正櫃台的功能——保留、通話等待、轉接、高清音訊——如今按我們自己的節奏推出,而不是看某個相依函式庫的臉色;哪裡需要更穩,我們可以直接走到執行它的那行程式碼跟前。 + +WaveKat Voice 在公測期間[免費](/zh-hant/voice/download/),支援 Mac 和 Linux。接入你已有的電話電信業者,你的下一通電話就執行在一個我們親手打造、並且開源送出的引擎上。 diff --git a/src/content/blog/zh/hold-switch-and-transfer-calls.md b/src/content/blog/zh/hold-switch-and-transfer-calls.md index a3ff286..10c2c57 100644 --- a/src/content/blog/zh/hold-switch-and-transfer-calls.md +++ b/src/content/blog/zh/hold-switch-and-transfer-calls.md @@ -9,7 +9,7 @@ lang: "zh-Hans" WaveKat Voice——一款可在 Mac 和 Linux 上运行、会记录并转写每一通通话的 SIP 软电话——现在可以做前台每天都在做的三件事:把来电者置于保持状态、在第一通电话等待时接听第二通来电,以及把来电者转接给其他人——可以直接转过去,也可以先和对方沟通确认。该功能随 WaveKat Voice [0.0.42](/zh/voice/changelog/#0.0.42) 推出。 -这是我们朝着[让每一家小企业都拥有大企业的声音](/zh/blog/hello-world/)迈出的最直观的一步。当你致电一家大公司时,会有人说「请稍等,我帮您转过去」——之所以能做到,是因为有一位前台和一台话务台。现在,[WaveKat Voice](/zh/voice/)——这款已经记录并转写每一通通话的应用——让一个人的小店也拥有同样的能力。保持、呼叫等待和转接是接线员每天都离不开的操作,也是任何一款像样的[软电话](/zh/voice/alternatives/)都应具备的功能——WaveKat Voice 现在不仅有了它们,还多了一层自己的坚持:保持期间发生的一切,不会进入录音。 +这是我们朝着[让每一家小企业都拥有大企业的声音](/zh/blog/hello-world/)迈出的最直观的一步。当你致电一家大公司时,会有人说「请稍等,我帮您转过去」——之所以能做到,是因为有一位前台和一台话务台。现在,[WaveKat Voice](/zh/voice/)——这款已经记录并转写每一通通话的应用——让一个人的小店也拥有同样的能力。保持、呼叫等待和转接是接线员每天都离不开的操作,也是任何一款像样的[软电话](/zh/voice/alternatives/)都应具备的功能——WaveKat Voice 现在不仅有了它们,还多了一层自己的坚持:保持期间发生的一切,不会进入录音。像这样的控制功能都藏在电话信令本身之中,这也是 WaveKat Voice 如今运行在[自研的 SIP 引擎](/zh/blog/our-own-sip-engine/)上的部分原因。 ## 将来电者置于保持状态 diff --git a/src/content/blog/zh/our-own-sip-engine.md b/src/content/blog/zh/our-own-sip-engine.md new file mode 100644 index 0000000..79d5497 --- /dev/null +++ b/src/content/blog/zh/our-own-sip-engine.md @@ -0,0 +1,72 @@ +--- +title: "WaveKat Voice 为什么运行在自研 SIP 引擎上" +description: "WaveKat Voice 现已运行在 wavekat-sip 上——我们从零编写的开源 SIP 与 RTP 引擎,不依赖任何第三方协议栈。为什么要自己写,这对你的通话意味着什么。" +date: 2026-07-06 +author: Eason Guo +tags: [语音AI, 工程, 开源, SIP] +lang: "zh-Hans" +--- + +WaveKat Voice——这款可在 Mac 和 Linux 上运行、[会记录并转写每一通通话](/zh/voice/)的软电话——现在运行在一个我们从零编写的 SIP 引擎上:[`wavekat-sip`](https://github.com/wavekat/wavekat-sip)。这是一个开源的 Rust crate,电话信令和音频传输都由它自己完成,底下没有任何第三方 SIP 协议栈。你拨出或接听的每一通电话、每一次保持和转接,如今都跑在我们从头到尾自己掌握的代码上。 + +这是我们朝着那个念念不忘的目标又迈进的一步:[让每一家小企业都拥有大企业的声音](/zh/blog/hello-world/)。大公司的电话系统之所以可靠,是因为运营它的人掌控着它的每一层。自己掌握 SIP 引擎,就是我们掌控了你的通话真正经过的那一层——需要更可靠时、需要新功能时,中间不再隔着一个黑盒。 + +## SIP 是什么,为什么它是难啃的那部分 + +SIP(会话发起协议)是电话之间建立通话所讲的语言——把你的线路注册到运营商、让对方的电话响起来、协商用哪种音频编解码器,并在通话结束时干净地挂断。通话接通之后,实际的音频则由 RTP 承载。SIP 只要有一点微妙的差错,就会出现掉线、单向听不到声音,或者一条线路悄无声息地再也收不到来电。它不起眼、却极为严苛,是软电话里其他一切功能赖以立足的核心。 + +不久之前,WaveKat Voice 的通话还是通过一个第三方 SIP 库来驱动的。它让我们很快就能打通电话,在早期这是正确的选择。但借来的协议栈会替你决定通话如何建模、错误如何暴露、哪些功能根本触及不到——当我们开始做呼叫转接和高清音频这样的功能时,我们是在迁就它的形状,而不是顺着自己的思路做事。 + +## 我们为什么要自己写 + +我们从零重写了 WaveKat Voice 的 SIP 引擎,也就是 `wavekat-sip`,理由很朴素,有三条: + +- **掌控。** 把来电者置于保持状态、[转接通话](/zh/blog/hold-switch-and-transfer-calls/)、用会话计时器让长通话保持存活——这些功能都落在 SIP 这一层。掌握了这一层,我们就能直接把功能加上去,而不是把别人的模型掰弯来凑合。 +- **轻量。** WaveKat Voice 是一款安静地待在一旁的轻量桌面应用。一个专注、为此而生的引擎能让它保持小巧——只带上它真正用到的 SIP 和 RTP,而不是一个通用协议栈里包罗万象的一切。 +- **没有黑盒。** 当一通电话出问题时,从你按下的按钮到线路上的数据包,中间的每一行代码我们都能读、都能改。你的通话是怎么工作的,对我们来说没有任何禁区。 + +## 这个引擎负责什么 + +`wavekat-sip` 只管连线层面的事务,不涉足音频设备和通话编排层,因此保持着小巧和可嵌入: + +| 领域 | 它做什么 | +|------|---------| +| **注册** | 把你的线路注册到运营商(摘要认证),并保持在线,让来电始终能找到你。 | +| **通话** | 拨出电话、接听来电,并在你接起之前给对方送出规范的振铃信号。 | +| **通话中控制** | 保持与恢复(SIP re-INVITE,RFC 3264)、盲转与询问转接(SIP REFER,RFC 3515),以及电话菜单所需的 DTMF(按键音)。 | +| **音质** | 协商 [Opus 编解码器](/zh/voice/)实现宽频「高清」语音,对方不支持时自动回落到标准的 G.711。 | +| **可靠性** | RFC 4028 会话计时器,防止长通话在中途被网络悄悄掐断。 | + +## 它是开源的——和 WaveKat 的其他部分一样 + +`wavekat-sip` 不是一个私有的内部组件。它以 Apache-2.0 许可证发布在 [crates.io](https://crates.io/crates/wavekat-sip) 上,文档在 [docs.rs](https://docs.rs/wavekat-sip),就像我们的[语音活动检测](https://github.com/wavekat/wavekat-vad)和[话轮检测](https://github.com/wavekat/wavekat-turn) crate 一样。任何用 Rust 构建软电话、语音机器人或通话录音网桥的人,都可以使用 WaveKat Voice 正在运行的这个引擎。开放地构建就是我们的工作方式——产品底下的工具供你审阅、供你复用,而不是一道护城河。 + +说句实话:它还早。这个 crate 正在积极开发中,API 在版本之间仍会变化。但它是驱动一个真实产品的真实引擎,不是一个演示品。 + +## 常见问题 + +### wavekat-sip 是什么? + +`wavekat-sip` 是 WaveKat 自研的开源 Rust crate,负责 SIP 信令和 RTP 音频传输。它是 WaveKat Voice 拨出或接听每一通电话背后的引擎,底下没有任何第三方 SIP 协议栈。 + +### wavekat-sip 是开源的吗?我能用在自己的项目里吗? + +可以。`wavekat-sip` 以 Apache-2.0 许可证发布在 [crates.io](https://crates.io/crates/wavekat-sip) 上,文档在 [docs.rs](https://docs.rs/wavekat-sip)。任何用 Rust 构建软电话、语音机器人或通话录音网桥的人,都可以使用 WaveKat Voice 正在运行的这同一个引擎。 + +### WaveKat Voice 支持高清音频吗? + +支持。WaveKat Voice 会协商 Opus 编解码器来实现宽频「高清」语音;当对方不支持 Opus 时,会自动回落到标准的 G.711。 + +### WaveKat Voice 能配合任意 SIP 运营商使用吗? + +可以。`wavekat-sip` 采用标准的 SIP 注册(摘要认证),因此可与任何兼容 SIP 的运营商或 PBX 配合——用你已有的账号,无需任何运营商专属配置。 + +### wavekat-sip 可以用于生产环境了吗? + +它是驱动一个真实产品的真实引擎,因此已经每天在用——但它还早。这个 crate 正在积极开发中,API 在版本之间仍会变化,所以如果你现在就基于它构建,请锁定版本。 + +## 这对你的通话意味着什么 + +大多数时候,WaveKat Voice 的通话不会让你察觉到任何变化——这正是重点。电话照常接通,声音一如既往。变化发生在幕后:那些让 WaveKat Voice 用起来像一个真正前台的功能——保持、呼叫等待、转接、高清音频——如今按我们自己的节奏推出,而不是看某个依赖库的脸色;哪里需要更稳,我们可以直接走到运行它的那行代码跟前。 + +WaveKat Voice 在公测期间[免费](/zh/voice/download/),支持 Mac 和 Linux。接入你已有的电话运营商,你的下一通电话就运行在一个我们亲手打造、并且开源送出的引擎上。 diff --git a/src/layouts/Post.astro b/src/layouts/Post.astro index dd6dc63..40a889d 100644 --- a/src/layouts/Post.astro +++ b/src/layouts/Post.astro @@ -15,9 +15,12 @@ interface Props { tags?: string[]; ogImage?: string; faqs?: Faq[]; + // Defense-in-depth for drafts: even if a DRAFTS=1 build ever reached + // production, a draft post must not be indexable. + noindex?: boolean; } -const { title, description, date, updated, author, tags = [], ogImage, faqs = [] } = Astro.props; +const { title, description, date, updated, author, tags = [], ogImage, faqs = [], noindex = false } = Astro.props; // Locale-aware back link, date formatting and labels (works at /zh/blog/… too). const { code: lang } = resolveLocale(Astro.url.pathname); @@ -38,6 +41,7 @@ const canonicalURL = new URL(Astro.url.pathname, Astro.site); ogImageAlt={title} ogType="article" article={{ publishedTime: date, modifiedTime: updated, author: author || 'WaveKat', tags }} + noindex={noindex} >
diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts index 22f07bd..1801338 100644 --- a/src/lib/i18n.ts +++ b/src/lib/i18n.ts @@ -79,6 +79,7 @@ const fullSite = [ '/blog/place-calls-from-the-command-line/', '/blog/share-a-call-recording/', '/blog/hold-switch-and-transfer-calls/', + '/blog/our-own-sip-engine/', '/about/', ]; diff --git a/src/pages/about.astro b/src/pages/about.astro index b1ba2f1..94d3f38 100644 --- a/src/pages/about.astro +++ b/src/pages/about.astro @@ -37,6 +37,8 @@ const aboutSchema = { tools for small businesses. Its flagship product, WaveKat Voice, is a desktop softphone for Mac and Linux that records and transcribes every call. + WaveKat is built by its founder, Eason Guo, who develops WaveKat Voice and the + open-source Rust libraries beneath it.

diff --git a/src/pages/blog/[slug].astro b/src/pages/blog/[slug].astro index 99855e3..5548134 100644 --- a/src/pages/blog/[slug].astro +++ b/src/pages/blog/[slug].astro @@ -24,6 +24,7 @@ const { Content } = await render(post); author={post.data.author} tags={post.data.tags} ogImage={post.data.ogImage} + noindex={post.data.draft} faqs={extractFaqs(post.body ?? '')} > diff --git a/src/pages/de/about.astro b/src/pages/de/about.astro index f914270..0637bc6 100644 --- a/src/pages/de/about.astro +++ b/src/pages/de/about.astro @@ -32,7 +32,7 @@ const aboutSchema = {

Über WaveKat

-

WaveKat Voice, ist ein Desktop-Softphone für Mac und Linux, das jeden Anruf aufzeichnet und transkribiert."} /> +

WaveKat Voice, ist ein Desktop-Softphone für Mac und Linux, das jeden Anruf aufzeichnet und transkribiert. WaveKat wird von seinem Gründer Eason Guo entwickelt, der WaveKat Voice und die zugrunde liegenden quelloffenen Rust-Bibliotheken schreibt."} />

diff --git a/src/pages/de/blog/[slug].astro b/src/pages/de/blog/[slug].astro index 9aa9d7c..a871d21 100644 --- a/src/pages/de/blog/[slug].astro +++ b/src/pages/de/blog/[slug].astro @@ -27,6 +27,7 @@ const { Content } = await render(post); author={post.data.author} tags={post.data.tags} ogImage={post.data.ogImage} + noindex={post.data.draft} faqs={extractFaqs(post.body ?? '')} > diff --git a/src/pages/de/voice/index.astro b/src/pages/de/voice/index.astro index 6969d2b..6844b65 100644 --- a/src/pages/de/voice/index.astro +++ b/src/pages/de/voice/index.astro @@ -10,8 +10,10 @@ import Voice from '../../../layouts/Voice.astro'; import TalkCTA from '../../../components/TalkCTA.astro'; import { PhoneCall, + PhoneForwarded, Mic, FileText, + AudioLines, Terminal, Server, Cloud, @@ -20,10 +22,31 @@ import { ArrowRight, } from '@lucide/astro'; import VoiceDownload from '../../../components/VoiceDownload.astro'; +import ProductCarousel from '../../../components/ProductCarousel.astro'; import { getMacDownload, getLinuxDownload } from '../../../lib/voice-download'; const macDownload = await getMacDownload(); const linuxDownload = await getLinuxDownload(); +// Locale code for the per-language app screenshots (/screenshots//.webp). +const imgCode = 'de'; + +const productShots = [ + { + scene: 'in-call', + alt: 'WaveKat Voice auf dem Desktop während eines laufenden Anrufs — das Wählfeld und die Anrufsteuerung, mit dem Live-Transkript, das daneben mitläuft.', + caption: 'Ein laufender Anruf — die Anrufsteuerung links, das Transkript, das sich rechts von selbst schreibt.', + }, + { + scene: 'in-call-transfer', + alt: 'WaveKat Voice auf dem Desktop mitten in einer Weiterleitung mit Rückfrage — der Anrufer wird gehalten, daneben die Schaltfläche Weiterleitung abschließen.', + caption: 'Ein Anruf wird weitergeleitet, nachdem man kurz mit der Gegenseite gesprochen hat.', + }, + { + scene: 'settings-automation-agents', + alt: 'WaveKat Voice, Einstellungen → Automatisierung — KI-Assistenten wie Claude und Cursor werden mit einer Ein-Klick-Schaltfläche „Verbinden“ angebunden.', + caption: 'Einen KI-Assistenten verbinden, der Anrufe tätigt — mit einem Klick.', + }, +]; const features = [ { @@ -31,6 +54,11 @@ const features = [ title: 'Anrufe direkt vom Desktop', body: 'Nehmen Sie Anrufe entgegen und tätigen Sie sie direkt von Ihrem Computer aus — kein Tischtelefon, keine zusätzliche Hardware, kein Browser-Tab, das Sie im Auge behalten müssen. Es wartet unauffällig im Hintergrund, bis das Telefon klingelt.', }, + { + icon: PhoneForwarded, + title: 'Halten, wechseln und weiterleiten', + body: 'Legen Sie einen Anrufer in die Warteschleife, nehmen Sie eine zweite Leitung an und wechseln Sie zwischen beiden — leiten Sie ihn dann direkt weiter oder erst nach einem kurzen Wort unter vier Augen. Was in der Warteschleife passiert, bleibt aus der Aufzeichnung und dem Transkript heraus.', + }, { icon: Mic, title: 'Jeder Anruf aufgezeichnet', @@ -41,6 +69,11 @@ const features = [ title: 'Live-Transkription', body: 'Sehen Sie die Wörter, während sie gesprochen werden. Ein laufendes Transkript läuft neben dem Anruf mit, sodass Sie das Wesentliche aufnehmen, statt mitzuschreiben.', }, + { + icon: AudioLines, + title: 'Anrufe in HD', + body: 'Wenn Ihr Anbieter es unterstützt, handelt WaveKat Voice den Opus-Codec aus — für breitbandige, gestochen klare HD-Sprache — und fällt von selbst auf Standardqualität zurück, wenn das nicht möglich ist. Es gibt nichts einzuschalten.', + }, { icon: Terminal, title: 'Einen KI-Assistenten wählen lassen', @@ -95,6 +128,15 @@ const faqs = [ q: 'Brauche ich spezielle Hardware?', a: 'Nein. Wenn Sie einen Computer und ein Konto bei einem Telefonanbieter haben, haben Sie alles, was Sie brauchen. Kein Tischtelefon, keine zusätzliche Ausrüstung — ein Headset ist schön, aber nicht erforderlich.', }, + { + q: 'Kann ich einen Anrufer in die Warteschleife legen oder einen Anruf weiterleiten?', + a: 'Ja. WaveKat Voice kann einen Anrufer in die Warteschleife legen, einen zweiten Anruf annehmen, während der erste wartet, zwischen den Anrufen wechseln und einen Anrufer an jemand anderen weiterleiten — entweder direkt (blind) oder nachdem Sie sich vorher kurz mit der Person abgestimmt haben (begleitet). Solange ein Anruf in der Warteschleife ist, pausieren seine Aufzeichnung und sein Live-Transkript von selbst.', + link: { href: '/de/blog/hold-switch-and-transfer-calls/', label: 'So funktioniert es' }, + }, + { + q: 'Unterstützt WaveKat Voice HD-Audio?', + a: 'Ja. Wenn Ihr Telefonanbieter es unterstützt, nutzt WaveKat Voice den Opus-Codec für breitbandige — „HD“-Sprache, voller und klarer als eine gewöhnliche Telefonleitung, und fällt automatisch auf Standardqualität (G.711) zurück, wenn das nicht möglich ist. Es gibt nichts zu konfigurieren.', + }, { q: 'Mit welchen Telefonanbietern funktioniert es?', a: 'Mit den meisten gängigen — Twilio, Telnyx, 2talk und weitere. Für die Anbieter, die wir kennen, füllen wir die Einrichtung aus; für alle anderen können Sie die Daten selbst eingeben. Wenn Sie bereits geschäftliche Anrufe über das Internet führen, funktioniert Ihr Anbieter mit ziemlicher Sicherheit.', @@ -213,6 +255,11 @@ const faqSchema = {
+ +
+ +
+

Was es kann

diff --git a/src/pages/es/about.astro b/src/pages/es/about.astro index a7809e0..be0de29 100644 --- a/src/pages/es/about.astro +++ b/src/pages/es/about.astro @@ -32,7 +32,7 @@ const aboutSchema = {

Acerca de WaveKat

-

WaveKat Voice, es un softphone de escritorio para Mac y Linux que graba y transcribe cada llamada."} /> +

WaveKat Voice, es un softphone de escritorio para Mac y Linux que graba y transcribe cada llamada. WaveKat está desarrollado por su fundador, Eason Guo, que crea WaveKat Voice y las bibliotecas de código abierto en Rust en las que se apoya."} />

diff --git a/src/pages/es/blog/[slug].astro b/src/pages/es/blog/[slug].astro index d29d4c6..d6c8956 100644 --- a/src/pages/es/blog/[slug].astro +++ b/src/pages/es/blog/[slug].astro @@ -27,6 +27,7 @@ const { Content } = await render(post); author={post.data.author} tags={post.data.tags} ogImage={post.data.ogImage} + noindex={post.data.draft} faqs={extractFaqs(post.body ?? '')} > diff --git a/src/pages/es/voice/index.astro b/src/pages/es/voice/index.astro index 9f64d2e..7e30767 100644 --- a/src/pages/es/voice/index.astro +++ b/src/pages/es/voice/index.astro @@ -10,8 +10,10 @@ import Voice from '../../../layouts/Voice.astro'; import TalkCTA from '../../../components/TalkCTA.astro'; import { PhoneCall, + PhoneForwarded, Mic, FileText, + AudioLines, Terminal, Server, Cloud, @@ -20,17 +22,44 @@ import { ArrowRight, } from '@lucide/astro'; import VoiceDownload from '../../../components/VoiceDownload.astro'; +import ProductCarousel from '../../../components/ProductCarousel.astro'; import { getMacDownload, getLinuxDownload } from '../../../lib/voice-download'; const macDownload = await getMacDownload(); const linuxDownload = await getLinuxDownload(); +// Locale code for the per-language app screenshots (/screenshots//.webp). +const imgCode = 'es'; + +const productShots = [ + { + scene: 'in-call', + alt: 'WaveKat Voice en el escritorio durante una llamada en vivo: el teclado de marcación y los controles de llamada, con la transcripción en vivo a un lado.', + caption: 'Una llamada en vivo: los controles a la izquierda, la transcripción escribiéndose sola a la derecha.', + }, + { + scene: 'in-call-transfer', + alt: 'WaveKat Voice en el escritorio durante una transferencia consultada — quien llama está en espera, junto al botón Completar transferencia.', + caption: 'Transfiriendo una llamada tras hablar antes en privado con la otra parte.', + }, + { + scene: 'settings-automation-agents', + alt: 'WaveKat Voice, Ajustes → Automatización — conectando asistentes de IA como Claude y Cursor con un botón de Conectar de un clic.', + caption: 'Conectando un asistente de IA para realizar llamadas, con un clic.', + }, +]; + const features = [ { icon: PhoneCall, title: 'Llamadas desde su escritorio', body: 'Conteste y haga llamadas directamente desde su computadora: sin teléfono de mesa, sin hardware extra, sin una pestaña del navegador que vigilar. Espera tranquilo y apartado hasta que suena el teléfono.', }, + { + icon: PhoneForwarded, + title: 'Espera, cambio y transferencia', + body: 'Ponga a un cliente en espera, atienda una segunda línea y alterne entre ambas; luego transfiera la llamada directamente o tras hablar antes en privado. Lo que ocurra durante la espera queda fuera de la grabación y de la transcripción.', + }, { icon: Mic, title: 'Cada llamada grabada', @@ -41,6 +70,11 @@ const features = [ title: 'Transcripción en vivo', body: 'Vea las palabras a medida que se pronuncian. Una transcripción en marcha aparece junto a la llamada, para que pueda asimilar lo importante en lugar de garabatear notas.', }, + { + icon: AudioLines, + title: 'Llamadas en HD', + body: 'Cuando su proveedor lo admite, WaveKat Voice negocia el códec Opus para una voz de banda ancha, nítida en HD, y vuelve por sí solo a la calidad estándar cuando no puede. No hay nada que activar.', + }, { icon: Terminal, title: 'Deje que un asistente de IA marque', @@ -95,6 +129,15 @@ const faqs = [ q: '¿Necesito algún hardware especial?', a: 'No. Si tiene una computadora y una cuenta con un proveedor de telefonía, tiene todo lo que necesita. Sin teléfono de mesa, sin equipo extra; unos auriculares vienen bien, pero no son obligatorios.', }, + { + q: '¿Puedo poner a un cliente en espera o transferir una llamada?', + a: 'Sí. WaveKat Voice puede poner a un cliente en espera, atender una segunda llamada mientras la primera aguarda, alternar entre llamadas y transferir a un cliente a otra persona, ya sea directamente (transferencia ciega) o tras consultarlo antes con ella (transferencia consultada). Mientras una llamada está en espera, su grabación y su transcripción en vivo se pausan por sí solas.', + link: { href: '/es/blog/hold-switch-and-transfer-calls/', label: 'Cómo funciona' }, + }, + { + q: '¿WaveKat Voice admite audio en HD?', + a: 'Sí. Cuando su proveedor de telefonía lo admite, WaveKat Voice usa el códec Opus para una voz de banda ancha —«HD»—, más plena y nítida que una línea telefónica corriente, y vuelve automáticamente a la calidad estándar (G.711) cuando no lo admite. No hay nada que configurar.', + }, { q: '¿Con qué proveedores de telefonía funciona?', a: 'Con la mayoría de los habituales — Twilio, Telnyx, 2talk y más. Rellenamos la configuración de los proveedores que conocemos; para cualquier otro puede introducir los datos usted mismo. Si ya hace llamadas de empresa por internet, su proveedor casi con seguridad funciona.', @@ -213,6 +256,11 @@ const faqSchema = {
+ +
+ +
+

Qué hace

diff --git a/src/pages/fr/about.astro b/src/pages/fr/about.astro index eaebefd..ed73e6f 100644 --- a/src/pages/fr/about.astro +++ b/src/pages/fr/about.astro @@ -32,7 +32,7 @@ const aboutSchema = {

À propos de WaveKat

-

WaveKat Voice, est un softphone de bureau pour Mac et Linux qui enregistre et transcrit chaque appel."} /> +

WaveKat Voice, est un softphone de bureau pour Mac et Linux qui enregistre et transcrit chaque appel. WaveKat est développé par son fondateur, Eason Guo, qui écrit WaveKat Voice et les bibliothèques open source en Rust qui le font fonctionner."} />

diff --git a/src/pages/fr/blog/[slug].astro b/src/pages/fr/blog/[slug].astro index 8d0da05..9e3d408 100644 --- a/src/pages/fr/blog/[slug].astro +++ b/src/pages/fr/blog/[slug].astro @@ -27,6 +27,7 @@ const { Content } = await render(post); author={post.data.author} tags={post.data.tags} ogImage={post.data.ogImage} + noindex={post.data.draft} faqs={extractFaqs(post.body ?? '')} > diff --git a/src/pages/fr/voice/index.astro b/src/pages/fr/voice/index.astro index 22730e6..81fdda6 100644 --- a/src/pages/fr/voice/index.astro +++ b/src/pages/fr/voice/index.astro @@ -10,8 +10,10 @@ import Voice from '../../../layouts/Voice.astro'; import TalkCTA from '../../../components/TalkCTA.astro'; import { PhoneCall, + PhoneForwarded, Mic, FileText, + AudioLines, Terminal, Server, Cloud, @@ -20,17 +22,44 @@ import { ArrowRight, } from '@lucide/astro'; import VoiceDownload from '../../../components/VoiceDownload.astro'; +import ProductCarousel from '../../../components/ProductCarousel.astro'; import { getMacDownload, getLinuxDownload } from '../../../lib/voice-download'; const macDownload = await getMacDownload(); const linuxDownload = await getLinuxDownload(); +// Locale code for the per-language app screenshots (/screenshots//.webp). +const imgCode = 'fr'; + +const productShots = [ + { + scene: 'in-call', + alt: 'WaveKat Voice sur le bureau pendant un appel en cours — le clavier et les commandes d’appel, avec la transcription en direct qui défile à côté.', + caption: 'Un appel en direct — les commandes à gauche, la transcription qui s’écrit toute seule à droite.', + }, + { + scene: 'in-call-transfer', + alt: 'WaveKat Voice sur le bureau pendant un transfert accompagné — l’appelant en attente, à côté du bouton Finaliser le transfert.', + caption: 'Transfert d’un appel après un mot en aparté avec l’autre partie.', + }, + { + scene: 'settings-automation-agents', + alt: 'WaveKat Voice, Réglages → Automatisation — connexion d’assistants IA comme Claude et Cursor avec un bouton Connecter en un clic.', + caption: 'Connexion d’un assistant IA pour passer des appels, en un clic.', + }, +]; + const features = [ { icon: PhoneCall, title: 'Des appels depuis votre ordinateur', body: 'Recevez et passez vos appels directement depuis votre ordinateur — sans poste téléphonique, sans matériel supplémentaire, sans onglet de navigateur à surveiller. L’application reste discrètement en retrait jusqu’à ce que le téléphone sonne.', }, + { + icon: PhoneForwarded, + title: 'Mettez en attente, basculez, transférez', + body: 'Mettez un appelant en attente, prenez une deuxième ligne, et basculez de l’un à l’autre — puis transférez l’appel, directement ou après un mot en aparté. Tout ce qui se passe pendant l’attente reste hors de l’enregistrement et de la transcription.', + }, { icon: Mic, title: 'Chaque appel enregistré', @@ -41,6 +70,11 @@ const features = [ title: 'Transcription en direct', body: 'Voyez les mots à mesure qu’ils sont prononcés. Une transcription défile à côté de l’appel, pour saisir l’essentiel plutôt que de griffonner des notes.', }, + { + icon: AudioLines, + title: 'Des appels en HD', + body: 'Lorsque votre opérateur le permet, WaveKat Voice négocie le codec Opus pour une voix large bande, d’une clarté HD — et revient de lui-même à la qualité standard lorsqu’il ne le peut pas. Rien à activer.', + }, { icon: Terminal, title: 'Laissez un assistant IA composer', @@ -95,6 +129,15 @@ const faqs = [ q: 'Ai-je besoin d’un matériel particulier ?', a: 'Non. Si vous avez un ordinateur et un compte chez un opérateur téléphonique, vous avez tout ce qu’il faut. Pas de poste téléphonique, pas d’équipement supplémentaire — un casque est appréciable, mais pas indispensable.', }, + { + q: 'Puis-je mettre un appelant en attente ou transférer un appel ?', + a: 'Oui. WaveKat Voice peut mettre un appelant en attente, répondre à un deuxième appel pendant que le premier patiente, basculer d’un appel à l’autre, et transférer un appelant à quelqu’un d’autre — soit directement (transfert aveugle), soit après en avoir d’abord parlé avec le destinataire (transfert accompagné). Pendant qu’un appel est en attente, son enregistrement et sa transcription en direct se mettent en pause d’eux-mêmes.', + link: { href: '/fr/blog/hold-switch-and-transfer-calls/', label: 'Comment ça marche' }, + }, + { + q: 'WaveKat Voice prend-il en charge l’audio HD ?', + a: 'Oui. Lorsque votre opérateur téléphonique le permet, WaveKat Voice utilise le codec Opus pour une voix large bande — « HD » —, plus riche et plus claire qu’une ligne téléphonique ordinaire, et revient automatiquement à la qualité standard (G.711) lorsqu’il ne le peut pas. Il n’y a rien à configurer.', + }, { q: 'Avec quels opérateurs téléphoniques est-il compatible ?', a: 'La plupart des opérateurs courants — Twilio, Telnyx, 2talk, et bien d’autres. Nous remplissons la configuration des opérateurs que nous connaissons ; pour les autres, vous pouvez saisir les détails vous-même. Si vous passez déjà des appels professionnels par Internet, votre opérateur est presque certainement compatible.', @@ -213,6 +256,11 @@ const faqSchema = {
+ +
+ +
+

Ce qu’il fait

diff --git a/src/pages/it/about.astro b/src/pages/it/about.astro index c0ff4fa..6cdb18b 100644 --- a/src/pages/it/about.astro +++ b/src/pages/it/about.astro @@ -32,7 +32,7 @@ const aboutSchema = {

Chi siamo

-

WaveKat Voice, è un softphone desktop per Mac e Linux che registra e trascrive ogni chiamata."} /> +

WaveKat Voice, è un softphone desktop per Mac e Linux che registra e trascrive ogni chiamata. WaveKat è realizzato dal suo fondatore, Eason Guo, che sviluppa WaveKat Voice e le librerie open source in Rust su cui si basa."} />

diff --git a/src/pages/it/blog/[slug].astro b/src/pages/it/blog/[slug].astro index b8dcbfe..3345c88 100644 --- a/src/pages/it/blog/[slug].astro +++ b/src/pages/it/blog/[slug].astro @@ -27,6 +27,7 @@ const { Content } = await render(post); author={post.data.author} tags={post.data.tags} ogImage={post.data.ogImage} + noindex={post.data.draft} faqs={extractFaqs(post.body ?? '')} > diff --git a/src/pages/it/voice/index.astro b/src/pages/it/voice/index.astro index b8648e0..7736520 100644 --- a/src/pages/it/voice/index.astro +++ b/src/pages/it/voice/index.astro @@ -10,8 +10,10 @@ import Voice from '../../../layouts/Voice.astro'; import TalkCTA from '../../../components/TalkCTA.astro'; import { PhoneCall, + PhoneForwarded, Mic, FileText, + AudioLines, Terminal, Server, Cloud, @@ -20,10 +22,31 @@ import { ArrowRight, } from '@lucide/astro'; import VoiceDownload from '../../../components/VoiceDownload.astro'; +import ProductCarousel from '../../../components/ProductCarousel.astro'; import { getMacDownload, getLinuxDownload } from '../../../lib/voice-download'; const macDownload = await getMacDownload(); const linuxDownload = await getLinuxDownload(); +// Locale code for the per-language app screenshots (/screenshots//.webp). +const imgCode = 'it'; + +const productShots = [ + { + scene: 'in-call', + alt: 'WaveKat Voice sul desktop durante una chiamata dal vivo — il tastierino e i comandi di chiamata, con la trascrizione in tempo reale che scorre accanto.', + caption: 'Una chiamata dal vivo — i comandi a sinistra, la trascrizione che si scrive da sola a destra.', + }, + { + scene: 'in-call-transfer', + alt: 'WaveKat Voice sul desktop durante un trasferimento assistito — chi chiama è in attesa, accanto al pulsante Completa trasferimento.', + caption: 'Trasferimento di una chiamata dopo un breve scambio privato con l’altra parte.', + }, + { + scene: 'settings-automation-agents', + alt: 'WaveKat Voice, Impostazioni → Automazione — collegamento di assistenti AI come Claude e Cursor con un pulsante Connetti con un clic.', + caption: 'Collegamento di un assistente AI per effettuare chiamate, con un clic.', + }, +]; const features = [ { @@ -31,6 +54,11 @@ const features = [ title: 'Chiamate dal tuo desktop', body: 'Rispondi ed effettua chiamate direttamente dal computer — niente telefono da scrivania, niente hardware aggiuntivo, nessuna scheda del browser da tenere d’occhio. Resta tranquillo in disparte finché il telefono non squilla.', }, + { + icon: PhoneForwarded, + title: 'Metti in attesa, alterna e trasferisci', + body: 'Metti un interlocutore in attesa, rispondi a una seconda linea e passa dall’una all’altra — poi trasferisci la chiamata subito oppure dopo esserti confrontato prima con un breve scambio. Ciò che accade durante l’attesa resta fuori dalla registrazione e dalla trascrizione.', + }, { icon: Mic, title: 'Ogni chiamata registrata', @@ -41,6 +69,11 @@ const features = [ title: 'Trascrizione in tempo reale', body: 'Vedi le parole mentre vengono pronunciate. Una trascrizione scorre accanto alla chiamata, così puoi cogliere ciò che conta invece di prendere appunti di fretta.', }, + { + icon: AudioLines, + title: 'Chiamate in HD', + body: 'Quando il tuo operatore lo supporta, WaveKat Voice negozia il codec Opus per una voce a banda larga, nitida in HD — e torna da solo alla qualità standard quando non è possibile. Niente da attivare.', + }, { icon: Terminal, title: 'Lascia comporre a un assistente AI', @@ -95,6 +128,15 @@ const faqs = [ q: 'Serve qualche hardware speciale?', a: 'No. Se hai un computer e un account con un operatore telefonico, hai tutto ciò che ti serve. Niente telefono da scrivania, nessuna attrezzatura extra — una cuffia è comoda ma non obbligatoria.', }, + { + q: 'Posso mettere in attesa un interlocutore o trasferire una chiamata?', + a: 'Sì. WaveKat Voice può mettere un interlocutore in attesa, rispondere a una seconda chiamata mentre la prima aspetta, alternare le chiamate e trasferire un interlocutore a qualcun altro — subito (trasferimento cieco) oppure dopo esserti confrontato prima con lui (trasferimento assistito). Mentre una chiamata è in attesa, la sua registrazione e la trascrizione in tempo reale si mettono in pausa da sole.', + link: { href: '/it/blog/hold-switch-and-transfer-calls/', label: 'Come funziona' }, + }, + { + q: 'WaveKat Voice supporta l’audio in HD?', + a: 'Sì. Quando il tuo operatore telefonico lo supporta, WaveKat Voice usa il codec Opus per una voce a banda larga — «HD» — più piena e nitida di una normale linea telefonica, e torna automaticamente alla qualità standard (G.711) quando non è possibile. Non c’è nulla da configurare.', + }, { q: 'Con quali operatori telefonici funziona?', a: 'Con la maggior parte di quelli comuni — Twilio, Telnyx, 2talk e altri. Compiliamo la configurazione per gli operatori che conosciamo; per gli altri puoi inserire i dettagli tu stesso. Se già effettui chiamate aziendali via internet, il tuo operatore quasi certamente funziona.', @@ -213,6 +255,11 @@ const faqSchema = {
+ +
+ +
+

Cosa fa

diff --git a/src/pages/ja/about.astro b/src/pages/ja/about.astro index d5391fd..e30855f 100644 --- a/src/pages/ja/about.astro +++ b/src/pages/ja/about.astro @@ -32,7 +32,7 @@ const aboutSchema = {

WaveKat について

-

WaveKat Voice は Mac と Linux 向けのデスクトップソフトフォンで、すべての通話を自動で録音・文字起こしします。"} /> +

WaveKat Voice は Mac と Linux 向けのデスクトップソフトフォンで、すべての通話を自動で録音・文字起こしします。WaveKat は創業者の Eason Guo が手がけ、WaveKat Voice とその基盤となるオープンソースの Rust ライブラリを開発しています。"} />

diff --git a/src/pages/ja/blog/[slug].astro b/src/pages/ja/blog/[slug].astro index dd218f8..39a0afe 100644 --- a/src/pages/ja/blog/[slug].astro +++ b/src/pages/ja/blog/[slug].astro @@ -27,6 +27,7 @@ const { Content } = await render(post); author={post.data.author} tags={post.data.tags} ogImage={post.data.ogImage} + noindex={post.data.draft} faqs={extractFaqs(post.body ?? '')} > diff --git a/src/pages/ja/voice/index.astro b/src/pages/ja/voice/index.astro index 225d485..fc587a3 100644 --- a/src/pages/ja/voice/index.astro +++ b/src/pages/ja/voice/index.astro @@ -10,8 +10,10 @@ import Voice from '../../../layouts/Voice.astro'; import TalkCTA from '../../../components/TalkCTA.astro'; import { PhoneCall, + PhoneForwarded, Mic, FileText, + AudioLines, Terminal, Server, Cloud, @@ -20,10 +22,31 @@ import { ArrowRight, } from '@lucide/astro'; import VoiceDownload from '../../../components/VoiceDownload.astro'; +import ProductCarousel from '../../../components/ProductCarousel.astro'; import { getMacDownload, getLinuxDownload } from '../../../lib/voice-download'; const macDownload = await getMacDownload(); const linuxDownload = await getLinuxDownload(); +// Locale code for the per-language app screenshots (/screenshots//.webp). +const imgCode = 'ja'; + +const productShots = [ + { + scene: 'in-call', + alt: 'デスクトップで通話中の WaveKat Voice——ダイヤルパッドと通話コントロール、その横にはリアルタイムの文字起こしが流れています。', + caption: '通話中の画面——左に通話コントロール、右には文字起こしがひとりでに書き込まれていきます。', + }, + { + scene: 'in-call-transfer', + alt: 'デスクトップの WaveKat Voice で取り次ぎ転送の途中——発信者は保留中で、隣に「転送を完了」ボタン。', + caption: '先に相手と一言確認してから、通話を転送しているところ。', + }, + { + scene: 'settings-automation-agents', + alt: 'WaveKat Voice の 設定 → 自動化——Claude や Cursor などの AI アシスタントを、ワンクリックの「接続」ボタンで連携。', + caption: 'AI アシスタントをワンクリックで接続して、通話を任せる。', + }, +]; const features = [ { @@ -31,6 +54,11 @@ const features = [ title: 'パソコンから通話', body: 'パソコンから直接、電話の応答も発信もできます。固定電話も追加のハードウェアも、見張っておくブラウザのタブも不要です。電話が鳴るまでは、邪魔にならず静かに待機しています。', }, + { + icon: PhoneForwarded, + title: '保留・切り替え・転送', + body: '通話を保留にして、二本目の回線に出て、二つの通話を切り替えられます——そして、そのまま直接転送するか、先に一言確認してから転送するかを選べます。保留中のやり取りは録音にも文字起こしにも残りません。', + }, { icon: Mic, title: 'すべての通話を録音', @@ -41,6 +69,11 @@ const features = [ title: 'リアルタイム文字起こし', body: '話した言葉がその場で文字になります。通話の横にリアルタイムの文字起こしが流れるので、メモを取るのに追われず、大事な内容に集中できます。', }, + { + icon: AudioLines, + title: 'HD 品質の通話', + body: '電話事業者が対応していれば、WaveKat Voice は Opus コーデックをネゴシエートし、広帯域の HD クリアな音声で通話します——対応していないときは、自動で標準品質に切り替わります。オンにする設定は何もありません。', + }, { icon: Terminal, title: 'AI アシスタントに発信させる', @@ -95,6 +128,15 @@ const faqs = [ q: '特別なハードウェアは必要ですか?', a: 'いいえ。パソコンと電話事業者のアカウントさえあれば、必要なものはすべて揃っています。固定電話も追加の機材も不要です——ヘッドセットがあれば便利ですが、必須ではありません。', }, + { + q: '通話を保留にしたり、転送したりできますか?', + a: 'はい。WaveKat Voice は、通話を保留にしたり、最初の通話を待たせたまま二本目に出たり、通話を切り替えたり、別の相手に転送したりできます——そのまま直接(ブラインド)転送することも、先に相手に確認してから(アテンド)転送することもできます。通話が保留中の間は、その録音とリアルタイムの文字起こしも自動で一時停止します。', + link: { href: '/ja/blog/hold-switch-and-transfer-calls/', label: '仕組みを見る' }, + }, + { + q: 'WaveKat Voice は HD 音質の通話に対応していますか?', + a: 'はい。電話事業者が対応していれば、WaveKat Voice は Opus コーデックを使って広帯域の——「HD」——音声で通話します。通常の電話回線よりも豊かでクリアな音声で、対応していないときは自動で標準品質(G.711)に切り替わります。設定するものは何もありません。', + }, { q: 'どの電話事業者に対応していますか?', a: 'よく使われている事業者のほとんど——Twilio、Telnyx、2talk など。私たちが把握している事業者については設定を自動で入力します。それ以外でも、詳細を自分で入力できます。すでにインターネット経由でビジネス通話をしているなら、お使いの事業者はほぼ確実に利用できます。', @@ -213,6 +255,11 @@ const faqSchema = {
+ +
+ +
+

主な機能

diff --git a/src/pages/ko/about.astro b/src/pages/ko/about.astro index 7f3cdf3..3aede8e 100644 --- a/src/pages/ko/about.astro +++ b/src/pages/ko/about.astro @@ -32,7 +32,7 @@ const aboutSchema = {

WaveKat 소개

-

WaveKat Voice는 Mac과 Linux용 데스크톱 소프트폰으로, 모든 통화를 자동으로 녹음하고 텍스트로 옮깁니다."} /> +

WaveKat Voice는 Mac과 Linux용 데스크톱 소프트폰으로, 모든 통화를 자동으로 녹음하고 텍스트로 옮깁니다. WaveKat은 창립자 Eason Guo가 만들며, 그는 WaveKat Voice와 그 기반이 되는 오픈소스 Rust 라이브러리를 개발합니다."} />

diff --git a/src/pages/ko/blog/[slug].astro b/src/pages/ko/blog/[slug].astro index b78c726..36ec988 100644 --- a/src/pages/ko/blog/[slug].astro +++ b/src/pages/ko/blog/[slug].astro @@ -27,6 +27,7 @@ const { Content } = await render(post); author={post.data.author} tags={post.data.tags} ogImage={post.data.ogImage} + noindex={post.data.draft} faqs={extractFaqs(post.body ?? '')} > diff --git a/src/pages/ko/voice/index.astro b/src/pages/ko/voice/index.astro index c5bb396..7048a47 100644 --- a/src/pages/ko/voice/index.astro +++ b/src/pages/ko/voice/index.astro @@ -10,8 +10,10 @@ import Voice from '../../../layouts/Voice.astro'; import TalkCTA from '../../../components/TalkCTA.astro'; import { PhoneCall, + PhoneForwarded, Mic, FileText, + AudioLines, Terminal, Server, Cloud, @@ -20,10 +22,31 @@ import { ArrowRight, } from '@lucide/astro'; import VoiceDownload from '../../../components/VoiceDownload.astro'; +import ProductCarousel from '../../../components/ProductCarousel.astro'; import { getMacDownload, getLinuxDownload } from '../../../lib/voice-download'; const macDownload = await getMacDownload(); const linuxDownload = await getLinuxDownload(); +// Locale code for the per-language app screenshots (/screenshots//.webp). +const imgCode = 'ko'; + +const productShots = [ + { + scene: 'in-call', + alt: '통화 중인 데스크톱의 WaveKat Voice — 다이얼패드와 통화 제어 버튼, 그 옆으로 흐르는 실시간 전사.', + caption: '실시간 통화 — 왼쪽에는 통화 제어 버튼, 오른쪽에는 스스로 써 내려가는 전사.', + }, + { + scene: 'in-call-transfer', + alt: '데스크톱의 WaveKat Voice, 협의 전환 진행 중 — 발신자는 보류 상태이고 옆에 전환 완료 버튼이 있습니다.', + caption: '먼저 상대와 짧게 확인한 뒤 통화를 넘기는 중입니다.', + }, + { + scene: 'settings-automation-agents', + alt: 'WaveKat Voice 설정 → 자동화 — Claude와 Cursor 같은 AI 어시스턴트를 원클릭 연결 버튼으로 연결합니다.', + caption: 'AI 어시스턴트를 원클릭으로 연결해 통화를 맡깁니다.', + }, +]; const features = [ { @@ -31,6 +54,11 @@ const features = [ title: '데스크톱에서 통화', body: '컴퓨터에서 바로 전화를 받고 걸 수 있습니다 — 탁상 전화기도, 별도 장비도, 신경 써야 할 브라우저 탭도 필요 없습니다. 전화가 울릴 때까지 조용히 한쪽에서 기다립니다.', }, + { + icon: PhoneForwarded, + title: '보류, 전환, 그리고 착신 전환', + body: '통화 중인 상대를 보류로 돌려놓고 두 번째 회선을 받아 두 통화를 오갈 수 있습니다 — 그런 다음 곧바로 연결하거나, 먼저 조용히 상황을 전한 뒤 넘길 수 있습니다. 보류 중에 오간 내용은 녹음과 전사에 남지 않습니다.', + }, { icon: Mic, title: '모든 통화 자동 녹음', @@ -41,6 +69,11 @@ const features = [ title: '실시간 받아쓰기', body: '말하는 대로 글자가 보입니다. 통화 옆에서 실시간 전사가 흘러가, 메모를 휘갈기는 대신 중요한 내용에 집중할 수 있습니다.', }, + { + icon: AudioLines, + title: 'HD 음질 통화', + body: '사업자가 지원하는 경우, WaveKat Voice는 Opus 코덱을 협상해 광대역의 HD처럼 또렷한 음성을 제공합니다 — 그럴 수 없을 때는 스스로 표준 음질로 되돌립니다. 따로 켤 것은 없습니다.', + }, { icon: Terminal, title: 'AI 어시스턴트가 대신 전화 걸기', @@ -95,6 +128,15 @@ const faqs = [ q: '특별한 장비가 필요한가요?', a: '아니요. 컴퓨터 한 대와 전화 사업자 계정만 있으면 필요한 것은 다 갖춰진 셈입니다. 탁상 전화기도, 별도 장비도 필요 없습니다 — 헤드셋이 있으면 좋지만 필수는 아닙니다.', }, + { + q: '통화 중인 상대를 보류하거나 통화를 넘길 수 있나요?', + a: '네. WaveKat Voice는 통화 중인 상대를 보류로 돌려놓고, 첫 번째 통화가 기다리는 동안 두 번째 전화를 받고, 통화를 오가며, 상대를 다른 사람에게 넘길 수 있습니다 — 곧바로 연결(블라인드)하거나, 먼저 상대에게 확인한 뒤(어텐디드) 넘길 수 있습니다. 통화가 보류 중일 때는 그 녹음과 실시간 전사가 스스로 멈춥니다.', + link: { href: '/ko/blog/hold-switch-and-transfer-calls/', label: '작동 방식 보기' }, + }, + { + q: 'WaveKat Voice는 HD 음질 통화를 지원하나요?', + a: '네. 전화 사업자가 지원하는 경우, WaveKat Voice는 Opus 코덱을 사용해 광대역 — "HD" — 음성을 제공하며, 일반 전화 회선보다 더 풍부하고 또렷합니다. 지원하지 않을 때는 자동으로 표준 음질(G.711)로 되돌립니다. 따로 설정할 것은 없습니다.', + }, { q: '어떤 전화 사업자와 호환되나요?', a: '대부분의 흔한 사업자들 — Twilio, Telnyx, 2talk 등입니다. 우리가 아는 사업자는 설정을 자동으로 채워 드리고, 그 외에는 직접 정보를 입력할 수 있습니다. 이미 인터넷으로 업무 전화를 걸고 있다면, 당신의 사업자는 거의 틀림없이 호환됩니다.', @@ -213,6 +255,11 @@ const faqSchema = {
+ +
+ +
+

주요 기능

diff --git a/src/pages/voice/index.astro b/src/pages/voice/index.astro index 703474b..b7129ef 100644 --- a/src/pages/voice/index.astro +++ b/src/pages/voice/index.astro @@ -3,6 +3,8 @@ import Voice from '../../layouts/Voice.astro'; import TalkCTA from '../../components/TalkCTA.astro'; import { PhoneCall, + PhoneForwarded, + AudioLines, Mic, FileText, Terminal, @@ -13,17 +15,44 @@ import { ArrowRight, } from '@lucide/astro'; import VoiceDownload from '../../components/VoiceDownload.astro'; +import ProductCarousel from '../../components/ProductCarousel.astro'; import { getMacDownload, getLinuxDownload } from '../../lib/voice-download'; const macDownload = await getMacDownload(); const linuxDownload = await getLinuxDownload(); +// Locale code for the per-language app screenshots (/screenshots//.webp). +const imgCode = 'en'; + +const productShots = [ + { + scene: 'in-call', + alt: 'WaveKat Voice on the desktop during a live call — the dialpad and call controls, with the live transcript running alongside.', + caption: 'A live call — controls on the left, the transcript writing itself on the right.', + }, + { + scene: 'in-call-transfer', + alt: 'WaveKat Voice on the desktop mid attended transfer — the caller on hold and a Complete transfer button to connect them.', + caption: 'Transferring a call after a quiet word with the other side first.', + }, + { + scene: 'settings-automation-agents', + alt: 'WaveKat Voice Settings → Automation, connecting AI assistants like Claude and Cursor with a one-click Connect button.', + caption: 'Connecting an AI assistant to place calls, one click.', + }, +]; + const features = [ { icon: PhoneCall, title: 'Calls from your desktop', body: 'Answer and place calls right from your computer — no desk phone, no extra hardware, no browser tab to babysit. It waits quietly out of the way until the phone rings.', }, + { + icon: PhoneForwarded, + title: 'Hold, switch, and transfer', + body: 'Put a caller on hold, pick up a second line, and switch between them — then transfer either straight through or after a quiet word first. Whatever happens on hold stays out of the recording and the transcript.', + }, { icon: Mic, title: 'Every call recorded', @@ -34,6 +63,11 @@ const features = [ title: 'Live transcription', body: 'See the words as they\'re spoken. A running transcript sits alongside the call, so you can take in what matters instead of scribbling notes.', }, + { + icon: AudioLines, + title: 'Calls in HD', + body: 'When your provider supports it, WaveKat Voice negotiates the Opus codec for wideband, HD-clear voice — and falls back to standard quality on its own when it can\'t. Nothing to switch on.', + }, { icon: Terminal, title: 'Let an AI assistant dial', @@ -88,6 +122,15 @@ const faqs = [ q: 'Do I need any special hardware?', a: 'No. If you have a computer and an account with a phone provider, you have everything you need. No desk phone, no extra equipment — a headset is nice but not required.', }, + { + q: 'Can I put a caller on hold or transfer a call?', + a: 'Yes. WaveKat Voice can put a caller on hold, answer a second call while the first one waits, switch between calls, and transfer a caller to someone else — either straight through (blind) or after checking with them first (attended). While a call is on hold, its recording and live transcript pause on their own.', + link: { href: '/blog/hold-switch-and-transfer-calls/', label: 'How it works' }, + }, + { + q: 'Does WaveKat Voice support HD audio?', + a: 'Yes. When your phone provider supports it, WaveKat Voice uses the Opus codec for wideband — "HD" — voice, fuller and clearer than an ordinary phone line, and falls back to standard quality (G.711) automatically when it doesn\'t. There\'s nothing to configure.', + }, { q: 'Which phone providers does it work with?', a: 'Most of the common ones — Twilio, Telnyx, 2talk, and more. We fill in the setup for the providers we know; for anything else you can enter the details yourself. If you already make business calls over the internet, your provider almost certainly works.', @@ -205,6 +248,11 @@ const faqSchema = {
+ +
+ +
+

What it does

diff --git a/src/pages/zh-hant/about.astro b/src/pages/zh-hant/about.astro index c3bc938..e22fb21 100644 --- a/src/pages/zh-hant/about.astro +++ b/src/pages/zh-hant/about.astro @@ -32,7 +32,7 @@ const aboutSchema = {

關於 WaveKat

-

WaveKat Voice 是一款適用於 Mac 和 Linux 的桌面軟體電話,會自動錄音並轉寫每一通通話。"} /> +

WaveKat Voice 是一款適用於 Mac 和 Linux 的桌面軟體電話,會自動錄音並轉寫每一通通話。WaveKat 由創辦人 Eason Guo 打造,他開發 WaveKat Voice 及其底層的開源 Rust 函式庫。"} />

diff --git a/src/pages/zh-hant/blog/[slug].astro b/src/pages/zh-hant/blog/[slug].astro index 6844048..04bf0c8 100644 --- a/src/pages/zh-hant/blog/[slug].astro +++ b/src/pages/zh-hant/blog/[slug].astro @@ -27,6 +27,7 @@ const { Content } = await render(post); author={post.data.author} tags={post.data.tags} ogImage={post.data.ogImage} + noindex={post.data.draft} faqs={extractFaqs(post.body ?? '')} > diff --git a/src/pages/zh-hant/voice/index.astro b/src/pages/zh-hant/voice/index.astro index 1ced23a..8ed6e85 100644 --- a/src/pages/zh-hant/voice/index.astro +++ b/src/pages/zh-hant/voice/index.astro @@ -10,6 +10,8 @@ import Voice from '../../../layouts/Voice.astro'; import TalkCTA from '../../../components/TalkCTA.astro'; import { PhoneCall, + PhoneForwarded, + AudioLines, Mic, FileText, Terminal, @@ -20,17 +22,44 @@ import { ArrowRight, } from '@lucide/astro'; import VoiceDownload from '../../../components/VoiceDownload.astro'; +import ProductCarousel from '../../../components/ProductCarousel.astro'; import { getMacDownload, getLinuxDownload } from '../../../lib/voice-download'; const macDownload = await getMacDownload(); const linuxDownload = await getLinuxDownload(); +// Locale code for the per-language app screenshots (/screenshots//.webp). +const imgCode = 'zh-Hant'; + +const productShots = [ + { + scene: 'in-call', + alt: '通話進行中的 WaveKat Voice 桌面畫面——撥號盤與通話控制,一旁即時滾動顯示文字稿。', + caption: '一通進行中的通話——左側是通話控制,右側是自動書寫的文字稿。', + }, + { + scene: 'in-call-transfer', + alt: '桌面上的 WaveKat Voice,正在進行詢問轉接——來電者處於保留狀態,旁邊是完成轉接按鈕。', + caption: '先跟對方確認一句,再把通話轉接過去。', + }, + { + scene: 'settings-automation-agents', + alt: 'WaveKat Voice 的 設定 → 自動化——透過一鍵連接按鈕接入 Claude、Cursor 等 AI 助理。', + caption: '一鍵連接 AI 助理,讓它替你撥打電話。', + }, +]; + const features = [ { icon: PhoneCall, title: '在電腦上打電話', body: '直接在電腦上接聽和撥打電話——不需要話機、不需要額外硬體,也不用盯著瀏覽器分頁。它安靜地待在一旁,電話響起時才出現。', }, + { + icon: PhoneForwarded, + title: '保留、切換與轉接', + body: '把一通來電轉為保留,接起第二條線路,並在兩者之間切換——接著可以直接轉接,或先低聲交代幾句再轉。保留期間發生的一切都不會進入錄音和文字稿。', + }, { icon: Mic, title: '每通電話自動錄音', @@ -41,6 +70,11 @@ const features = [ title: '即時轉寫', body: '邊說邊看到文字。通話旁邊滾動顯示即時文字稿,讓你專注於重要內容,而不是埋頭記筆記。', }, + { + icon: AudioLines, + title: 'HD 高清通話', + body: '在你的電信業者支援時,WaveKat Voice 會協商採用 Opus 編解碼器,帶來寬頻、HD 清晰的語音——無法支援時則會自動退回標準音質。無須手動開啟。', + }, { icon: Terminal, title: '讓 AI 助理替你撥號', @@ -95,6 +129,15 @@ const faqs = [ q: '需要什麼特殊硬體嗎?', a: '不需要。只要有一台電腦和一個電話電信業者帳號,你就萬事俱備了。不需要話機、不需要額外裝置——有副耳機更好,但不是必須的。', }, + { + q: '我可以把來電轉為保留或轉接通話嗎?', + a: '可以。WaveKat Voice 能把來電轉為保留、在第一通等待時接起第二通、在通話之間切換,並把來電轉接給其他人——可以直接轉接(盲轉),也可以先與對方確認再轉(諮詢轉接)。通話處於保留時,它的錄音和即時文字稿會自動暫停。', + link: { href: '/zh-hant/blog/hold-switch-and-transfer-calls/', label: '了解運作方式' }, + }, + { + q: 'WaveKat Voice 支援 HD 高清通話嗎?', + a: '支援。在你的電話電信業者支援時,WaveKat Voice 會採用 Opus 編解碼器帶來寬頻——「HD」——語音,比一般電話線路更飽滿、更清晰;不支援時則自動退回標準音質(G.711)。完全無須設定。', + }, { q: '它相容哪些電話電信業者?', a: '大多數常見的電信業者——Twilio、Telnyx、2talk 等等。我們認識的電信業者,設定會自動為你填好;其他的也可以自己填寫詳情。如果你已經在透過網路撥打商務電話,你的電信業者幾乎一定可用。', @@ -212,6 +255,11 @@ const faqSchema = {
+ +
+ +
+

功能一覽

diff --git a/src/pages/zh/about.astro b/src/pages/zh/about.astro index fefce53..982c88a 100644 --- a/src/pages/zh/about.astro +++ b/src/pages/zh/about.astro @@ -32,7 +32,7 @@ const aboutSchema = {

关于 WaveKat

-

WaveKat Voice 是一款适用于 Mac 和 Linux 的桌面软电话,会自动录音并转写每一通通话。"} /> +

WaveKat Voice 是一款适用于 Mac 和 Linux 的桌面软电话,会自动录音并转写每一通通话。WaveKat 由创始人 Eason Guo 打造,他开发 WaveKat Voice 及其底层的开源 Rust 库。"} />

diff --git a/src/pages/zh/blog/[slug].astro b/src/pages/zh/blog/[slug].astro index 65abfbd..41d60b2 100644 --- a/src/pages/zh/blog/[slug].astro +++ b/src/pages/zh/blog/[slug].astro @@ -27,6 +27,7 @@ const { Content } = await render(post); author={post.data.author} tags={post.data.tags} ogImage={post.data.ogImage} + noindex={post.data.draft} faqs={extractFaqs(post.body ?? '')} > diff --git a/src/pages/zh/voice/index.astro b/src/pages/zh/voice/index.astro index 3f3f704..91a1945 100644 --- a/src/pages/zh/voice/index.astro +++ b/src/pages/zh/voice/index.astro @@ -10,6 +10,8 @@ import Voice from '../../../layouts/Voice.astro'; import TalkCTA from '../../../components/TalkCTA.astro'; import { PhoneCall, + PhoneForwarded, + AudioLines, Mic, FileText, Terminal, @@ -20,17 +22,44 @@ import { ArrowRight, } from '@lucide/astro'; import VoiceDownload from '../../../components/VoiceDownload.astro'; +import ProductCarousel from '../../../components/ProductCarousel.astro'; import { getMacDownload, getLinuxDownload } from '../../../lib/voice-download'; const macDownload = await getMacDownload(); const linuxDownload = await getLinuxDownload(); +// Locale code for the per-language app screenshots (/screenshots//.webp). +const imgCode = 'zh-Hans'; + +const productShots = [ + { + scene: 'in-call', + alt: '通话进行中的 WaveKat 桌面应用——拨号盘与通话控制,旁边同步滚动着实时文字稿。', + caption: '一通实时通话——左侧是通话控制,右侧的文字稿正自动书写。', + }, + { + scene: 'in-call-transfer', + alt: '桌面上的 WaveKat Voice,正在进行询问转接——来电者处于保持状态,旁边是完成转接按钮。', + caption: '先和对方沟通一句,再把通话转接过去。', + }, + { + scene: 'settings-automation-agents', + alt: 'WaveKat Voice 的 设置 → 自动化——通过一键连接按钮接入 Claude、Cursor 等 AI 助手。', + caption: '一键连接 AI 助手,让它替你拨打电话。', + }, +]; + const features = [ { icon: PhoneCall, title: '在电脑上打电话', body: '直接在电脑上接听和拨打电话——不需要话机、不需要额外硬件,也不用盯着浏览器标签页。它安静地待在一旁,电话响起时才出现。', }, + { + icon: PhoneForwarded, + title: '保持、切换与转接', + body: '把一通来电设为保持,接起第二条线路,在两者之间随意切换——之后既可以直接转接,也可以先私下交代几句再转过去。保持期间发生的一切都不会进入录音和文字稿。', + }, { icon: Mic, title: '每通电话自动录音', @@ -41,6 +70,11 @@ const features = [ title: '实时转写', body: '边说边看到文字。通话旁边滚动显示实时文字稿,让你专注于重要内容,而不是埋头记笔记。', }, + { + icon: AudioLines, + title: 'HD 高清通话', + body: '只要你的运营商支持,WaveKat Voice 就会协商启用 Opus 编解码器,带来宽频、HD 般清晰的语音——不支持时也会自动回落到标准音质。无需任何开关。', + }, { icon: Terminal, title: '让 AI 助手替你拨号', @@ -95,6 +129,15 @@ const faqs = [ q: '需要什么特殊硬件吗?', a: '不需要。只要有一台电脑和一个电话运营商账户,你就万事俱备了。不需要话机、不需要额外设备——有个耳机更好,但不是必须的。', }, + { + q: '我能把来电设为保持,或者转接电话吗?', + a: '可以。WaveKat Voice 能把一通来电设为保持、在第一通等待时接起第二通、在多通电话之间切换,还能把来电转接给别人——既可以直接转接(盲转),也可以先跟对方确认一下再转(协商转接)。电话处于保持状态时,它的录音和实时文字稿会自动暂停。', + link: { href: '/zh/blog/hold-switch-and-transfer-calls/', label: '了解工作原理' }, + }, + { + q: 'WaveKat Voice 支持 HD 高清通话吗?', + a: '支持。只要你的电话运营商支持,WaveKat Voice 就会使用 Opus 编解码器带来宽频——即“HD 高清”——语音,比普通电话线更饱满、更清晰;不支持时也会自动回落到标准音质(G.711)。没有任何需要配置的地方。', + }, { q: '它兼容哪些电话运营商?', a: '大多数常见的运营商——Twilio、Telnyx、2talk 等等。我们认识的运营商,设置会自动为你填好;其他的也可以自己填写详情。如果你已经在通过网络拨打商务电话,你的运营商几乎一定可用。', @@ -212,6 +255,11 @@ const faqSchema = {
+ +
+ +
+

功能一览

diff --git a/src/styles/global.css b/src/styles/global.css index 29b2e3e..e0482d4 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -28,15 +28,4 @@ html { scroll-padding-top: 4rem; } - - /* Give blog/prose images a faint border so screenshots with a white - background don't bleed into the white page (matches the code-block - border in Post.astro: gray-200 light, white/10 dark). */ - .prose img { - border: 1px solid #e5e7eb; - border-radius: 0.5rem; - } - .dark .prose img { - border-color: rgb(255 255 255 / 0.1); - } } \ No newline at end of file