Erweiterte IVR
In dieser Anleitung erstellen Sie einen Bot, der einen eingehenden Telefonanruf beantwortet. Der Bot wird nach Ihrem Standort fragen und Ihnen die die aktuellen Wetterbedingungen mitteilen. Sie implementieren dies mithilfe der express Web Anwendungsrahmen, Weatherstack API und Vonage Automatische Spracherkennung (ASR) Funktion.
Voraussetzungen
Um diesen Leitfaden zu vervollständigen, benötigen Sie:
- A Vonage-Konto
- Die Vonage CLI installiert und eingerichtet
- ngrok - um Ihren Entwicklungs-Webserver über das Internet für die Server von Vonage zugänglich zu machen
- Node.JS installiert
Installieren Sie die Abhängigkeiten
Installieren Sie die express Web Application Framework und body-parser Pakete:
Erstellen einer Sprachanwendung
Verwenden Sie die CLI, um eine Voice API-Anwendung mit dem
Webhaken der für die Beantwortung eines Anrufs
Anruf auf Ihrer Vonage-Nummer (/webhooks/voice/answer) und die Protokollierung von Anrufereignissen (/webhooks/voice/event), beziehungsweise.
Diese Webhooks müssen von den Vonage-Servern aus zugänglich sein, daher werden Sie in dieser Anleitung die ngrok um Ihre lokale Entwicklungsumgebung
Entwicklungsumgebung mit dem öffentlichen Internet zu verbinden. Dieser Artikel erklärt, wie man installiert
und ausführen ngrok und konfigurieren Sie Vonage für das Senden von Anfragen.
Wenn Sie noch keine Anwendung haben, können Sie eine mit Hilfe der CLI erstellen
vonage apps create 'Your application'
✅ Creating Application
Saving private key ... Done!
Application created
Name: Your application
Application ID: 00000000-0000-0000-0000-000000000000
Improve AI: Off
Private/Public Key: Set
Capabilities:
None Enabled
vonage apps create 'Your application'
✅ Creating Application
Saving private key ... Done!
Application created
Name: Your application
Application ID: 00000000-0000-0000-0000-000000000000
Improve AI: Off
Private/Public Key: Set
Capabilities:
None Enabled
Der Befehl gibt eine Anwendungs-ID zurück (die Sie sich notieren sollten) und Ihre privaten Schlüsselinformationen (die Sie für die Zwecke dieses Leitfadens getrost ignorieren können).
ausführen. ngrok mit dem folgenden Befehl:
Notieren Sie sich den temporären Hostnamen, den ngrok zur Verfügung stellt, und verwenden Sie es anstelle von example.com in folgendem
Befehl:
vonage apps capabilities update 00000000-0000-0000-0000-000000000000 voice `
--voice-answer-url='https://example.com/webhooks/voice/answer' `
--voice-event-url='https://example.com/webhooks/voice/event' `
--voice-fallback-url='https://example.com/webhooks/voice/fallback'
✅ Fetching Application
✅ Adding voice capability to application 00000000-0000-0000-0000-000000000000
Name: Your application
Application ID: 00000000-0000-0000-0000-000000000000
Improve AI: Off
Private/Public Key: Set
Capabilities:
VOICE:
Uses Signed callbacks: On
Conversation TTL: 41 hours
Leg Persistence Time: 6 days
Event URL: [POST] https://example.com/webhooks/voice/event
Answer URL: [POST] https://example.com/webhooks/voice/answer
Fallback URL: [POST] https://example.com/webhooks/voice/fallback
vonage apps capabilities update 00000000-0000-0000-0000-000000000000 voice ^
--voice-answer-url='https://example.com/webhooks/voice/answer' ^
--voice-event-url='https://example.com/webhooks/voice/event' ^
--voice-fallback-url='https://example.com/webhooks/voice/fallback'
✅ Fetching Application
✅ Adding voice capability to application 00000000-0000-0000-0000-000000000000
Name: Your application
Application ID: 00000000-0000-0000-0000-000000000000
Improve AI: Off
Private/Public Key: Set
Capabilities:
VOICE:
Uses Signed callbacks: On
Conversation TTL: 41 hours
Leg Persistence Time: 6 days
Event URL: [POST] https://example.com/webhooks/voice/event
Answer URL: [POST] https://example.com/webhooks/voice/answer
Fallback URL: [POST] https://example.com/webhooks/voice/fallback
Eine Telefonnummer kaufen
Um eingehende Anrufe zu Ihrer Anwendung zu bearbeiten, benötigen Sie eine Number von Vonage. Wenn Sie bereits eine Nummer haben, die Sie verwenden möchten, springen Sie zum nächsten Abschnitt, um die vorhandene Nummer mit Ihrer Anwendung zu verknüpfen.
Sie können die Vonage CLI um die Rufnummer zu kaufen:
Suche nach einer Number
Sie können eine Nummer über die Vonage CLI erwerben. Der folgende Befehl sucht nach einer gekauften Nummer (geben Sie einen alternativen zweistelligen Ländercode zum Kauf einer Nummer in einem anderen Land).
vonage numbers search US
✅ Searching for numbers
There is 1 number available for purchase in United States
Number Type Features Monthly Cost Setup Cost
----------- ------ --------------- ------------ ----------
16127779311 Mobile MMS, SMS, VOICE €0.90 €0.00
Use vonage numbers buy to purchase.
vonage numbers search US
✅ Searching for numbers
There is 1 number available for purchase in United States
Number Type Features Monthly Cost Setup Cost
----------- ------ --------------- ------------ ----------
16127779311 Mobile MMS, SMS, VOICE €0.90 €0.00
Use vonage numbers buy to purchase.
Eine Nummer kaufen
Wenn Sie eine Nummer gefunden haben, mit der Sie zufrieden sind, können Sie diese über die vonage numbers buy Befehl:
vonage numbers buy US 16127779311
✅ Searching for numbers
Are you sure you want to purchase the number 16127779311 for €0.90? [y/n] y
✅ Purchasing number
Number 16127779311 purchased
Number: 16127779311
Country: 🇺🇸 United States
Type: Mobile
Features: MMS, SMS, VOICE
Monthly Cost: €0.90
Setup Cost: €0.00
Linked Application ID: Not linked to any application
Voice Callback: Not Set
Voice Callback Value: Not Set
Voice Status Callback: Not Set
vonage numbers buy US 16127779311
✅ Searching for numbers
Are you sure you want to purchase the number 16127779311 for €0.90? [y/n] y
✅ Purchasing number
Number 16127779311 purchased
Number: 16127779311
Country: 🇺🇸 United States
Type: Mobile
Features: MMS, SMS, VOICE
Monthly Cost: €0.90
Setup Cost: €0.00
Linked Application ID: Not linked to any application
Voice Callback: Not Set
Voice Callback Value: Not Set
Voice Status Callback: Not Set
Jetzt können Sie den Code für Ihre Anwendung schreiben.
Weatherstack Account anmelden
In dieser Anleitung werden Sie Weatherstack API verwenden, um Wetterinformationen zu erhalten. Um eine Anfrage zu stellen, müssen Sie sich einschreiben für einen kostenlosen Account, um den API-Schlüssel zu erhalten.
Schreiben Sie Ihre Antwort Webhook
Wenn Vonage einen eingehenden Anruf auf Ihrer virtuellen Nummer empfängt, stellt es eine Anfrage an Ihre /webhooks/voice/answer
Route. Diese Route sollte ein HTTP GET Anfrage und geben eine
Nexmo Call Control Objekt (NCCO) die Vonage mitteilt, wie der Anruf behandelt werden soll.
Ihr NCCO sollte die talk Aktion zur Begrüßung des Anrufers und die input Aktion, um mit dem Zuhören zu beginnen:
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const http = require('http')
app.use(bodyParser.json())
app.get('/webhooks/voice/answer', (request, response) => {
const ncco = [{
action: 'talk',
text: 'Thank you for calling Weather Bot! Where are you from?'
},
{
action: 'input',
eventUrl: [
`${request.protocol}://${request.get('host')}/webhooks/asr`],
type: [ "speech" ]
},
{
action: 'talk',
text: 'Sorry, I don\'t hear you'
}
]
response.json(ncco)
})
Schreiben Sie Ihren Ereignis-Webhook
Implementieren Sie einen Webhook, der Anrufereignisse erfasst, so dass Sie den Lebenszyklus des Anrufs in der Konsole beobachten können:
app.post('/webhooks/voice/events', (request, response) => {
console.log(request.body)
response.sendStatus(200);
})
Vonage macht eine POST Anfrage an diesen Endpunkt jedes Mal, wenn sich der Anrufstatus ändert.
Schreiben Sie Ihren ASR-Webhook
Die Ergebnisse der Spracherkennung werden an die spezifische URL gesendet, die Sie in der Eingabeaktion festgelegt haben: /webhooks/asr. Fügen Sie einen
Webhook, um das Ergebnis zu verarbeiten und eine Benutzerinteraktion hinzuzufügen.
Im Falle einer erfolgreichen Erkennung sieht die Nutzlast der Anfrage wie folgt aus:
{
"speech": {
"timeout_reason": "end_on_silence_timeout",
"results": [
{
"confidence": 0.78097206,
"text": "New York"
}
]
},
"dtmf": {
"digits": null,
"timed_out": false
},
"from": "442039834429",
"to": "442039061207",
"uuid": "abfd679701d7f810a0a9a44f8e298b33",
"conversation_uuid": "CON-64e6c8ef-91a9-4a21-b664-b00a1f41340f",
"timestamp": "2020-04-17T17:31:53.638Z"
}
Sie können die confidence Element der speech.results Array für die weitere Analyse. Um die Daten zu den Wetterbedingungen zu erhalten, machen Sie eine HTTP GET Anfrage an die folgende URL:
Hier, access_key ist Ihr Weatherstack-API-Schlüssel und query ist der Ort, den der Benutzer gesagt hat (oder zumindest
was man von ihm erwartet). Weatherstack liefert eine Menge interessanter Daten im Antwortkörper:
{
"request": {
"type": "City",
"query": "New York, United States of America",
"language": "en",
"unit": "m"
},
"location": {
"name": "New York",
"country": "United States of America",
"region": "New York",
"lat": "40.714",
"lon": "-74.006",
"timezone_id": "America/New_York",
"localtime": "2020-04-17 13:33",
"localtime_epoch": 1587130380,
"utc_offset": "-4.0"
},
"current": {
"observation_time": "05:33 PM",
"temperature": 9,
"weather_code": 113,
"weather_icons": [
"http://cdn.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0001_sunny.png"
],
"weather_descriptions": [
"Sunny"
],
"wind_speed": 15,
"wind_degree": 250,
"wind_dir": "WSW",
"pressure": 1024,
"precip": 0,
"humidity": 28,
"cloudcover": 0,
"feelslike": 7,
"uv_index": 5,
"visibility": 16,
"is_day": "yes"
}
}
In der Anwendung werden Sie Parameter wie description ("Sunny") und temperature. Es wäre schön, eine Wettervorhersage
Wettervorhersage als die aktuelle Temperatur zu erhalten, aber da der kostenlose Weatherstack Account nur die current
Bedingungen - das ist es, was Sie verwenden werden.
Sobald Sie die Antwort von Weatherstack erhalten haben, müssen Sie ein neues NCCO mit der Gesprächsaktion "Heute in New York: es ist sonnig, 9 Grad Celsius".
Der folgende Code zeigt, wie Sie den ASR-Callback behandeln und Ihren NCCO zurückgeben:
app.post('/webhooks/asr', (request, response) => {
console.log(request.body)
if (request.body.speech.results) {
const city = request.body.speech.results[0].text
http.get(
'http://api.weatherstack.com/current?access_key=WEATHERSTACK_API_KEY&query=' +
city, (weatherResponse) => {
let data = '';
weatherResponse.on('data', (chunk) => {
data += chunk;
});
weatherResponse.on('end', () => {
const weather = JSON.parse(data);
console.log(weather);
let location = weather.location.name
let description = weather.current.weather_descriptions[0]
let temperature = weather.current.temperature
console.log("Location: " + location)
console.log("Description: " + description)
console.log("Temperature: " + temperature)
const ncco = [{
action: 'talk',
text: `Today in ${location}: it's ${description}, ${temperature}°C`
}]
response.json(ncco)
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
} else {
const ncco = [{
action: 'talk',
text: `Sorry I don't understand you.`
}]
response.json(ncco)
}
})
Sie könnten dem Bot eine zusätzliche Logik hinzufügen, z. B. um die Temperatur in Fahrenheit umzurechnen, wenn der angegebene Ort in den den USA liegt. Fügen Sie dazu dieses Codeschnipsel hinzu, bevor Sie den NCCO erstellen:
if (weather.location.country == 'United States of America') {
temperature = Math.round((temperature * 9 / 5) + 32) + '°F'
} else {
temperature = temperature + '°C'
}
und vergessen Sie nicht, das Grad-Symbol aus dem Nachrichtentext zu entfernen, da es nun in den temperature variabler Wert:
text: `Today in ${location}: it's ${description}, ${temperature}`
Erstellen Sie Ihren Node.js-Server
Schreiben Sie schließlich den Code, um Ihren Node.js-Server zu instanziieren:
const port = 3000
app.listen(port, () => console.log(`Listening on port ${port}`))
Testen Sie Ihre Anwendung
- Führen Sie Ihre Node.js-Anwendung aus, indem Sie den folgenden Befehl ausführen:
Rufen Sie Ihre Vonage-Nummer an und hören Sie sich die Begrüßungsansage an.
Sagen Sie den Namen Ihrer Stadt.
Hören Sie sich Ihre aktuellen Wetterbedingungen an.
Schlussfolgerung
In diesem Handbuch haben Sie eine Anwendung erstellt, die die Voice API verwendet, um mit einem Anrufer zu interagieren, indem sie ihm eine Frage stellt und mit einer Sprachnachricht antwortet.
Der von Ihnen erstellte Bot war in der Lage, dem Anrufer zuzuhören und mit einigen relevanten Informationen zu antworten. Sie können ihn als Basis für Ihre IVR- oder Kundenselbstbedienungsanwendung verwenden, indem Sie eine entsprechende Geschäftslogik für Ihren Fall und die die von Ihnen verwendeten Dienste.
Wie Sie sehen, ist die automatische Spracherkennung (ASR) eine mühelose Möglichkeit, einen Sprachbot im Dialogstil oder IVR ( Interactive Voice Response)/IVA (Interactive Voice Assistant) schnell zu implementieren. Wenn Sie mehr Flexibilität oder fast Echtzeit-Interaktion benötigen Echtzeit-Interaktion benötigen, probieren Sie unser WebSockets Funktion, die extrem leistungsfähig ist und kann einige sehr anspruchsvolle Anwendungsfälle ermöglichen, wie z. B. künstliche Intelligenz, Analyse und Transkription von Audioanrufen.
Wie geht es weiter?
Hier sind einige weitere Vorschläge für Ressourcen, die Sie als nächsten Schritt nach diesem Leitfaden nutzen könnten:
- Erfahren Sie mehr über Spracherkennung Funktion.
- Lassen Sie den Bot natürlicher klingen, indem Sie Anpassen von Text-to-Speech Nachrichten mit SSML.
- Finden Sie heraus, wie Sie die Rohdaten erhalten und zurücksenden können durch WebSocket Verbindung.
- Erfahren Sie mehr über die Vonage CLI