• Eigenständig gehostete oder lokal installierte Instanzen sind komplexer in der Einrichtung und Fehlerbehebung und erfordern daher kostenpflichtigen technischen Support. Kostenlosen Support erhalten Sie mit 3CX StartUP oder einer gehosteten 3CX-Installation mit einen unterstützten SIP-Trunk-Anbieter.

CFD Voice Input/ Routing

CISCOX

Basic Certified
Mitglied seit
11. Mai 2023
Beiträge
169
Hallo,

ich habe eine Frage zum 3CX Call Flow Designer. Da die Google Speech to Text nicht wirklich zuverlässig ist, möchte ich nun folgendes im Call Flow erreichen:

Egal welche Worte erkannt wurden, soll das Prompt Playback in jedem Fall erfolgen, sobald der Gesprächsteilnehmer den Satz beendet hat.

Im aktuellen Szenario wartet der CFD 99 Sekunden mit einem Fehlversuch auf die Spracheingabe. Wird also beim ersten Versuch kein Wort erkannt, so wartet der CFD bis zu 99 Sekunden.

- - -

Ich habe auch schon versucht das Timeout für Invalid Input auf 5 Sekunden zu stellen, aber dann wird der Anrufer ohne Spracheingabe direkt nach 5 Sekunden verbunden. Das ist nicht das Ziel des Call Flows. An dieser Stelle sollte der Teilnehmer ein Prompt Playback „Hallo?“ erhalten.

Mein Ziel:

Teilnehmer ruft mich an und der CFD spielt seine Ansage ab und wartet auf das Anliegen des Teilnehmers. Dabei ist es egal, was er sagt, denn es gibt nur eine Extension, bzw. Signalisierungsgruppe. Die Eingabe des Anrufers muss auch nicht verarbeitet werden. Es soll einfach wie ein normales Gespräch klingen, bevor an die Signalisierungsgruppe weitergeleitet wird. Nachdem der Teilnehmer also den Satz beendet hat, erhält er einen Hinweis, dass er weitergeleitet wird.

Wie bekommt man das im Call Flow Designer zusammengebastelt?

Viele Grüße
 
Wie bekommt man das im Call Flow Designer zusammengebastelt?
Praktisch gar nicht. Was du brauchst ist letztendlich eine Funktion, die das Audio des Anrufers bekommt und ab einer gewissen Zeit der Stille die CFA weiterlaufen lässt. Asterisk hat dafür z.B. die spezielle Funktion BackgroundDetect. So ein Äquivalent bekommt man mit dem CFD nicht hin, auch nicht mit C# Code.

Es gibt wohl die Möglichkeit (ich habe es nur aus der Ferne gehört ...), den Audio Stream irgendwie per Netzwerk (API, Socket?) zu verschicken, um z.B. das Prozessing anderswo laufen zu lassen. Damit würde man diesen speziellen Teil der Aufgabe auslagern. Man kann z.B. so einen ext. Chat / andere Automaten / Erkennung anbinden.
 
  • Like
Reaktionen: CISCOX
Hi, danke dir.

Ich habe jetzt einfach als Hints Umlaute und die gängigsten Worte verwendet. Damit funktioniert es recht gut. Aber ich bin mir nicht sicher, ob als ein Hint "Guten Tag" gilt, ich habe sicherheitshalber "guten" "tag" als separat. An sich ist es Wurscht was der Teilnehmer sagt, Hauptsache es wurde erkennt, dass er überhaupt etwas gesagt hat, denn wenn nicht erfolgt ein Exit Callflow (siehe Foto)

Ist es möglich per C Code auszuwählen, welches Prompt Playback erfolgt? Denn ich habe 3 verschiedene Audio Files. Ich will für jede Minute der Uhrzeit ein Prompt Playback ausgeben. Zum Beispiel um 18:22 kommt PromptPlayback2 und um 18:23 kommt PromptPlayback3. Mit einer DateTime Condition ist es möglich, allerdings habe ich "keine Lust" für jede einzelne Stunde, jede einzelne Minute ein Prompt Playback zu erstellen, da dass Design so unübersichtlich wird.

EDIT: Es gibt einen 2. EXIT Callflow, das habe ich nun korrigiert, bzw. entfernt. Das war versehentlich.
 

Anhänge

  • Foto1.png
    Foto1.png
    191,7 KB · Aufrufe: 5
  • Foto2.png
    Foto2.png
    299,3 KB · Aufrufe: 5
Zuletzt bearbeitet:
  • Like
Reaktionen: CISCOX
Das sehe ich, aber ich weiss nicht welche "Audio File Expression" auszuwählen ist. Ich sehe zwar DateTime NOW() aber das macht für mich keinen Sinn, weil wie lege ich fest zu welcher Minutenzeit welche Audio File abgespielt werden soll?

Ich muss ja irgendwo festlegen können xx:01 Uhr = PromptPlayback1 oder xx:02 Uhr = PromptPlayback2
 
z.B. mit REPLACE_REG_EXP(REPLACE_REG_EXP(NOW(),"^.* ..:",""),":.*","")
Dieser Teil gibt immer die akt. Minute zweistellig zurück. Baue das in ein CONCATENATE ein und du hast einen Dateinamen, abhängig von der Minute. Alternativ mit einem CFD Block 'Create a Condition' einzelne Werte abfragen und abhängig davon (z.B. mit CONTAINS) einzelne Dateien abspielen.
Das könnte man da noch vereinfachen, z.B. CONTAINS(NOW(),":23:") ist wahr in Minute 23. Es gibt noch viel mehr Möglichkeiten.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: CISCOX
Ouweia, ich wusste das wird schwierig :D Ich bin kein CFD Profi, also ich erhalte diese Meldung aktuell:


Kannst du mir ein Beispiel geben, das festlegt, dass bei Minute 3 (egal Welche Uhrzeit) das PromptPlayback3 erfolgt?
 

Anhänge

  • Foto3.png
    Foto3.png
    436,3 KB · Aufrufe: 3
CONTAINS(NOW(),":03:")

nachträglicher TIP: NOW() gibt immer die Uhrzeit im Format 15.02.2024 19:01:00 (akt. Beispiel) zurück.

nachträglicher TIP2: Benutze den CFD Baustein Logger, stelle das Aktivitätenprotokoll nicht zu hoch ein (nicht mehr als Mittel), setze das Level des Loggers auf Error (damit das auch immer schön ausgegeben wird), bastle beliebigen Text da rein (gern auch mit CONCATENATE mehrere hintereinander) und überwache die Ausgabe des CFD Blocks in einer Shell mittels tail -f /var/lib/3cxpbx/Instance1/Data/Logs/3CXCallFlow.log. Dort findest du dann die Ausgaben dieses Bausteins.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: mbehrens und CISCOX
Das wurde ignoriert und springt direkt auf DateTimeCondition, das ist in "Freizeichen" umbenannt habe:
 

Anhänge

  • Foto4.png
    Foto4.png
    230,5 KB · Aufrufe: 3
  • Like
Reaktionen: CISCOX
Ja und im anderen Branch hatte ich :02 eingestellt.

Ich denke das hier war ein Beispiel:

REPLACE_REG_EXP(REPLACE_REG_EXP(NOW(),"^.* ..:",""),":.*","") und CONTAINS(NOW(),":03:")

Ich denke ich muss das aber irgendwie kombinieren.
 
Überprüfe die Zeit der 3CX. Benutze den Logger.
 
  • Like
Reaktionen: CISCOX
Ich denke das hier war ein Beispiel:

REPLACE_REG_EXP(REPLACE_REG_EXP(NOW(),"^.* ..:",""),":.*","")

Ich denke ich muss das aber irgendwie kombinieren.
Wenn du den CFD Baustein Create Condition verwendest, reicht ein CONTAINS(NOW(),":??:") (das ?? ersetzen) in jedem Zweig.

Wenn du dynamische Variablen bauen willst (s.o., dynamisch generierte Dateinamen), dann verwende CONCATENATE und REPLACE_REG_EXP(REPLACE_REG_EXP(NOW(),"^.* ..:",""),":.*","").
 
  • Like
Reaktionen: CISCOX
So sagt der IVR aber "Fehler"
 

Anhänge

  • Foto5.png
    Foto5.png
    305,2 KB · Aufrufe: 3
Ein möglicher Logger Text für dich:
CONCATENATE("********* LOGGER DATE: |",NOW(),"| *REGEX1* |",REPLACE_REG_EXP(NOW(),"^.* ..:",""),"| *REGEX2* |",REPLACE_REG_EXP(NOW(),":.*$",""),"| *REGEX3* |",REPLACE_REG_EXP(REPLACE_REG_EXP(NOW(),"^.* ..:",""),":.*",""),"|")
 
  • Like
Reaktionen: CISCOX
  • Like
Reaktionen: CISCOX
Wo genau füge ich das ein? In die Condition Expression meinst du?
Wenn ich den CFD anrufe, erhalte ich die Ansage "Fehler"
 
Wo genau füge ich das ein? In die Condition Expression meinst du?
Wenn du eine spezielle Minute abfragen willst, dann liefert um 19:25:xx ein CONTAINS(NOW(),":25:") eine Minute lang true und arbeitet diesen Zweig ab.
 
  • Like
Reaktionen: CISCOX
Ups, funktioniert! VIELEN DANK. Ich habe die falsche ZIP Datei hochgeladen, quasi hab ich die Datei bearbeitet, aber das Backup hochgeladen! :D Kann ich auch auf Sekunden gehen? Wie würde dann CONTAINS(NOW(),":34:") aussehen?
 
Wie würde dann CONTAINS(NOW(),":34:") aussehen?
Genau so wie du es schreibst :D
Es liefert zu jeder Stunde und 34 Minuten ein true und arbeitet den entspr. Zweig ab.
Jetzt aber viele LIKE
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
21.358
Beiträge
107.406
Mitglieder
70.512
Neuestes Mitglied
maxcolo
Holen Sie sich 3CX - völlig kostenlos!

Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX register cta
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.