Voice

Setzen Sie über die Voice API von seven einen Anruf an eine bestimmte Rufnummer ab. In der einfachsten Variante können Sie einen Text angeben, der dann über unser Text-To-Speech (TTS) Gateway beim Empfänger vorgelesen wird. Für erweiterte Anwendungen haben Sie die Möglichkeit, den Text im SSML Format zu senden.

POST/api/voice

Voice Anruf senden

Erstellen Sie einen neuen TTS Anruf an eine Rufnummer.

Parameter

  • Name
    to
    Type
    string
    Description

    Empfängernummer der SMS. Dies kann auch der Name eines Kontakts oder einer Gruppe sein. Unsere API akzeptiert alle gängigen Format wie 0049171123456789, 49171123456789, +49171123456789. Mehrere Empfänger werden kommagetrennt übergeben. Idealerweise geben Sie die Rufnummer im internationalen Format nach E.164 an.

  • Name
    text
    Type
    string
    Description

    Textnachricht, die vorgelesen werden soll. Wahlweise als einfacher Text oder als SSML.

  • Name
    from
    Type
    string
    Optional
    Optional
    Description

    Anruferkennung des Anrufs. Bitte verwenden Sie hier nur verifizierte Absenderkennungen oder eine Ihrer bei uns gebuchten Rufnummern.

  • Name
    ringtime
    Type
    integer
    Optional
    Optional
    Description

    Die Dauer, wie lange es beim Empfänger klingeln soll, bevor aufgelegt wird. Möglich sind hier 5 bis 60 Sekunden.

  • Name
    foreign_id
    Type
    string
    Optional
    Optional
    Description

    Eine eindeutige ID, die Sie für die spätere Zuordnung des Anrufs verwenden können. Diese ID wird in den Webhook-Events übergeben.

  • Name
    xml
    Type
    string
    Veraltet
    Veraltet
    Optional
    Optional
    Description

    Die Verwendung dieser Option wird nicht mehr unterstützt. Bitte entfernen Sie alle Verwendungen dieser Option.

Anfrage

POST
/api/sms
curl -X POST https://gateway.seven.io/api/voice \
  -H "X-Api-Key: IHR_API_SCHLÜSSEL" \
  -H "Accept: application/json" \
  -d "to=49176123456789" \
  -d "text=Hallo Welt!"

Antwort

{
  "success": "100",
  "total_price": 0.045,
  "balance": 3509.236,
  "debug": false,
  "messages": [
    {
      "id": 1384013,
      "sender": "sender",
      "recipient": "49176123456789",
      "text": "Hallo Welt!",
      "price": 0.045,
      "success": true,
      "error": null,
      "error_text": null
    }
  ]
}

POST/api/voice/:call_id/hangup

Anruf beenden

Dieser Endpunkt beendet einen aktiven Anruf. Es können nur Anrufe beendet werden, deren Status in-progress ist.

Pfadparameter

  • Name
    call_id
    Type
    string
    Description

    Die ID des Anrufs, der beendet werden soll.

Anfrage

POST
/api/voice/123456/hangup
curl -X POST https://gateway.seven.io/api/voice/123456/hangup \
  -H "X-Api-Key: IHR_API_SCHLÜSSEL" \
  -H "Accept: application/json"

Antwort

{
  "success": true,
  "error": null
}

SSML

Über die Speech Synthesis Markup Language (SSML) können Sie die Spracherzeugung steuern. Nutzen Sie SSML zum Einspielen von Audiodateien, zur Änderung der Stimme und Sprache, zum Einbauen von Pausen und vieles mehr.

Detaillierte Informationen zur Verwendung von SSML und den möglichen Befehlen können Sie der Dokumentation von Microsoft entnehmen.

Pausen

Möchten Sie etwas mehr Pause an einer bestimmten Stelle? Sie können Pausen beliebig steuern.

Jetzt kommt eine Pause.
<break time="2s" />
Die Pause ist vorbei.

Verschiedene Stimmen

Mit SSML haben Sie die Möglichkeit, verschiedene Stimmen auszuwählen. Sie können das Geschlecht unterschieden nach weiblich (female), männlich (male) oder Kinderstimme (child) einsetzen. Ebenso sind viele internationale Sprachen für z.B. englische Dialekte, Französisch, Arabisch, Asiatisch, Kroatisch oder Russisch verfügbar. Die Kinderstimmen sind nicht in jeder Sprache verfügbar. Für den Voice-Tag wird das Attribut name aus dem Regionskürzel (de-DE, oder en-US) und dem Geschlecht zusammengesetzt. Beispiel "en-us-female".

<voice name="en-gb-female">"Great Britain, whose children we are, and whose language we speak,
should no longer be our standard; for the taste of her writers is already corrupted,
and her language on the decline." -Noah Webster, 1789 </voice>

Sätze und Absätze

Mit den Tags p und s können Sie einen Absatz und die darin enthaltenen Sätze strukturieren.

<p>
  <s>Hello, this is the audio book of the little girl with the red balloon!</s>
  <s>I have them read to me every night to fall asleep.</s>
</p>

Codes und Zahlen

Für Codes empfiehlt sich die Lesung als einzelne Buchstaben und Zeichen. Zahlen können in Ganzzahlen, Einzelziffen und Ordinale unterschieden werden. Im folgenden drei Beispiele dazu aus dem täglichen Gebrauch.

<voice name="de-de-female">
    Der Bestätigungscode lautet:
    <prosody rate="slow">
    <say-as interpret-as="characters">967354</say-as>
    </prosody>
</voice>

Für die Übergabe eines Codes liest man besser Zeichen für Zeichen und etwas verlangsamt vor. Beachten Sie in diesem Beispiel, dass das kleine "p" auch nur als "P" vorgelesen wird. Deshalb trennen wir den Beispielcode "LK9p7U" in zwei say-as-Tags auf:

<voice name="de-de-female">
  Ihr Code lautet:
  <prosody rate="x-slow">
    <say-as interpret-as="characters">LK9</say-as>klein P
    <say-as interpret-as="characters">7U</say-as>
  </prosody>
</voice>

Ganzzahlen synthetisieren wir ohne Tag. Die Sprachsynthese erkennt Geldbeträge automatisch und liest "13,50 Euro" als "13 Euro 50 Cent".

<voice name="de-de-female">
  Die Summe beträgt 13,50 Euro.
</voice>

Für Längen- oder Gewichtsangaben schreiben Sie die Einheiten am besten aus.

<voice name="de-de-female">
  Das Gebäude ist 18 Meter hoch. Der Fisch wiegt 3,5 Kilo.
</voice>

Ausgabe einer Audiodatei

In Ihrem SSML können Sie Audiodateien von beliebiger Quelle abspielen lassen.

<audio src="https://static.seven.io/sample.mp3" />

Sie können die Synthetisierung Ihres Textes und das Abspielen einer externen Mediendatei auch kombinieren.

<voice name="de-de-child">
  Hallo, hör dir das mal an
  <audio src="https://static.seven.io/sample.mp3" />
</voice>

Wiederholung eines Voice-Tags

Für den voice-Tag wird das Attribut loop verwendet, um die Anzahl der Wiederholungen festzulegen. Mit dem optionalen Attribut loop-info können Sie die jeweilige Wiederholung ankündigen.

<voice name="de-de-female" loop="2" loop-info="Ich wiederhole">
    Der Bestätigungscode lautet:
    <say-as interpret-as="characters">5684</say-as>
</voice>

DTMF

DTMF (Dual-Tone Multi-Frequency) ist ein Verfahren zur Übertragung von Ziffern über das Telefonnetz. Es wird auch als Mehrfrequenzwahlverfahren bezeichnet. Mit DTMF können Sie den Empfänger auffordern, eine Taste auf dem Telefon zu drücken. Dies kann z.B. für die Bestätigung einer Buchung oder die Weiterleitung eines Anrufs an eine bestimmte Abteilung verwendet werden. Für die Auswertung von DTMF-Signalen können Sie im SSML das DTMF-Tag einsetzen.

Auswertung DTMF Tastendruck ohne <dtmf/>-Tag

Wird während des Calls eine Nummerntaste gedrückt und sofern der Anruf sich aktuell nicht explizit in einem <dtmf/>-Tag befindet, wird das DTMF-Signal an die in Ihrem Account hinterlegte Webhook-URL übergeben und im Feld "voice-dtmf" angezeigt. Information zum Einrichten von Webhooks finden Sie auf unserer Webhook-Seite.

{
  "webhook_event": "voice_dtmf",
  "webhook_timestamp": "2024-08-02T07:28:59+02:00",
  "data": {
    "id": 0,
    "callerId": "4943160049851",
    "recipient": "4943160049851",
    "status": "completed",
    "system": "4915170517246",
    "timestamp": 1722576539,
    "duration": 2.76,
    "pricePerMinute": 0.045,
    "dtmf_digit": 9,
    "total_price": 0.045
  }
}

Auswertung DTMF Tastendruck mit <dtmf/>-Tag

Bitte geben Sie zwei Zahlen an.

Sie können das <dtmf/>-Tag verwenden, um den Empfänger aufzufordern, eine Taste auf dem Telefon zu drücken. Mit den Attributen min, max und wait können Sie die Anzahl der erwarteten Ziffern, die maximale Anzahl der Ziffern und die Wartezeit in Millisekunden festlegen. Mit dem Attribut invalid können Sie eine benutzerdefinierte Nachricht für eine ungültige Eingabe festlegen. Mit dem Attribut exit können Sie eine benutzerdefinierte Nachricht für das Beenden der Eingabe festlegen. Über das Attribute callback wird die URL für den Webhook festgelegt, an die die DTMF-Eingabe als JSON Payload übermittelt wird. Über das Attribut allowed_digits können Sie die erlaubten Ziffern als regulären Ausdruck festlegen.

Beispiel

<voice name = "de-de-female">
  Hallo, Sie werden nun aufgefordert, zwei Zahlen einzugeben.
  <dtmf 
    callback="https://ihre-url.de/dtmf-callback" 
    allowed_digits="^[0-9#*]+"
    min="3" 
    max="4" 
    wait="5000" 
    invalid="Ungültige Eingabe. Bitte versuchen sie es noch einmal." 
    exit="Danke! Auf Wiederhören">
    Bitte geben Sie zwei Zahlen an.
  </dtmf>
</voice>

Sobald eine gültige Eingabe erfolgt, wird der Webhook mit folgenden Daten an die angegebene URL gesendet, wobei digits die eingegebene Ziffernfolge ist:

{
  "webhook_event": "dtmf",
  "webhook_timestamp": "2024-11-05T10:23:04+01:00",
  "data": {
    "id": "1732712",
    "callerId": "4943130149270",
    "recipient": "49176123456789",
    "foreign_id": "MyForeignId",
    "voice_name": "de-DE-KatjaNeural",
    "digits": "65"
  }
}

Antwort des Webhooks

Sie können nun über die Antwort des Webhooks den weiteren Ablauf des Anrufs steuern und so eine kaskadierte Anrufsteuerung realisieren. Lassen Sie den Webhook beispielsweise eine weitere Ansage abspielen oder den Anruf beenden. Geben Sie dazu einfach die nächste Ansage oder den Befehl zum Beenden des Anrufs als JSON zurück.

Beispielantworten

Beenden Sie den Anruf:

{
  hangup: true
}

Leiten Sie den Anruf weiter:

{
  bridge: "+49431123456789"
}

Spielen Sie eine weitere Ansage ab. Hier können Sie auch wieder beliebiges SSML verwenden:

{
  text: "<voice name=\"de-de-female\">Danke für Ihre Eingabe. Auf Wiederhören.</voice>"
}

Wenn Sie keine oder keine gültige Antwort senden, wird der Anruf automatisch beendet.


Status des Anrufs

Sie erhalten den aktuellen Status des Anrufs sofort bei jeder Änderung per Webhook.

StatusBeschreibung
failedDer Anruf ist fehlgeschlagen
initiatedDer Anruf wurde initiiert.
ringingEs läutet.
in-progressDer Anruf ist aktiv.
busyRufnummer ist besetzt.
rejectedDer Anruf wurde abgelehnt.
no-answerDer Anruf wurde nach der definierten Klingeldauer nicht angenommen.
completedDer Anruf ist abgeschlossen.
Zuletzt aktualisiert: Vor 2 Minuten