Voice Journey
In diesem Leitfaden werden Sie das folgende Contact Center-Szenario implementieren:
- Der Benutzer ruft Ihre Vonage-Nummer an,
- Die Begrüßung wird vorgelesen, und der Benutzer wählt eine Option aus dem angebotenen Menü,
- Der Benutzer ist mit einem Agenten verbunden,
- Nachdem der Agent den Anruf beendet hat, wird der Benutzer zu einer Umfrage zur Kundenzufriedenheit weitergeleitet.
Für ein besseres Verständnis des Flusses, siehe Anruffluss.
Voraussetzungen
Um diesen Leitfaden zu vervollständigen, benötigen Sie:
- A Vonage-Konto,
- Die Vonage CLI installiert und eingerichtet werden,
- ngrok - um Ihren Entwicklungs-Webserver über das Internet für die Server von Vonage zugänglich zu machen,
- Node.JS installiert,
- zwei Telefonanrufgeräte mit zugewiesenen PSTN-Nummern - "Benutzertelefon" und "Agententelefon", z. B. zwei Mobiltelefone oder eine Anwendung mit Anruffunktion wie Vonage Business app.
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.
Schreiben Sie Ihre Antwort Webhook
Wenn Vonage einen eingehenden Anruf auf Ihrer virtuellen Nummer empfängt, stellt es eine Anfrage an Ihre /webhooks/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 zum Abrufen der Benutzer
DTMF-Eingang (Taste gedrückt):
app.get('/webhooks/voice/answer', (request, response) => {
console.log('answer: ', request.query)
const ncco = [{
action: 'talk',
text: 'Thank you for calling Example Inc.! Press 1 to talk to the sales department, press 2 to get technical support.',
bargeIn: true
},
{
action: 'input',
eventUrl: [
`${request.protocol}://${request.get('host')}/webhooks/input`],
type: [ 'dtmf' ],
dtmf: {
maxDigits: 1
}
}
]
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/event', (request, response) => {
console.log('event:', request.body)
response.sendStatus(200);
})
Vonage macht eine POST Anfrage an diesen Endpunkt jedes Mal, wenn sich der Anrufstatus ändert.
Schreiben Sie Ihren Eingabe-Webhook
Die Ergebnisse der DTMF-Eingabe werden an die spezifische URL gesendet, die Sie in der input Aktion: /webhooks/input. Fügen Sie einen Webhook hinzu, um das Ergebnis zu verarbeiten und eine Benutzerinteraktion hinzuzufügen.
Im Falle einer erfolgreichen Erkennung sieht die Nutzlast der Anfrage wie folgt aus:
{
"speech": {
},
"dtmf": {
"digits": "1",
"timed_out": true
},
"from": USER_NUMBER,
"to": VONAGE_NUMBER,
"uuid": "abfd679701d7f810a0a9a44f8e298b33",
"conversation_uuid": "CON-64e6c8ef-91a9-4a21-b664-b00a1f41340f",
"timestamp": "2020-04-17T17:31:53.638Z"
}
Abrufen der Benutzereingaben aus dem dtmf.digits Array, um die ausgewählten Optionen zu ermitteln. Um sowohl den Benutzer als auch den Agenten der entsprechenden Abteilung zu verbinden, erstellen Sie einen ausgehenden Anruf an den Endpunkt des Agenten. In diesem Beispiel können Sie der Einfachheit halber eine Testtelefonnummer verwenden, zum Beispiel Ihre Handynummer. Im wirklichen Leben könnte der Endpunkt eine PSTN-Nummer sein oder SIP-Endpunkt um Ihre bestehende Telefonanlage oder Ihr Contact Center anzuschließen. Es könnte auch ein WebRTC-Client sein, wenn Sie Ihre Contact Center-Lösung von Grund auf neu entwickeln - die Vonage Client SDK bietet alles, was Sie zur Implementierung Ihrer eigenen Contact Center-Agentenanwendung benötigen.
Schließlich sollten beide Anrufe (Legs) in einen Konferenzraum (namens Gespräch). Zu diesem Zweck sollten Sie conversation Aktion mit der gleichen name sowohl für den Benutzeranruf (der eingehende Teil) als auch für den Agentenanruf (der ausgehende Teil). Um den Gesprächsnamen zu generieren, können Sie jede beliebige Methode zur Erzeugung einer eindeutigen ID verwenden, z. B. den aktuellen Zeitstempel.
Als Option können Sie Folgendes verwenden connect Aktion im NCCO, um den Benutzer mit dem Agenten zu verbinden. Der Unterschied besteht darin, dass bei connectwird das Gespräch sofort beendet, wenn einer der Gesprächsteilnehmer auflegt und nur noch eine Seite übrig ist. Es wäre also unmöglich, den Benutzer nach dem Anruf zur Umfrage weiterzuleiten, falls dies in Ihrem Fall nicht erforderlich ist, connect ist eine etwas praktischere Option. Wenn Sie möchten, dass der Benutzer noch verbunden ist, nachdem der Agent den Anruf beendet hat, wählen Sie conversation wie im folgenden Beispiel gezeigt.
Fügen Sie den Code für den Eingabe-Callback hinzu:
app.post('/webhooks/input', (request, response) => {
console.log('input:', request.body)
// generating unique conversation name
var conversationName = 'conversation_' + Date.now()
console.log('conversationName: ', conversationName)
// selecting agent/department endpoint
var departmentId = request.body.dtmf.digits
var department = ''
var departmentNumber = ''
switch (departmentId) {
case '1':
department = 'Sales'
departmentNumber = AGENT_NUMBER
break
case '2':
department = 'Support'
departmentNumber = OTHER_AGENT_NUMBER //you can use the same number for the sample
break
default:
break
}
var ncco = ''
if (department != '') {
// NCCO for the user leg
ncco = [{
action: 'talk',
text: 'Please wait while we connect you to ' + department
}, {
action: 'conversation',
name: conversationName
}
]
// creating the agent leg and moving it to the same conversation
vonage.calls.create({
to: [
{
type: 'phone',
number: departmentNumber
}
],
from: {
type: 'phone',
number: VONAGE_NUMBER
},
ncco: [
{
action: 'conversation',
name: conversationName
}]
}, (error, response) => {
if (error) console.error('outbound error:', error)
if (response) {
console.log('outbound ok')
}
})
} else { // something went wrong, fallback route
ncco = [{
action: 'talk',
text: 'Press 1 to talk to the sales department, press 2 to get technical support.',
bargeIn: true
}, {
action: 'input',
eventUrl: [
`${request.protocol}://${request.get('host')}/webhooks/input`
],
dtmf: {
maxDigits: 1
}
}]
}
response.json(ncco)
})
Umfrage hinzufügen NCCO
Um die Umfrage zur Kundenzufriedenheit am Ende des Anrufs durchzuführen, sollten Sie folgende Schritte durchführen completed Ereignis für das Bein des Agenten. Es wird an demselben Ereignis-Webhook ankommen, daher sollten Sie den Ereignis-Webhook erweitern mit Versetzungsantrag zur Umfrage NCCO. Dazu müssen Sie die Beinamen des Benutzers und des Agenten speichern:
var userLegId = ''
var agentLegId = ''
app.get('/webhooks/answer', (request, response) => {
console.log('answer: ', request.query)
userLegId = request.query.uuid
console.log('userLegId: ', userLegId)
...
app.post('/webhooks/input', (request, response) => {
console.log('input:', request.body)
// creating the agent's leg and moving it to the same conversation
vonage.calls.create({
...
}, (error, response) => {
if (error) console.error('outbound error:', error)
if (response) {
agentLegId = response.uuid
console.log('agentLegId: ', agentLegId)
}
})
} else ...
In einem realen Szenario sollten Sie einen Cache implementieren, um die Paare von Benutzer-/Agentenkennungen zu speichern. Der in diesem Leitfaden gezeigte Beispielcode funktioniert nur bei einem gleichzeitigen Aufruf ordnungsgemäß.
Erweitern Sie Ihren Ereignis-Webhook um eine REST-API-Aktualisierungsaufrufmethode mit Inline-NCCO mit talk und input Aktionen, um das Bein des Benutzers zum Umfrageteil zu bewegen:
app.post('/webhooks/event', (request, response) => {
console.log('event:', request.body)
if (request.body.uuid == agentLegId && request.body.status == 'completed') {
vonage.calls.update(userLegId, {
action: 'transfer',
destination: {
type: 'ncco',
ncco: [ {
action: 'talk',
text: 'Please valuate quality of service by entering a digit, 1 to 5'
},
{
action: 'input',
type: [ 'dtmf' ],
dtmf: {
maxDigits: 1
},
eventUrl: [ `${request.protocol}://${request.get('host')}/webhooks/survey` ]
}
]
}
}, (err, res) => {
if (err) {
console.error('transfer error:', err)
} else {
console.log('transfer ok')
}
})
}
response.sendStatus(200)
})
Schreiben Sie Ihren Umfrage-Webhook
Fügen Sie einen Umfrage-Webhook hinzu, um die Ergebnisse zu drucken:
app.post('/webhooks/survey', (request, response) => {
console.log('survey: ', request.body)
var phone = request.body.from
var date = request.body.timestamp
var score = request.body.dtmf.digits
console.log('[%s] User %s gave %d', date, phone, score)
const ncco = [
{
action: 'talk',
text: 'Thank you, good bye.'
}
]
response.json(ncco)
})
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 vom "Benutzertelefon" aus an und hören Sie sich die Begrüßungsansage an.
Öffnen Sie die Wähltastatur und drücken Sie 1 oder 2.
Beantworten Sie den eingehenden Anruf "Agententelefon".
Legen Sie am Telefon des Agenten auf.
Hören Sie sich die Umfragenachricht an und drücken Sie eine beliebige Taste am ersten Gerät.
Beobachten Sie das Konsolenprotokoll, um das Umfrageergebnis zu sehen.
Fehlersuche
Wenn Sie den Benutzer- und den Agententon nicht hören, liegt das möglicherweise daran, dass die beiden Teile an unterschiedlichen Stellen verarbeitet werden. Sie können dies feststellen, indem Sie verschiedene conversation_uuid_to Werte in der transfer Ereignisse für Benutzer- und Agentenbeine. Um dies zu beheben, versuchen Sie, das SDK so zu konfigurieren, dass ein bestimmtes Datenzentrum verwendet wird, wie im Abschnitt Anleitung zur Fehlersuche:
const options = {
apiHost: 'api-us-1.nexmo.com',
restHost: 'rest-us-1.nexmo.com'
}
const vonage = new Vonage({
apiKey: VONAGE_API_KEY,
apiSecret: VONAGE_API_SECRET
applicationId: VONAGE_APPLICATION_ID,
privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH
}, options)
Schlussfolgerung
Mit der Vonage Voice API können Sie Ihre bestehende Contact Center-Lösung mit IVR von beliebiger logischer Komplexität ausstatten, die nur von Ihrem Zielanwendungsfall abhängt und praktisch unbegrenzt ist. Oder Sie können Ihre eigene Lösung von Grund auf mit der Voice API und Client SDK. Durch den Wechsel zwischen dem geskripteten Teil des Anrufs und dem Live-Gespräch (und zurück) können Sie beliebige Anwendungsfälle für Telefonanrufe kombinieren und ein nahtloses Kundenerlebnis schaffen.
Wie geht es weiter?
- Erfahren Sie mehr über Anruffluss mit der Voice API
- Erfahren Sie, wie Sie ein Anrufmenü (Interactive Voice Response) von Grund auf neu erstellen können, indem Sie unsere Anleitung
- Verbessern Sie das Kundenerlebnis mit Erkennung von Spracheals Alternative oder zusammen mit der DTMF-Eingabe;
- Sehen Sie, wie man Aufzeichnung von Anrufen für zukünftige Referenzen und Analysen nach dem Anruf;
- Erhalten Sie direkten Zugang zu den Medien mit WebSockets für Echtzeit-Analysen und KI-Integration.
- Siehe Vonage AI das Angebot, IVR oder Voice Bot von unseren Experten für Ihren spezifischen Anwendungsfall erstellen zu lassen.