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

Création d'un piège à robots avec Vonage AI Studio - Partie 1

Publié le November 9, 2023

Temps de lecture : 8 minutes

Vonage AI Studio est un assistant virtuel à code faible ou nul qui permet aux développeurs et aux non-développeurs de concevoir, de créer et de déployer des agents virtuels qui fonctionnent avec la compréhension du langage naturel. Il utilise votre Account API de Vonage pour créer des engagements clients sur les canaux Voice, SMS, HTTP et WhatsApp.

J'ai passé environ 15 minutes à créer un pot de miel pour les fraudeurs. Je reçois beaucoup d'appels de fraudeurs parce que j'aime bien les embêter. Cependant, ces derniers temps, de nombreux appels ne sont que des appels robotisés me demandant d'appuyer sur "2" et de me déconnecter immédiatement (je suis sûr que les fraudeurs font cela pour m'embêter). J'ai eu une idée : comment puis-je lutter contre ce désagrément ? J'ai consulté Vonage AI Studio et je me suis mis au travail. Les exigences de l'application sont simples :

  • Si un appel provient d'un numéro figurant dans mes contacts, je laisse passer l'appel.

  • Si le numéro ne figure pas dans mes contacts, l'appelant doit appuyer sur un numéro avant de me le transmettre.

  • Enfin, déconnectez l'appel si le numéro présente un niveau de confiance élevé en matière de fraude (à l'aide de Vonage Fraud Defender).

Conditions préalables

Avant de commencer, assurez-vous que vous disposez des éléments suivants :

  • Node.js installé. Node.js est un environnement d'exécution JavaScript open-source et multiplateforme.

  • ngrok - Un Account gratuit est nécessaire. Cet outil permet aux développeurs d'exposer un serveur de développement local à l'Internet.

Configuration de Node.js pour les Webhooks entrants

Nous intégrerons le Fraud Defender dans le prochain article. Pour l'instant, attaquons-nous aux deux premières exigences. Nous avons besoin d'un moyen de vérifier si le numéro est dans nos contacts. Pour ce faire, nous allons créer un petit serveur express qui peut être utilisé pour confirmer que le numéro est connu. Commencez par aller à une invite de commande/terminal, créez un répertoire de travail et initialisez un projet Node.js.

npm init -y

Nous traiterons les demandes avec Express. Installer avec

npm install express --save

Créez un fichier index.js, instanciez express, et écoutez le serveur sur le port 3000. Vous devez garder le même port car vous avez configuré votre ngrok pour exposer localhost:3000.

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());

Pour cette démo, nous allons simplement coder en dur quelques contacts comme suit :

const contactNumbers = [
    {phone: '19999999991', record: false},
    {phone: '19999999992', record: false},
];

Ajoutez maintenant le point d'arrivée pour comparer le numéro à la liste de contacts :

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});
}));

Et compléter le reste de la configuration de l'Express :

/**
 * 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}`);
});

Exécuter l'application

Saisissez les informations suivantes à l'invite de votre commande/terminal pour lancer l'application :

node index.js

Il s'agit simplement d'une application Express classique avec notre point de terminaison pour vérifier notre liste de contacts. Vous avez peut-être remarqué que nous renvoyons "record" dans la réponse, qui sera utilisée pour que l'agent commence à enregistrer l'appel.

Exécuter ngrok

ngrok est une application multiplateforme qui permet aux développeurs d'exposer un serveur de développement local à l'Internet avec un minimum d'effort. Nous l'utiliserons pour exposer notre service à l'Internet. Une fois que vous avez configuré ngrok et que vous êtes connecté (encore une fois, le compte gratuit est acceptable), exécutez la commande suivante :

ngrok http 3000

Une fois que ngrok s'est exécuté, il vous donnera un message de Forwarding que nous utiliserons comme base pour nos Webhooks plus tard dans l'article. La mienne ressemble à ce qui suit :

A screenshot of the terminal running ngrok. Highlighted in the forwarding URL which is an autogenerated https linkngrok running successfully in the command line

Configuration de l'agent

Commençons par configurer l'application. Vous trouverez le tableau de bord AI dans la barre de navigation de gauche, dans le tableau de bord.

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.

Une fois à l'intérieur, nous allons créer un nouvel agent. Les agents sont le principal moteur d'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

Sélectionnez un type de "téléphonie" pour déverrouiller l'événement d'appel téléphonique.

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

Donnez un nom à l'agent, choisissez la voix TTS que vous préférez et choisissez un fuseau horaire.

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

Nous allons construire notre Honeypot à partir de zéro, assurez-vous donc de sélectionner ce modèle.

agent creation screen with multiple options to select a starter template. highlighted is the start from scratch screenAgent creation: Template screen

Ensuite, choisissez l'événement qui va déclencher notre agent. Pour notre Honeypot, nous allons choisir "appel entrant".

the agent event selection screen with various event types to choose from. highlighted is the inbound call eventAgent creation: Event screen

L'agent contient maintenant un nœud de départ. Les nœuds sont des actions que l'agent suivra et qui nécessiteront des paramètres pour emprunter des chemins différents. Les paramètres sont des variables stockées avec l'agent. Chaque agent a des paramètres définis par le système avec la session d'appel, et nous devons ajouter deux paramètres personnalisés : "START_RECORDING" et "PRESS_42".

A screenshot of the agent builder. Highlighted are the parameter node and the add user parameter linkAgent builder: parameters

Nœuds d'agents

Avant de câbler le chemin que prendra l'agent, ajoutons tous les nœuds dont nous aurons besoin

Nœud Webhook

Faisons en sorte que notre agent appelle notre application express. Nous devons ajouter un nouveau nœud Webhook (situé sous "Integrations") et le configurer pour POST à l'emplacement de l'application express. La configuration du nœud va devoir faire une requête post à notre application express. Sélectionnez l'onglet "body" et remplissez les champs suivants :

{
  "caller": "$CALLER_PHONE_NUMBER"
}

the agent builder webhook node configurationWebhook node: step one

$CALLER_PHONE_NUMBER est une variable système que l'agent remplira avant d'envoyer la demande. Nous pouvons faire correspondre les données de la réponse à nos paramètres. En utilisant JSONPath, remplissez "$.record" et associez-le à "$USER.START_RECORDING" comme suit. Ajoutez un code de réponse supplémentaire pour 404, nommez-le "Check Caller", puis enregistrez et quittez.

the agent builder webhook node configurationWebhook node: step two

Collecter le nœud d'entrée

Ajouter un nouveau nœud "Collect Input". Nous allons enregistrer la réponse à "USER.PRESS_42". Invitez l'appelant à saisir 42 à l'aide de l'onglet de synthèse vocale.

collection input node configurationCollect input node step one

Passez l'entrée de réponse en DTMF et réglez le nombre maximum de chiffres à 2. Nommez ce nœud "Défier l'appelant".

collection input node configurationCollect input node step two

Nœuds de condition

Les nœuds de condition permettent à l'agent d'emprunter différents chemins en fonction des paramètres définis. Les nœuds de condition vérifient si un paramètre correspond à une condition. Chaque nœud peut faire l'objet de plusieurs vérifications, mais deux sont nécessaires dans le cas de notre pot de miel :

La première est utilisée pour vérifier que l'appelant a appuyé sur 42. Ajoutez un nœud "Conditions" et modifiez-le. Cliquez ensuite sur "create condition" dans la boîte de dialogue d'édition. Réglez le paramètre sur notre PRESS_42, l'opération sur "est égal à" et la valeur doit être 42. Nommez la condition "L'appelant a appuyé sur 42" et nommez le nœud "Vérifier DTMF".

condition node configurationCondition node: Check 42

Vous vous souvenez du paramètre "record" de tout à l'heure ? Si nous voulons démarrer l'enregistrement, une autre condition est nécessaire. Allez-y et ajoutez ce nœud pour vérifier si "USER.START_RECORDING" est égal à "true" et nommez la condition "Start Recording" et le nœud "Check Recording".

condition node configurationCondition node: Start Recording

Nœuds d'enregistrement

Il est préférable d'annoncer que l'appel est enregistré afin d'éviter tout problème juridique. Pour ce faire, nous n'avons besoin que de deux nœuds. Un "nœud de parole" qui contient le message TTS : "Cet appel est enregistré".

announce recording nodeSpeak node: Announce recording

Ajouter un nœud "Démarrer l'enregistrement" (situé dans la section "Actions")

start recording nodeStart recording node

Connecter l'appel

La connexion de l'appel nécessite un peu de logique si nous voulons enregistrer. Si nous utilisons le nœud "Acheminement des appels", l'appel sera transféré, ce qui mettra fin à l'enregistrement. Néanmoins, ajoutez le nœud "Routage d'appel" pour les cas où nous ne voulons pas enregistrer et "NCCOVous devez ajouter votre numéro de téléphone pour le routage des appels, mais pour NCCO, nous devons vous donner une conférence. NCCO utilise JSON pour contrôler ce qui se passe dans l'appel. Vous pouvez voir toutes les options ici. Pour le Honeypot, ajoutez les éléments suivants :

{
  "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

Câbler le tout

Maintenant que tous les nœuds sont en place, nous définissons nos chemins, ce qui est assez simple. Il suffit de cliquer sur les cercles ouverts de chaque nœud et de les faire glisser jusqu'au nœud suivant. Voyons comment les chemins doivent se dérouler :

  • Vérifier l'appelant :

    • 2XX va à "Vérifier l'enregistrement"

    • Échec, et 404 va à "Défier l'appelant".

  • Défi à l'appelant :

    • L'option passe à "Vérifier DTMF".

    • No Input et Missed vont vers un nœud "End call" (Fin d'appel)

  • Vérifier DTMF :

    • L'appelant a appuyé sur 42 pour "Vérifier l'enregistrement".

    • La valeur par défaut revient à "Défier l'appelant".

  • Vérifier l'enregistrement :

    • Lancer l'enregistrement vers "Annoncer l'enregistrement"

    • Par défaut : "Transmettre à moi"

  • Disons que l'enregistrement va jusqu'à Démarrer l'enregistrement, puis "Conférence", et enfin Quitter le flux.

  • Transmettez-moi :

    • votre numéro va au flux de sortie

    • L'échec est transmis à un autre nœud de fin d'appel

Il devrait ressembler à ceci après tout ce qui a été dit et fait :

a screen shot of the agent builder with all the nodes connectedAgent builder workflow

Le flux pour notre agent est prêt. Dans la barre de navigation de gauche, cliquez sur l'éclair pour "events" et sélectionnez "Inbound call" (appel entrant). Une fois que cela est chargé, retournez aux nœuds et ajoutez un nœud "Flow" (flux). Sélectionnez le flux que nous avons créé. Il ne nous reste plus qu'à cliquer sur publier, attribuer un numéro de téléphone Vonage, et l'agent est prêt. Maintenant, tous les appels entrants doivent passer par ce Honeypot.

Synthèse

Si vous avez des questions ou des commentaires, rejoignez-nous sur le Slack des développeurs de Vonage ou envoyez-moi un message sur Mastodonet je vous répondrai. Merci encore d'avoir lu, et je vous donne rendez-vous au prochain numéro !

Partager:

https://a.storyblok.com/f/270183/400x400/5003a9e2e2/chuck-reeves.png
Chuck ReevesDéveloppeur JavaScript senior Advocate

Il y a longtemps, à l'âge des ténèbres, avant Google et StackOverflow, Chuck a appris à programmer. C'était l'époque où tout ce que vous aviez à faire était la documentation ou le code source lui-même. Après des débuts modestes en tant que développeur Jr Full Stack, Chuck est devenu le développeur qu'il est aujourd'hui, construisant des outils qui permettent à ses collègues développeurs de créer des produits étonnants. Lorsqu'il n'est pas en train de créer de nouveaux outils, vous pouvez le trouver en train d'escalader une montagne ou sur son vélo.