IVR-Toolkit
Das IVR-Toolkit ist CallFactory’s Aktionsbibliothek für Entwickler zum Erstellen benutzerdefinierter Anrufflüsse. Jede Aktion — Answer, Play, Dial, Record, StartStream und mehr — gibt Ihnen präzise Kontrolle über das, was während eines Anrufs passiert.
Verwenden Sie es, um Telefonmenüs zu erstellen, Eingaben von Anrufern zu sammeln, Audio an KI-Dienste zu streamen, Anrufer mit Agenten zu verbinden und jeden Grenzfall zu behandeln. Das Toolkit läuft auf derselben IVR-Plattform, die alle CallFactory-Funktionen antreibt.
- Strukturierte Aktionen mit klaren Signaturen und Beispielen
- Stream-Audio an KI, STT oder benutzerdefinierte Endpunkte
- Erstellen Sie komplette Anrufflüsse ohne zusätzliche Hardware
- Vollständige Dokumentation und Entwicklerunterstützung
Vorteile des IVR-Toolkits
Sehen Sie, wie das IVR-Toolkit Entwicklungsteams beim Erstellen leistungsstarker Anrufflüsse hilft.
Vollständige Kontrolle über die Anruflogik
Definieren Sie genau, was bei jedem Schritt eines Anrufs passiert. Spielen Sie Eingabeaufforderungen ab, sammeln Sie Eingaben, leiten Sie basierend auf Bedingungen weiter, streamen Sie zu KI und behandeln Sie Fehler — alles mit vorhersehbaren, gut dokumentierten Aktionen.
Für Entwickler gemacht
Jede Aktion hat eine klare Signatur, typisierte Rückgabewerte, Fehlerbehandlung und funktionierende Code-Beispiele. Bauen Sie mit Vertrauen mit strukturierten Aktionen, die natürlich in Ihr Backend passen.
KI-bereites Audio-Streaming
Streamen Sie Live-Call-Audio an jeden WebSocket-Endpoint — einen KI-Assistenten, eine Spracherkennungs-Engine oder Ihren eigenen Analysedienst. StartStream und StopStream geben Ihnen volle Kontrolle über wann und wohin Audio fließt.
Läuft auf bewährter Infrastruktur
Das Toolkit läuft auf CallFactory's eigener IVR-Plattform — der gleichen Infrastruktur, die alle unsere Telefoniefunktionen antreibt. Keine zusätzliche Hardware, keine Abhängigkeiten von Drittanbietern. Funktioniert mit Ihren bestehenden CallFactory-Nummern.
IVR-Aktions-Toolkit
Klicken Sie auf eine Aktion, um ihre Beschreibung, Signatur und Beispiele anzuzeigen.
Beantwortet einen eingehenden Anruf. Muss vor dem Abspielen von Audio oder dem Sammeln von Eingaben bei eingehenden Anrufen aufgerufen werden.
Description
- Markiert den Anruf auf der Telefonienseite als beantwortet.
- Erforderlich vor der Verwendung von Aktionen wie
Play,PromptDigit,GatherDigits,Dial,Recordusw. bei eingehenden Anrufen.
Throws
InvalidOperationException- wenn der Anruf bereits beantwortet wurde.
Signature
void Answer();Example
protected override async Task
HandleCallAsync(CancellationToken ct)
{
// Immer zuerst beantworten bei eingehenden Anrufen
Answer();
await Play("welcome.wav", ct);
}
Spielt eine Audiodatei für den Anrufer oder einen ausgehenden Kanal ab.
Description
- Spielt eine Audiodatei (z.B.
.wav) aus dem Audio-Verzeichnis des Servers ab. - Kann den eingehenden Anrufer oder einen bestimmten OutboundChannel als Ziel haben.
Parameters
audioFile- Dateiname/Pfad relativ zum IVR-Audio-Verzeichnis.channel- (optional) Ausgehender Kanal, an den Audio abgespielt werden soll.ct- Abbruch-Token; wird abgebrochen, wenn der Anrufer oder der Kanal die Verbindung trennt.
Returns
PlayResult.Success- Audio vollständig abgespielt.PlayResult.Fail- Wiedergabe fehlgeschlagen (z.B. ungültige Datei).PlayResult.Cancel- Operation abgebrochen (z.B. Anrufer aufgelegt).PlayResult.Error- Unerwarteter Fehler bei der Wiedergabe.
Throws
OperationCanceledException- Wenn ct während der Wiedergabe abgebrochen wird.- Andere Transport-/IO-Ausnahmen je nach Implementierung.
Signatures
Task<PlayResult> Play(
string audioFile,
CancellationToken ct = default);
Task<PlayResult> Play(
string audioFile,
OutboundChannel channel,
CancellationToken ct = default);
Example
protected override async Task HandleCallAsync(CancellationToken ct)
{
Answer();
var result = await Play("welcome.wav", ct);
if (result != PlayResult.Success)
{
Logger.LogWarning("Willkommensnachricht konnte nicht abgespielt werden (Ergebnis: {Result})", result);
return;
}
await Play("next_prompt.wav", ct);
}
Spielt eine Audio-Eingabeaufforderung ab und sammelt eine einzelne DTMF-Ziffer.
Description
- Spielt eine Menü-Eingabeaufforderung ab (z.B. ‘Drücken Sie 1 für Verkauf, 2 für Support, 3 um eine Nachricht zu hinterlassen.’).
- Wartet auf eine einzelne DTMF-Ziffer: 0-9, *, oder #.
- Gedacht für Hauptmenü-Auswahlungen.
Parameters
audioFile- Eingabeaufforderungsdatei zum Abspielen.timeoutSeconds- Wie lange auf eine Ziffer gewartet wird (Standard 10).ct- Abbruch-Token; wird abgebrochen, wenn der Anrufer trennt.
Returns
MenuResult.Successmit Digit wenn eine Ziffer eingegeben wird.MenuResult.Timeoutwenn keine Ziffer innerhalb vontimeoutSecondseingegeben wird.MenuResult.Cancelwenn Operation abgebrochen wird.
Throws
OperationCanceledException- Wenn ct abgebrochen wird (z.B. Anrufer legt auf).
Signatures
Task<(MenuResult Result, char? Digit)> PromptDigit(
string audioFile,
int timeoutSeconds = 10,
CancellationToken ct = default);
Example
protected override async Task HandleCallAsync(CancellationToken ct)
{
Answer();
await Play("welcome.wav", ct);
var (menuResult, digit) = await PromptDigit(
"main_menu.wav",
timeoutSeconds: 10,
ct);
if (menuResult == MenuResult.Success && digit.HasValue)
{
switch (digit.Value)
{
case '1':
await HandleSales(ct);
break;
case '2':
await HandleSupport(ct);
break;
default:
await Play("invalid_option.wav", ct);
await Hangup(ct);
break;
}
}
else if (menuResult == MenuResult.Timeout)
{
await Play("no_input_goodbye.wav", ct);
await Hangup(ct);
}
else
{
await Play("system_error.wav", ct);
await Hangup(ct);
}
}
Spielt eine Eingabeaufforderung ab und sammelt mehrere DTMF-Ziffern (z.B. Kontonummer, PIN).
Description
- Spielt eine Eingabeaufforderung ab, die den Anrufer auffordert, mehrere Ziffern einzugeben.
- Stoppt wenn entweder:
maxDigitserreicht ist
- Eine Beendigungsziffer (z.B. #) gedrückt wird
- Timeout abläuft
Parameters
audioFile– Eingabeaufforderung zum Abspielen (z.B. “Bitte geben Sie Ihre Kontonummer gefolgt von # ein”).maxDigits– Maximale Ziffern zum Sammeln vor dem Stopp.terminationDigits– String von Ziffern, die das Sammeln beenden.timeoutSeconds– Maximale Zeit zum Warten auf Eingaben.ct– Abbruch-Token.
Returns
- Tuple (
GatherResult Result,string? Digits): GatherResult.Successund Digits gesetzt wenn Eingabe erfasst wird.GatherResult.Timeoutwenn keine Eingabe empfangen wird.GatherResult.Cancelwenn Operation abgebrochen wird.GatherResult.Errorbei unerwartetem Fehler.
Throws
OperationCanceledException- Wenn ct abgebrochen wird (Anrufer legt auf).
Signatures
Task<(GatherResult Result, string? Digits)> GatherDigits(
string audioFile,
int maxDigits = 20,
string terminationDigits = "#",
int timeoutSeconds = 30,
CancellationToken ct = default);
Example
protected override async Task
HandleCallAsync(CancellationToken ct)
{
Answer();
await Play("welcome.wav", ct);
var (result, digits) = await GatherDigits(
"enter_account.wav",
maxDigits: 10,
terminationDigits: "#",
timeoutSeconds: 30,
ct);
if (result == GatherResult.Success && !string.IsNullOrEmpty(digits))
{
await ProcessAccountNumber(digits, ct);
}
else if (result == GatherResult.Timeout)
{
await Play("no_input_goodbye.wav", ct);
await Hangup(ct);
}
else
{
await Play("system_error.wav", ct);
await Hangup(ct);
}
}
Wählt eine oder mehrere ausgehende Telefonnummern und gibt einen OutboundChannel bei Antwort zurück.
Description
- Leitet einen ausgehenden Anruf zu einem einzelnen Ziel oder zu mehreren Zielen parallel ein.
- Bei mehreren Zielen gewinnt der erste, der antwortet; alle anderen werden abgebrochen.
Parameters
destination/destinations– Telefonnummer(n) zum Wählen.callerId– Nummer zur Anzeige als Anrufer-ID.ringTimeoutSeconds– Maximale Zeit zum Klingeln vor dem Aufgeben.ct– Abbruch-Token.
Returns
- Einzelnes Ziel:
(DialerResult Result, OutboundChannel? Channel)- Mehrere Ziele:
(DialerResult Result, string? AnsweredDestination, OutboundChannel? Channel)DialerResultkann sein: Init, Ringing, Answered, Busy, Rejected, NoAnswer, Failed, Cancel.
Throws
OperationCanceledException– Wenn die Operation während des Wählens abgebrochen wird.
Signatures
Task<(DialerResult Result, OutboundChannel? Channel)> Dial(
string destination,
string callerId,
int ringTimeoutSeconds = 60,
CancellationToken ct = default);
Task<(DialerResult Result, string? AnsweredDestination,
OutboundChannel? Channel)> Dial(
string[] destinations,
string callerId,
int ringTimeoutSeconds = 40,
CancellationToken ct = default);
Beispiel (einzelnes Ziel)
private async Task TransferToSupport(CancellationToken ct)
{
var (dialResult, channel) = await Dial(
destination: "18885554444",
callerId: Context.Ani,
ringTimeoutSeconds: 30,
ct);
if (dialResult == DialerResult.Answered && channel != null)
{
await Play("connecting_to_support.wav", ct);
await Connect(channel, ct);
}
else
{
await Play("support_unavailable.wav", ct);
await HandleVoicemail(ct);
}
}
Beispiel (mehrere Ziele)
private async Task TransferToSalesHuntGroup(CancellationToken ct)
{
var salesTeam = new[]
{
"18885551111",
"18885552222",
"18885553333"
};
var (result, answeredNumber, channel) = await Dial(
destinations: salesTeam,
callerId: Context.Ani,
ringTimeoutSeconds: 40,
ct);
if (result == DialerResult.Answered && channel != null)
{
Logger.LogInformation("Connected to sales agent {Number}", answeredNumber);
await Connect(channel, ct);
}
else
{
await Play("sales_unavailable.wav", ct);
await HandleVoicemail(ct);
}
}
Verbindet Audio zwischen zwei Kanälen.
Description
- Für eingehende Flüsse: verbindet den eingehenden Anrufer mit einem ausgehenden Kanal.
- Für reine ausgehende Szenarien: verbindet zwei ausgehende Kanäle miteinander.
- Blockiert, bis eine Seite auflegt oder die Verbindung anderwie beendet wird.
Parameters
channel– Ausgehender Kanal zum Verbinden mit dem eingehenden Anruf.primary,secondary– Zwei ausgehende Kanäle zum Überbrücken.ct– Abbruch-Token.
Returns
ConnectResult.Success– Verbindung normal beendet (Anruf beendet).ConnectResult.Error– Verbindung konnte nicht hergestellt oder fehlgeschlagen.
Throws
OperationCanceledException– Wenn ct während der Verbindung abgebrochen wird.
Signatures
Task<ConnectResult> Connect(
OutboundChannel channel,
CancellationToken ct = default);
Task<ConnectResult> Connect(
OutboundChannel primary,
OutboundChannel secondary,
CancellationToken ct = default);
Example
protected override async Task HandleCallAsync(CancellationToken ct)
{
Answer();
await Play("connecting_you_now.wav", ct);
var (dialResult, channel) = await Dial(
destination: "18885550000",
callerId: Context.Ani,
ringTimeoutSeconds: 30,
ct);
if (dialResult == DialerResult.Answered && channel != null)
{
var connectResult = await Connect(channel, ct);
Logger.LogInformation("Connection ended with result: {Result}", connectResult);
}
else
{
await Play("agent_unavailable.wav", ct);
}
await Hangup(ct);
}
Zeichnet Audio vom Anrufer oder einem ausgehenden Kanal auf.
Description
- Startet die Aufzeichnung vom eingehenden Anrufer oder einem bestimmten ausgehenden Kanal.
- Endet wenn:
timeLimitSecondserreicht wird
- Eine Beendigungsziffer gedrückt wird (falls konfiguriert)
- Anrufer oder Kanal auflegt
Parameters
timeLimitSeconds– Maximale Aufzeichnungslänge.fileName– Optionaler benutzerdefinierter Dateiname (auto-generiert wenn null).terminationDigits– DTMF-Ziffern, die die Aufzeichnung stoppen.playBeep– Ob ein Beep vor der Aufzeichnung abgespielt werden soll.channel– Optionaler ausgehender Kanal.ct– Abbruch-Token.
Returns
- Tuple (
RecordResult Result,string? FilePath): RecordResult.SuccessmitFilePathwird gespeichert.RecordResult.Timeout,MaxDurationReached,TerminationDigit,Cancel,Error.
Throws
OperationCanceledExceptionwenn abgebrochen.
Signatures
Task<(RecordResult Result, string? FilePath)> Record(
int timeLimitSeconds = 120,
string? fileName = null,
string? terminationDigits = null,
bool playBeep = true,
CancellationToken ct = default);
Task<(RecordResult Result, string? FilePath)> Record(
OutboundChannel channel,
int timeLimitSeconds = 120,
string? fileName = null,
string? terminationDigits = null,
bool playBeep = true,
CancellationToken ct = default);
Example
private async Task HandleVoicemail(CancellationToken ct)
{
await Play("leave_message_after_beep.wav", ct);
var (recordResult, filePath) = await Record(
timeLimitSeconds: 180,
fileName: null,
terminationDigits: "#",
playBeep: true,
ct: ct);
if (recordResult == RecordResult.Success && !string.IsNullOrEmpty(filePath))
{
Logger.LogInformation("Voicemail saved at {Path}", filePath);
await Play("thank_you_message_received.wav", ct);
}
else
{
Logger.LogWarning("Recording failed: {Result}", recordResult);
await Play("recording_failed.wav", ct);
}
await Hangup(ct);
}
Lehnt einen eingehenden Anruf mit einem SIP-Grund-Code ab und beendet den Anruf.
Description
- Verwendet für Anruf-Screening, Blockierung und Verhalten außerhalb der Geschäftszeiten.
- Gibt einen SIP-Fehlercode an den Upstream-Carrier zurück.
Parameters
reason–RejectReason.Busy,.TemporarilyUnavailable,.Declined.ct– Abbruch-Token.
Returns
RejectResult.Success– Anruf abgelehnt.RejectResult.AlreadyAnswered– Anruf bereits beantwortet.RejectResult.Error– Fehler beim Ablehnen.
Throws
OperationCanceledExceptionwenn abgebrochen.
Signatures
Task<RejectResult> Reject(
RejectReason reason = RejectReason.Busy,
CancellationToken ct = default);
Example
protected override async Task HandleCallAsync(CancellationToken ct)
{
if (IsBlockedNumber(Context.Ani))
{
await Reject(RejectReason.Declined, ct);
return;
}
if (!IsWithinBusinessHours(DateTime.UtcNow))
{
await Reject(RejectReason.TemporarilyUnavailable, ct);
return;
}
// Normaler Ablauf
Answer();
await Play("welcome.wav", ct);
}
Beendet sauber den aktiven Anruf.
Description
- Beendet den Anruf von der IVR-Seite.
Returns
HangupResult.Success– Anruf erfolgreich beendet.HangupResult.NotAnswered– Nie beantwortet.HangupResult.AlreadyDisconnected– Anrufer hat aufgelegt.HangupResult.Error– Hangup fehlgeschlagen.
Throws
OperationCanceledExceptionwenn abgebrochen.
Signature
Task<HangupResult> Hangup(CancellationToken ct = default);
Example
protected override async Task HandleCallAsync(CancellationToken ct)
{
Answer();
await Play("goodbye.wav", ct);
var result = await Hangup(ct);
Logger.LogInformation("Hangup result: {Result}", result);
}
Pausiert die Ausführung für eine bestimmte Anzahl von Sekunden.
Description
- Wartet durationSeconds, während der Anruf offen bleibt.
- Kann durch DTMF-Eingabe unterbrochen werden, abhängig von der Implementierung.
Parameters
durationSeconds– Dauer in Sekunden.ct– Abbruch-Token.
Returns
PauseResult.Success– Pause normal abgeschlossen.PauseResult.Interrupted– Anrufer hat während der Pause eine Taste gedrückt (falls unterstützt).PauseResult.Cancel– Operation abgebrochen.PauseResult.Error– Pause fehlgeschlagen.
Throws
OperationCanceledException– Wenn ct abgebrochen wird.
Signatures
Task<PauseResult> Pause(
int durationSeconds,
CancellationToken ct = default
);
Example
protected override async Task HandleCallAsync(CancellationToken ct)
{
Answer();
await Play("please_wait.wav", ct);
var result = await Pause(3, ct);
if (result == PauseResult.Interrupted)
{
await Play("you_pressed_a_key.wav", ct);
}
else
{
await Play("thank_you_for_waiting.wav", ct);
}
await Hangup(ct);
}
Sendet einen Besetztton an den Anrufer und beendet den Anruf.
Description
- Präsentiert einen standardmäßigen Besetztton.
- Wird häufig verwendet, wenn alle Agenten/Leitungen belegt sind.
Returns
BusyResult.Success– Besetztton gesendet und Anruf beendet.BusyResult.Cancel– Operation abgebrochen.BusyResult.Error– Fehler beim Senden des Besetzttons oder Beenden des Anrufs.
Throws
OperationCanceledException– Wenn ct abgebrochen wird.
Signature
Task<BusyResult> Busy(CancellationToken ct = default);
Example
protected override async Task HandleCallAsync(CancellationToken ct)
{
if (AllAgentsBusy())
{
var result = await Busy(ct);
Logger.LogInformation("Busy result: {Result}", result);
return;
}
// Andernfalls mit normalem Fluss fortfahren
Answer();
await Play("welcome.wav", ct);
}
Beginnt mit dem Streamen des Live-Audio des Anrufs zu einem externen Endpunkt (z.B. KI oder STT-Engine).
Description
- Öffnet einen Real-Time-Medien-Stream vom Anruf zur angegebenen URL (z.B. WebSocket-Endpunkt).
- Wird typischerweise verwendet, um Audio zu senden an:
- einen KI-Assistenten,
- eine Spracherkennungs-Engine,
- einen benutzerdefinierten Analyse-/Überwachungsdienst.
- Es wird nur ein aktiver Stream pro Anruf empfohlen.
Parameters
url– Ziel-Streaming-Endpunkt (z.B.wss://ai.callfactory.nl/voice-stream).options– Optionale Streaming-Konfiguration (Richtung, Metadaten, Name).ct– Abbruch-Token. Wenn abgebrochen, wird der Stream geschlossen.
Throws
OperationCanceledException– Wenn ct während des Setups abgebrochen wird.- Verbindungs-/Transport-Ausnahmen je nach Implementierung.
Signaturen
Task<StreamResult> StartStream(
string url,
StreamOptions? options = null,
CancellationToken ct = default
);
Parameter
public class StreamOptions
{
public string? Name { get; set; } //
Optionaler Stream-Name
public StreamDirection Direction { get; set; } =
StreamDirection.Both;
public Dictionary<string, string>? Metadata { get; set; }
}
public enum StreamDirection
{
Inbound, // Vom Anrufer zur KI
Outbound, // Vom Agent/System zur KI
Both
}
Rückgaben
public enum StreamResult
{
Started, // Stream erfolgreich gestartet
Stopped, // Stream erfolgreich gestoppt (für StopStream)
AlreadyStarted, // Ein Stream ist bereits aktiv
NotActive, // Kein aktiver Stream (für StopStream)
Error // Fehler beim Starten/Stoppen
}
Example
protected override async Task
HandleCallAsync(CancellationToken ct)
{
Answer();
// Starten Sie das Streaming des Anrufer-Audio zur KI
var streamResult = await StartStream(
url: "wss://ai.callfactory.nl/voice-stream",
options: new StreamOptions
{
Name = "support-ai",
Direction = StreamDirection.Inbound,
Metadata = new Dictionary<string, string>
{
["caller"] = Context.Ani,
["dnis"] = Context.Dnis
}
},
ct
);
if (streamResult != StreamResult.Started)
{
Logger.LogWarning("Failed to start AI stream:
{Result}", streamResult);
await Play("ai_unavailable.wav", ct);
await Hangup(ct);
return;
}
await Play("connected_to_ai.wav", ct);
// Fortgesetzt IVR-Logik während der Streaming...
var (menuResult, digit) = await
PromptDigit("ai_menu.wav", 30, ct);
if (menuResult == MenuResult.Success && digit == '0')
{
// Anrufer möchte einen menschlichen Agenten
await StopStream(ct);
await Play("transferring_to_human_agent.wav", ct);
await TransferToHuman(ct);
}
else
{
await Play("thank_you_goodbye.wav", ct);
await StopStream(ct);
await Hangup(ct);
}
}
Stoppt einen aktiven Audio-Stream, der zuvor mit StartStream gestartet wurde.
Description
- Herunterfahren des aktiven Medien-Streams sauber.
- Hängt den Anruf nicht auf — stoppt nur das Audio-Senden.
- Sicher zu rufen, auch wenn kein Stream aktiv ist (gibt
NotActivezurück).
Parameters
ct– Abbruch-Token.
Returns
StreamResult.Stopped– Stream erfolgreich gestoppt.StreamResult.NotActive– Kein aktiver Stream gefunden.StreamResult.Error– Fehler beim Stoppen des Streams.
Throws
OperationCanceledException– Wennctabgebrochen wird.
Signatures
Task<StreamResult> StopStream(
CancellationToken ct = default);
Example
private async Task TransferToHuman(CancellationToken ct)
{
// Stoppen Sie das KI-Streaming vor dem Transfer zum menschlichen Agenten
var stopResult = await StopStream(ct);
Logger.LogInformation("StopStream result: {Result}",
stopResult);
await Play("transferring_to_agent.wav", ct);
var (dialResult, channel) = await Dial(
destination: "18005550000",
callerId: Context.Ani,
ringTimeoutSeconds: 30,
ct
);
if (dialResult == DialerResult.Answered && channel !=
null)
{
await Connect(channel, ct);
}
else
{
await Play("agent_unavailable.wav", ct);
await Hangup(ct);
}
}
Wie das IVR-Toolkit funktioniert
Das IVR-Toolkit ist eine Aktionsbibliothek, die Ihr Code während eines Live-Anrufs aufruft. Wenn ein Anruf eingeht, empfängt Ihre Anwendung ihn und entscheidet, was zu tun ist — Schritt für Schritt — mit diesen Aktionen.
Ein typischer Fluss beginnt mit Answer(), spielt dann eine Willkommensnachricht mit Play() ab, sammelt Eingaben mit PromptDigit() oder GatherDigits() und leitet den Anrufer mit Dial() und Connect() weiter. Jede Aktion gibt ein typisiertes Ergebnis zurück, so dass Ihr Code immer weiß, was passiert ist und jeden Ausgang handhaben kann.
Audio-Streaming für KI und Spracherkennung
Die StartStream und StopStream Aktionen ermöglichen es Ihnen, Live-Call-Audio in Echtzeit an jeden WebSocket-Endpunkt zu streamen. Auf diese Weise verbinden Sie einen Anruf mit einem KI-Assistenten, einer Spracherkennungs-Engine oder einem benutzerdefinierten Analysedienst.
Sie kontrollieren, wenn das Streaming startet, in welche Richtung das Audio fließt (Anrufer zu KI, Agent zu KI oder beide) und wann es stoppt. Der Stream läuft parallel zu Ihren anderen IVR-Aktionen — sodass Sie weiterhin Eingabeaufforderungen abspielen, Eingaben sammeln oder den Anruf übertragen können, während die KI das Audio im Hintergrund verarbeitet.
Wer verwendet das IVR-Toolkit
Das Toolkit wurde für Entwicklungsteams entworfen, die vollständige Kontrolle über das Anrufverhalten benötigen. SaaS-Plattformen, die ihrem Produkt Sprachfunktionen hinzufügen. Callcenter, die benutzerdefinierte Routing-Logik erstellen. Unternehmen, die Telefonie mit ihrem CRM, ERP oder internen Tools integrieren.
Wenn Ihr Team Entwickler hat, die Backend-Code schreiben können, gibt das IVR-Toolkit ihnen alles, was sie brauchen, um professionelle Anrufflüsse zu erstellen — von einfachen Menüs bis zu komplexen KI-gesteuerten Gesprächen. Dokumentation, Code-Beispiele und Entwicklerunterstützung sind enthalten.
Das Verhältnis zwischen Toolkit und Plattformfunktionen
Jede CallFactory-Funktion — Telefonmenüs, Anrufwarteschlangen, Voicemail, Voicebots — ist auf den gleichen IVR-Aktionen aufgebaut, die in diesem Toolkit dokumentiert sind. Das Toolkit gibt Ihnen direkten Zugang zu den gleichen Bausteinen.
Das bedeutet, alles, was CallFactory kann, kann Ihr Entwicklungsteam auch — und mehr. Sie können Standard-Funktionen mit benutzerdefinerter Logik kombinieren, Integrationen hinzufügen, die nicht als Standard-Funktionen existieren, und Anrufflüsse erstellen, die völlig einzigartig für Ihr Unternehmen sind.
Erste Schritte
Kontaktieren Sie uns, um Ihre Anforderungen zu besprechen. Wir bieten Ihrem Team Zugriff auf die Toolkit-Dokumentation, Code-Beispiele und eine Entwicklungsumgebung. Wenn Sie Hilfe beim Entwerfen Ihres ersten Anrufflusses benötigen, kann unser Team Sie in Bezug auf Architektur und Best Practices beraten.
Für Unternehmen, die maximale Kapazität und Isolierung benötigen, ist der natürliche Upgrade-Pfad dedizierte IVR-Server — eine vollständig private Umgebung, in der Ihre benutzerdefinierten Anrufflüsse auf einer exklusiv für Sie reservierten Infrastruktur ausgeführt werden.
Erfahren Sie mehr über andere Funktionen
Finden Sie weitere Informationen über unsere Funktionen, die Ihre Geschäftskommunikation verbessern.
IVR-Toolkit - Häufig gestellte Fragen
Erhalten Sie klare Antworten zum IVR-Toolkit und wie es für Ihr Unternehmen funktioniert.
Ja. Das Toolkit wurde für Entwicklungsteams entworfen, die Backend-Code schreiben. Jede Aktion hat eine klare Signatur und typisierte Rückgabewerte. Wenn Sie keine Entwickler haben, erwägen Sie stattdessen unsere individuelle Telefonie oder Voicebot-Optionen.
Das Toolkit verwendet C# (.NET) als primäre Sprache. Alle Aktionen, Signaturen und Beispiele in der Dokumentation sind in C#.
Ja. Die StartStream-Aktion öffnet eine Real-Time-WebSocket-Verbindung zu jedem Endpunkt — einen KI-Assistenten, eine Spracherkennungs-Engine oder Ihren eigenen Dienst. Sie kontrollieren die Audio-Richtung und können den Stream jederzeit stoppen.
Ja. Alle IVR-Aktionen funktionieren mit Ihren bestehenden CallFactory-Nummern und Weiterleitung. Es sind keine Änderungen an Ihrem Telefon-Setup erforderlich.
Ja. Das Toolkit verwendet die gleichen Bausteine wie alle CallFactory-Funktionen. Sie können Standard-Funktionen wie Telefonmenüs und Anrufwarteschlangen neben Ihrer benutzerdefinierten Logik verwenden.
Jede Aktion unterstützt Abbruch-Tokens. Wenn der Anrufer auflegt, wird das Token abgebrochen und Ihr Code erhält ein klares Signal zum Stoppen. Keine verwaisten Verbindungen oder ungeklärten Zustände.
Ja. Unser Team kann Sie in Bezug auf Architektur beraten, Ihr Fluss-Design überprüfen und Sie bei komplexeren Integrationen unterstützen. Für vollständig verwaltete Lösungen siehe unsere Dienste für individuelle Telefonie und Voicebots.
Das Toolkit selbst ist für CallFactory-Kunden verfügbar. Je nach Komplexität Ihrer Implementierung und Hosting-Anforderungen können zusätzliche Gebühren anfallen. Wir besprechen die Preisgestaltung, bevor mit irgendeiner Arbeit begonnen wird.









