
Teilen Sie:
Vor langer Zeit, in den dunklen Zeiten vor Google und StackOverflow, lernte Chuck das Programmieren. Das waren die Zeiten, als man sich nur auf die Dokumentation oder den Quellcode stützen konnte. Von den bescheidenen Anfängen als Junior-Full-Stack-Entwickler wuchs Chuck zu dem Entwickler heran, der er heute ist, indem er die Tools entwickelt, mit denen andere Entwickler erstaunliche Produkte erstellen können. Wenn er nicht gerade neue Tools schmiedet, kann man ihn beim Bergsteigen oder auf seinem Fahrrad antreffen.
Aufbau eines Robocaller-Honeypots mit Vonage AI Studio - Teil 1
Lesedauer: 8 Minuten
Vonage AI Studio ist ein Low/No Code Virtual Assistant Builder, der es Entwicklern und Nicht-Entwicklern gleichermaßen ermöglicht, virtuelle Agenten zu entwerfen, zu erstellen und einzusetzen, die mit natürlichem Sprachverständnis arbeiten. Es nutzt Ihr Vonage API-Konto, um Kundenkontakte über Voice-, SMS-, HTTP- und WhatsApp-Kanäle zu erstellen.
Ich habe etwa 15 Minuten damit verbracht, einen Honigtopf für Betrüger zu bauen. Ich bekomme nämlich viele Anrufe von Betrügern, weil ich mich gerne mit ihnen anlege. In letzter Zeit sind jedoch viele Anrufe nur noch Robo-Anrufer, die mich auffordern, die "2" zu drücken und sofort die Verbindung zu beenden (ich bin sicher, dass die Betrüger das tun, um mich zu ärgern). Ich hatte eine Idee: Wie kann ich dieses Ärgernis bekämpfen? Ich rief das Vonage AI Studio auf und machte mich an die Arbeit. Die Anwendungsanforderungen sind einfach:
Wenn ein Anruf von einer Nummer in meinen Kontakten eingeht, lasse ich den Anruf durchgehen.
Wenn sich die Nummer nicht in meinen Kontakten befindet, muss der Anrufer eine Nummer drücken, bevor er sie an mich weiterleitet.
Schließlich trennen Sie den Anruf, wenn die Nummer eine hohe Betrugssicherheit aufweist (mit Vonage Fraud Defender).
Voraussetzungen
Bevor Sie beginnen, vergewissern Sie sich, dass Sie die folgenden Informationen haben:
Node.js installiert. Node.js ist eine quelloffene, plattformübergreifende JavaScript-Laufzeitumgebung.
ngrok - Ein kostenloser Account ist erforderlich. Mit diesem Tool können Entwickler einen lokalen Entwicklungsserver für das Internet freigeben.
Einrichten von Node.js für eingehende Webhooks
Wir werden den Fraud Defender im nächsten Beitrag integrieren. Kümmern wir uns zunächst um die ersten beiden Anforderungen. Wir brauchen eine Möglichkeit zu überprüfen, ob die Nummer in unseren Kontakten enthalten ist. Zu diesem Zweck erstellen wir einen kleinen Express-Server, mit dem wir überprüfen können, ob die Nummer bekannt ist. Beginnen Sie mit einem Kommando/Terminal-Prompt, erstellen Sie ein Arbeitsverzeichnis und initialisieren Sie ein Node.js-Projekt.
Wir bearbeiten die Anfragen mit Express. Installieren mit
Erstellen Sie eine index.js-Datei, instanziieren Sie express und hören Sie den Server an Port 3000 ab. Sie müssen denselben Port beibehalten, da Sie Ihren Ngrok so eingestellt haben, dass er localhost:3000 offenlegt.
import Express from 'express';
import path from 'path';
const app = new Express();
const port = process.env.PORT || 3000;
const catchAsync = (fn) => (req, res, next) => {
fn(req, res, next).catch(next);
};
app.use(Express.json());
Für diese Demo werden wir einfach einige Kontakte wie folgt fest einprogrammieren:
const contactNumbers = [
{phone: '19999999991', record: false},
{phone: '19999999992', record: false},
];Fügen Sie nun den Endpunkt hinzu, um die Nummer mit der Kontaktliste zu vergleichen:
app.post('/contact', catchAsync(async (req, res) => {
const { caller } = req.body;
const contact = contactNumbers.find({phone} => caller);
if (contact) {
res.status(200).json(contact);
return
}
res.status(404).json({record: true});
}));
Vervollständigen Sie den Rest der Express-Einrichtung:
/**
* Setup a 404 handler
*/
app.all('*', (req, res) => {
res.status(404).json({
status: 404,
title: 'Not Found',
});
});
/**
* Setup an error handler
*/
app.use((err, req, res, next) => {
res.status(500).json({
status: 500,
title: 'Internal Server Error',
detail: err.message,
});
});
/**
* Start Express
*/
app.listen(port, () => {
log(`app listening on port ${port}`);
});
Ausführen der Anwendung
Geben Sie an Ihrer Befehls-/Terminal-Eingabeaufforderung Folgendes ein, um die Anwendung auszuführen:
node index.jsEs handelt sich um eine einfache Express-App mit unserem Endpunkt zum Abgleich mit unserer Kontaktliste. Sie haben vielleicht bemerkt, dass wir in der Antwort "record" zurückgeben, womit der Agent mit der Aufzeichnung des Anrufs beginnen wird.
Ngrok ausführen
ngrok ist eine plattformübergreifende Anwendung, die es Entwicklern ermöglicht, einen lokalen Entwicklungsserver mit minimalem Aufwand ins Internet zu stellen. Wir werden es verwenden, um unseren Dienst dem Internet zugänglich zu machen. Sobald Sie ngrok eingerichtet haben und eingeloggt sind (auch hier ist der kostenlose Account akzeptabel), führen Sie den folgenden Befehl aus:
ngrok http 3000Nachdem ngrok ausgeführt wurde, erhalten Sie eine Weiterleitung URL, die wir später in diesem Artikel als Basis für unsere Webhooks verwenden werden. Meine sieht wie die folgende aus:
ngrok running successfully in the command line
Agent-Einrichtung
Lassen Sie uns zunächst die Anwendung einrichten. Sie finden das AI-Dashboard in der linken Navigationsleiste im Dashboard.
Dashboard left hand navigation.
Dort werden wir einen neuen Agenten erstellen. Agenten sind der Hauptantrieb für AI Studio.
Create agent from the Dashboard
Wählen Sie den Typ "Telefonie", um das Ereignis "Telefonanruf" freizuschalten.
Agent creation: Agent type
Geben Sie dem Agenten einen Namen, wählen Sie die gewünschte TTS-Stimme und legen Sie eine Zeitzone fest.
Agent creation: Details form
Wir werden unseren Honeypot von Grund auf neu erstellen, also stellen Sie sicher, dass Sie diese Vorlage auswählen.
Agent creation: Template screen
Als nächstes wählen Sie das Ereignis aus, das unseren Agenten auslösen soll. Für unseren Honeypot wählen wir "eingehender Anruf".
Agent creation: Event screen
Jetzt enthält der Agent einen Startknoten. Knoten sind Aktionen, denen der Agent folgen wird und die Parameter benötigen, um verschiedene Pfade einzuschlagen. Parameter sind Variablen, die mit dem Agenten gespeichert werden. Jeder Agent hat einige systemdefinierte Parameter, die mit der Anrufsitzung definiert sind, und wir müssen zwei benutzerdefinierte Parameter hinzufügen: "START_RECORDING" und "PRESS_42".
Agent builder: parameters
Agentenknoten
Bevor wir den Pfad, den der Agent nehmen wird, verkabeln, fügen wir alle Knoten hinzu, die wir brauchen werden
Webhook-Knoten
Bringen wir unseren Agenten dazu, unsere Express-App aufzurufen. Wir müssen einen neuen Webhook-Knoten hinzufügen (unter "Integrationen") und ihn auf POST an den Ort der Express-App einstellen. Die Einrichtung des Knotens muss eine Post-Anfrage an unsere Express-Anwendung stellen. Wählen Sie die Registerkarte "body" und füllen Sie die folgenden Felder aus:
{
"caller": "$CALLER_PHONE_NUMBER"
}
Webhook node: step one
$CALLER_PHONE_NUMBER ist eine Systemvariable, die der Agent vor dem Absenden der Anfrage ausfüllt. Wir können Daten aus der Antwort auf unsere Parameter abbilden. Verwenden Sie JSONPath, füllen Sie "$.record" aus und ordnen Sie es "$USER.START_RECORDING" zu, etwa so. Fügen Sie einen weiteren Antwortcode für 404 hinzu, nennen Sie ihn "Check Caller", und speichern und beenden Sie.
Webhook node: step two
Eingabeknoten sammeln
Fügen Sie einen neuen Knoten "Eingabe erfassen" hinzu. Wir werden die Antwort unter "USER.PRESS_42" speichern. Fordern Sie den Anrufer über die Registerkarte "Text-to-Speech" auf, 42 einzugeben.
Collect input node step one
Schalten Sie die Antworteingabe auf DTMF um und setzen Sie Max Digits auf 2. Nennen Sie diesen Knoten "Anrufer herausfordern".
Collect input node step two
Bedingung Knoten
Bedingungsknoten ermöglichen es dem Agenten, je nach den eingestellten Parametern verschiedene Wege einzuschlagen. Konditionsknoten prüfen, ob ein Parameter einer Bedingung entspricht. Für jeden Knoten können mehrere Prüfungen durchgeführt werden, für unseren Honeypot werden jedoch zwei benötigt:
Der erste wird verwendet, um zu überprüfen, ob der Anrufer 42 gedrückt hat. Fügen Sie einen Knoten "Bedingungen" hinzu und bearbeiten Sie ihn. Klicken Sie dann im Bearbeitungsdialog auf "Bedingung erstellen". Setzen Sie den Parameter auf PRESS_42, Operation auf "ist gleich", und der Wert sollte 42 sein. Nennen Sie die Bedingung "Anrufer drückte 42" und nennen Sie den Knoten "DTMF prüfen".
Condition node: Check 42
Erinnern Sie sich an den Parameter "Aufnahme" von vorhin? Wenn wir die Aufzeichnung starten wollen, ist eine weitere Bedingung erforderlich. Fügen Sie diesen Knoten hinzu, um zu prüfen, ob "USER.START_RECORDING" gleich "true" ist, und nennen Sie die Bedingung "Aufnahme starten" und den Knoten "Aufnahme prüfen".
Condition node: Start Recording
Knotenpunkte aufzeichnen
Am besten kündigen Sie an, dass der Anruf aufgezeichnet wird, um rechtliche Probleme zu vermeiden. Dafür benötigen wir nur zwei Knoten. Einen "Sprechknoten", der die TTS-Nachricht enthält: "Dieses Gespräch wird aufgezeichnet".
Speak node: Announce recording
Fügen Sie einen Knoten "Aufnahme starten" hinzu (unter dem Abschnitt "Aktionen")
Start recording node
Verbinden Sie den Anruf
Das Verbinden des Anrufs erfordert ein wenig Logik, wenn wir ihn aufzeichnen wollen. Wenn wir den Knoten "Anrufweiterleitung" verwenden, wird der Anruf weitergeleitet und die Aufzeichnung beendet. Fügen Sie dennoch den Knoten "Call Routing" hinzu, wenn Sie den Anruf nicht aufzeichnen wollen, und "NCCOFür das Call Routing müssen Sie Ihre Telefonnummer angeben, aber für NCCO müssen wir Sie konferieren. NCCO verwendet JSON, um zu steuern, was während des Anrufs passiert. Sie können alle Optionen hier sehen. Für den Honeypot fügen Sie Folgendes hinzu:
{
"action": "connect",
// You can get this number from your Vonage dashboard
"from": "<vonage phone number>",
"endpoint": [
{
"type": "phone",
"number": "<your personal phone number>"
}
]
}
NCCO Node
Alles zusammen verdrahten
Da nun alle Knoten eingerichtet sind, müssen wir unsere Pfade definieren, was ziemlich einfach ist. Klicken Sie einfach auf die offenen Kreise an jedem Knoten und ziehen Sie sie zum nächsten Knoten. Lassen Sie uns aufschlüsseln, wie die Pfade verlaufen sollen:
Anrufer überprüfen:
2XX wechselt zu "Aufzeichnung prüfen".
Fehlgeschlagen, und 404 geht an "Anrufer herausfordern".
Anrufer herausfordern:
Die Option wechselt zu "DTMF prüfen".
Keine Eingabe und Verpasst gehen zu einem Knoten "Anruf beenden".
DTMF prüfen:
Der Anrufer drückte 42, um "Aufzeichnung prüfen".
Standardmäßig wird auf "Anrufer herausfordern" zurückgeschaltet.
Aufnahme prüfen:
Aufnahme starten bis "Aufnahme ankündigen"
Standardmäßig auf "Weiterleiten an mich" eingestellt
Sagen wir, die Aufzeichnung geht auf "Aufzeichnung starten", dann auf "Konferenzschaltung" und dann auf "Ablauf beenden".
Weiterleiten an mich:
Ihre Nummer geht zu Exit Flow
Fehlgeschlagen geht an einen anderen End-Call-Knoten
So sollte das Ganze am Ende aussehen:
Agent builder workflow
Der Ablauf für unseren Agenten ist jetzt fertig. Klicken Sie in der linken Navigationsleiste auf den Blitzbolzen für "Ereignisse" und wählen Sie "Eingehender Anruf". Wenn dieser geladen ist, kehren Sie zu den Knoten zurück und fügen Sie einen Knoten "Ablauf" hinzu. Wählen Sie den von uns erstellten Fluss aus. Jetzt müssen wir nur noch auf "Veröffentlichen" klicken, eine Vonage-Telefonnummer zuweisen, und der Agent ist fertig. Jetzt müssen alle eingehenden Anrufe über diesen Honeypot laufen.
Nachbereitung
Wenn Sie Fragen oder Feedback haben, besuchen Sie den Vonage Entwickler-Slack oder senden Sie mir einen Post auf Mastodonund ich werde auf Sie zurückkommen. Nochmals vielen Dank fürs Lesen, und wir sehen uns beim nächsten Mal!
Teilen Sie:
Vor langer Zeit, in den dunklen Zeiten vor Google und StackOverflow, lernte Chuck das Programmieren. Das waren die Zeiten, als man sich nur auf die Dokumentation oder den Quellcode stützen konnte. Von den bescheidenen Anfängen als Junior-Full-Stack-Entwickler wuchs Chuck zu dem Entwickler heran, der er heute ist, indem er die Tools entwickelt, mit denen andere Entwickler erstaunliche Produkte erstellen können. Wenn er nicht gerade neue Tools schmiedet, kann man ihn beim Bergsteigen oder auf seinem Fahrrad antreffen.