Upload von Sprachaufnahmen zum Webserver

Die Durchführung der Aufnahme und das anschließende Hochladen auf einen entfernten Webserver kann mit folgendem Dokument realisiert werden:

Beispiel 20.4. aufnahme-1.vxml

<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.0">
<form>
<record name="aufnahme" beep="true">
<prompt>Bitte hinterlassen Sie Ihre Nachricht nach dem Piepton.</prompt>
<filled>
<submit next="aufnahme-2-vxml.php" enctype="multipart/form-data" method=
"post" namelist="aufnahme"/>
</filled>
<catch event="connection.disconnect.hangup">
<submit next="aufnahme-2-vxml.php" enctype="multipart/form-data" method=
"post" namelist="aufnahme"/>
</catch>
</record>
</form>
</vxml>


Das <record>-Element ist wie das <field>-Element ein Eingabeelement innerhalb eines <form>-Elements. Die Angabe eines Namens ist hier notwendig, um die Aufnahme später zum Webserver abschicken zu können und um die empfangenen Daten dort weiterverarbeiten zu können. Darüber hinaus verdienen die folgenden optionalen Attribute Erwähnung:

  • beep (true/false): Wenn dieses Attribut auf "true" gesetzt wird, erzeugt der Voicebrowser einen kurzen Piepton, bevor die Aufnahme beginnt.

  • maxtime: Die Aufnahme endet, wenn der im maxtime-Attribut angegebene Zeitwert überschritten wurde. Zeitwerte müssen in VoiceXML prinzipiell immer mit der richtigen Maßeinheit angegeben werden, z.B. "60s" oder "600ms".

  • finalsilence: Hier kann man angeben, nach wie viel Sekunden Stille die Aufnahme als beendet betrachtet werden soll. Dabei gilt es, einen vernünftigen Mittelwert zu finden. Zu kleine Werte beenden die Aufnahme vielleicht vorzeitig, weil der Anrufer nur mal Luft geholt oder kurz nachgedacht hat. Zu lange Werte spannen die Geduld des Anrufers unnötig auf die Probe, da er nach dem Ende seiner Ansprache keinen Fortschritt wahrnimmt. Die Voicebrowser haben normalerweise einen guten Mittelwert als Defaultwert fest voreingestellt, so dass man dieses Attribut nicht unbedingt setzen muss.[146]

Für das Absenden der Aufnahmedaten werden im obigen Dokument zwei Kriterien definiert:

  1. Der Anrufer sagt nichts mehr oder drückt eine Taste seines Telefons. In diesem Fall kommt das <filled>-Element zum Zug und sendet die aufgenommenen Sprachdaten zum im <submit>-Element angegebenen PHP-Skript.

  2. Der Anrufer legt nach seiner Ansprache auf. Auch in diesem Fall soll die Aufnahme nicht verloren gehen, sondern per <submit> zum Webserver übertragen werden. Man erreicht dies, indem man in einem <catch>-Element das Event "connection.disconnect.hangup" abfängt, welches die VoiceXML-Plattform aussendet, sobald sie das Auflegen des Anrufers erkannt hat.

Man sieht, dass die <submit>-Anweisung für beide Fälle völlig identisch ist. Im next-Attribut wird das empfangende Skript angegeben. Die Sendemethode sollte bei Aufnahmen immer "post", der encoding type immer "multipart/form-data" lauten. Im namelist-Atttribut ist genau der Name einzutragen, der innerhalb des <record>-Elements im name-Attribut angegeben wurde.



[146] Der Anrufer kann die Aufnahme auch durch das Senden eines DTMF-Tons beenden, nur sollte man ihm dies vorher mitteilen.