https://d226lax1qjow5r.cloudfront.net/blog/blogposts/building-a-robocaller-honeypot-with-vonage-ai-studio/scammer-honeypot.png

Aufbau eines Robocaller-Honeypots mit Vonage AI Studio - Teil 1

Zuletzt aktualisiert am November 9, 2023

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.

npm init -y

Wir bearbeiten die Anfragen mit Express. Installieren mit

npm install express --save

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.js

Es 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 3000

Nachdem 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:

A screenshot of the terminal running ngrok. Highlighted in the forwarding URL which is an autogenerated https linkngrok 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.

The left-hand navigation in the Vonage developer dashboard. It contains various links to help with your Vonage application. The link for AI studio is highlighted Dashboard left hand navigation.

Dort werden wir einen neuen Agenten erstellen. Agenten sind der Hauptantrieb für AI Studio.

a screen capture of the AI studio dashboard. There are links at the top for agents, reports, and users. Under the navigation bar, there is a button to create a new agentCreate agent from the Dashboard

Wählen Sie den Typ "Telefonie", um das Ereignis "Telefonanruf" freizuschalten.

the agent creation screen with multiple types. highlighted is the telephony optionAgent creation: Agent type

Geben Sie dem Agenten einen Namen, wählen Sie die gewünschte TTS-Stimme und legen Sie eine Zeitzone fest.

the agent details forms with the fields to configure the applicationAgent creation: Details form

Wir werden unseren Honeypot von Grund auf neu erstellen, also stellen Sie sicher, dass Sie diese Vorlage auswählen.

agent creation screen with multiple options to select a starter template. highlighted is the start from scratch screenAgent 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".

the agent event selection screen with various event types to choose from. highlighted is the inbound call eventAgent 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".

A screenshot of the agent builder. Highlighted are the parameter node and the add user parameter linkAgent 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"
}

the agent builder webhook node configurationWebhook 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.

the agent builder webhook node configurationWebhook 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.

collection input node configurationCollect input node step one

Schalten Sie die Antworteingabe auf DTMF um und setzen Sie Max Digits auf 2. Nennen Sie diesen Knoten "Anrufer herausfordern".

collection input node configurationCollect 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 configurationCondition 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 configurationCondition 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".

announce recording nodeSpeak node: Announce recording

Fügen Sie einen Knoten "Aufnahme starten" hinzu (unter dem Abschnitt "Aktionen")

start recording nodeStart 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 configuration nodeNCCO 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:

a screen shot of the agent builder with all the nodes connectedAgent 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:

https://a.storyblok.com/f/270183/400x400/5003a9e2e2/chuck-reeves.png
Chuck ReevesSr JavaScript-Entwickler Advocate

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.