Skip to content
Merged
Binary file modified public/screenshots/account-2talk-filled/de.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/account-2talk-filled/en.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/account-2talk-filled/es.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/account-2talk-filled/fr.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/account-2talk-filled/it.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/account-2talk-filled/ja.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/account-2talk-filled/ko.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/account-2talk-filled/zh-Hans.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/account-2talk-filled/zh-Hant.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-hold/de.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-hold/en.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-hold/es.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-hold/fr.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-hold/it.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-hold/ja.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-hold/ko.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-hold/zh-Hans.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-hold/zh-Hant.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-transfer/de.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-transfer/en.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-transfer/es.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-transfer/fr.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-transfer/it.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-transfer/ja.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-transfer/ko.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/screenshots/in-call-transfer/zh-Hans.webp
Binary file modified public/screenshots/in-call-transfer/zh-Hant.webp
Binary file modified public/screenshots/in-call-waiting/de.webp
Binary file modified public/screenshots/in-call-waiting/en.webp
Binary file modified public/screenshots/in-call-waiting/es.webp
Binary file modified public/screenshots/in-call-waiting/fr.webp
Binary file modified public/screenshots/in-call-waiting/it.webp
Binary file modified public/screenshots/in-call-waiting/ja.webp
Binary file modified public/screenshots/in-call-waiting/ko.webp
Binary file modified public/screenshots/in-call-waiting/zh-Hans.webp
Binary file modified public/screenshots/in-call-waiting/zh-Hant.webp
Binary file modified public/screenshots/in-call/de.webp
Binary file modified public/screenshots/in-call/en.webp
Binary file modified public/screenshots/in-call/es.webp
Binary file modified public/screenshots/in-call/fr.webp
Binary file modified public/screenshots/in-call/it.webp
Binary file modified public/screenshots/in-call/ja.webp
Binary file modified public/screenshots/in-call/ko.webp
Binary file modified public/screenshots/in-call/zh-Hans.webp
Binary file modified public/screenshots/in-call/zh-Hant.webp
Binary file modified public/screenshots/provider-picker-2talk/de.webp
Binary file modified public/screenshots/provider-picker-2talk/en.webp
Binary file modified public/screenshots/provider-picker-2talk/es.webp
Binary file modified public/screenshots/provider-picker-2talk/fr.webp
Binary file modified public/screenshots/provider-picker-2talk/it.webp
Binary file modified public/screenshots/provider-picker-2talk/ja.webp
Binary file modified public/screenshots/provider-picker-2talk/ko.webp
Binary file modified public/screenshots/provider-picker-2talk/zh-Hans.webp
Binary file modified public/screenshots/provider-picker-2talk/zh-Hant.webp
Binary file modified public/screenshots/settings-automation-agents/de.webp
Binary file modified public/screenshots/settings-automation-agents/en.webp
Binary file modified public/screenshots/settings-automation-agents/es.webp
Binary file modified public/screenshots/settings-automation-agents/fr.webp
Binary file modified public/screenshots/settings-automation-agents/it.webp
Binary file modified public/screenshots/settings-automation-agents/ja.webp
Binary file modified public/screenshots/settings-automation-agents/ko.webp
Binary file modified public/screenshots/settings-automation-agents/zh-Hans.webp
Binary file modified public/screenshots/settings-automation-agents/zh-Hant.webp
Binary file modified public/screenshots/settings-automation/de.webp
Binary file modified public/screenshots/settings-automation/en.webp
Binary file modified public/screenshots/settings-automation/es.webp
Binary file modified public/screenshots/settings-automation/fr.webp
Binary file modified public/screenshots/settings-automation/it.webp
Binary file modified public/screenshots/settings-automation/ja.webp
Binary file modified public/screenshots/settings-automation/ko.webp
Binary file modified public/screenshots/settings-automation/zh-Hans.webp
Binary file modified public/screenshots/settings-automation/zh-Hant.webp
Binary file modified public/screenshots/share-sheet/de.webp
Binary file modified public/screenshots/share-sheet/en.webp
Binary file modified public/screenshots/share-sheet/es.webp
Binary file modified public/screenshots/share-sheet/fr.webp
Binary file modified public/screenshots/share-sheet/it.webp
Binary file modified public/screenshots/share-sheet/ja.webp
Binary file modified public/screenshots/share-sheet/ko.webp
Binary file modified public/screenshots/share-sheet/zh-Hans.webp
Binary file modified public/screenshots/share-sheet/zh-Hant.webp
146 changes: 146 additions & 0 deletions src/components/ProductCarousel.astro
Original file line number Diff line number Diff line change
@@ -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;
---

<div class="voice-carousel">
<div
class:list={[
framed && 'rounded-xl border border-gray-200 dark:border-white/10 bg-gray-50 dark:bg-wk-surface p-2 sm:p-3 shadow-lg shadow-black/5',
]}
>
<div
class:list={['relative overflow-hidden', framed ? 'rounded-lg' : 'rounded-xl']}
style="aspect-ratio: 1200 / 872;"
>
{shots.map((shot, i) => (
<img
src={`/screenshots/${shot.scene}/${imgCode}.webp`}
alt={shot.alt}
width="1200"
height="872"
decoding="async"
loading={i === 0 ? undefined : 'lazy'}
fetchpriority={i === 0 ? 'high' : undefined}
data-slide={i}
class:list={[
'absolute inset-0 w-full h-full object-cover transition-opacity duration-300 ease-in-out',
i === 0 ? 'opacity-100' : 'opacity-0 pointer-events-none',
]}
/>
))}
{shots.length > 1 && (
<>
<button
type="button"
class="carousel-prev absolute left-2 top-1/2 -translate-y-1/2 inline-flex items-center justify-center w-8 h-8 rounded-full bg-white/90 dark:bg-black/60 text-gray-700 dark:text-white shadow-sm border border-gray-200/80 dark:border-white/10 backdrop-blur-sm hover:bg-white hover:scale-105 dark:hover:bg-black/80 transition-all"
aria-label="Previous screenshot"
>
<ChevronLeft class="w-4 h-4" />
</button>
<button
type="button"
class="carousel-next absolute right-2 top-1/2 -translate-y-1/2 inline-flex items-center justify-center w-8 h-8 rounded-full bg-white/90 dark:bg-black/60 text-gray-700 dark:text-white shadow-sm border border-gray-200/80 dark:border-white/10 backdrop-blur-sm hover:bg-white hover:scale-105 dark:hover:bg-black/80 transition-all"
aria-label="Next screenshot"
>
<ChevronRight class="w-4 h-4" />
</button>
</>
)}
</div>
</div>

<p
class="carousel-caption text-xs text-gray-400 dark:text-gray-600 leading-relaxed text-center mt-3"
data-captions={JSON.stringify(shots.map((s) => s.caption))}
aria-live="polite"
>
{shots[0].caption}
</p>

{shots.length > 1 && (
<div class="flex justify-center gap-2 mt-3">
{shots.map((_, i) => (
<button
type="button"
class:list={['carousel-dot h-1.5 rounded-full transition-all', i === 0 ? 'w-5' : 'w-1.5']}
style={`background-color: ${i === 0 ? '#ff6d00' : '#d1d5db'}`}
data-index={i}
aria-label={`Show screenshot ${i + 1} of ${shots.length}`}
aria-current={i === 0 ? 'true' : 'false'}
/>
))}
</div>
)}
</div>

<script>
document.querySelectorAll('.voice-carousel').forEach((carousel) => {
const slides = Array.from(carousel.querySelectorAll('[data-slide]'));
const dots = Array.from(carousel.querySelectorAll('.carousel-dot'));
const captionEl = carousel.querySelector('.carousel-caption');
const captions = JSON.parse(captionEl?.dataset.captions || '[]');
let current = 0;

function show(index) {
current = (index + slides.length) % slides.length;
slides.forEach((slide, i) => {
const active = i === current;
slide.classList.toggle('opacity-100', active);
slide.classList.toggle('opacity-0', !active);
slide.classList.toggle('pointer-events-none', !active);
});
dots.forEach((dot, i) => {
const active = i === current;
dot.classList.toggle('w-5', active);
dot.classList.toggle('w-1.5', !active);
dot.style.backgroundColor = active ? '#ff6d00' : '#d1d5db';
dot.setAttribute('aria-current', active ? 'true' : 'false');
});
if (captionEl && captions[current]) captionEl.textContent = captions[current];
}

dots.forEach((dot, i) => dot.addEventListener('click', () => show(i)));
carousel.querySelector('.carousel-prev')?.addEventListener('click', () => show(current - 1));
carousel.querySelector('.carousel-next')?.addEventListener('click', () => show(current + 1));

let touchStartX = 0;
const frame = carousel.querySelector('.relative');
frame?.addEventListener(
'touchstart',
(e) => {
touchStartX = e.touches[0].clientX;
},
{ passive: true }
);
frame?.addEventListener(
'touchend',
(e) => {
const dx = e.changedTouches[0].clientX - touchStartX;
if (Math.abs(dx) > 40) show(current + (dx < 0 ? 1 : -1));
},
{ passive: true }
);
});
</script>
2 changes: 1 addition & 1 deletion src/content/blog/de/hold-switch-and-transfer-calls.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
72 changes: 72 additions & 0 deletions src/content/blog/de/our-own-sip-engine.md
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 1 addition & 1 deletion src/content/blog/es/hold-switch-and-transfer-calls.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Loading
Loading