Numbers Insight Webhook avancé

À compter du 4 février 2027, Vonage mettra fin à Vonage Number Insights. Afin d'assurer un soutien ininterrompu et de fournir une solution plus évolutive et à l'épreuve du temps, nous vous encourageons à migrer vers notre offre améliorée : Vonage Identity Insights API. L'API Identity Insights de Vonage consolide plusieurs ensembles de données liées aux numéros de téléphone en une seule API flexible, vous permettant de demander des informations en temps réel sur un numéro de téléphone et de récupérer toute combinaison d'informations - telles que le formatage du numéro, les détails de l'opérateur, le SIM Swap et le Subscriber Match - en un seul appel.

Veuillez consulter le Guide de transition de Numbers Insightsqui fournit des conseils détaillés sur les différences entre les API, les changements nécessaires et les meilleures pratiques pour une transition en douceur.

Cet extrait de code vous montre comment coder le gestionnaire de webhook qui reçoit les données renvoyées par un appel asynchrone à l'API avancée de Number Insight. Voir l'extrait de code Numbers Insight Advanced pour apprendre à coder la requête initiale pour les données d'insight.

Avant d'essayer d'exécuter les exemples de code, remplacez les caractères de remplacement des variables :

CléDescription
VONAGE_API_KEY

Your Vonage API key (see it on your dashboard).

VONAGE_API_SECRET

Your Vonage API secret (also available on your dashboard).

INSIGHT_NUMBER

The number you want to retrieve insight information for.

Conditions préalables

npm install @vonage/server-sdk

Créez un fichier nommé ni-advanced-async.js et ajoutez le code suivant :

const { Vonage } = require('@vonage/server-sdk');

const vonage = new Vonage({
  apiKey: VONAGE_API_KEY,
  apiSecret: VONAGE_API_SECRET,
});

Voir la source complète

Rédiger le code

Ajouter ce qui suit à ni-advanced-async.js:

vonage.numberInsight.asyncAdvancedLookup(
  INSIGHT_NUMBER,
  INSIGHT_CALLBACK_URL,
)
  .then((result) => console.log(result))
  .catch((error) => console.error(error));

Voir la source complète

Exécutez votre code

Enregistrez ce fichier sur votre machine et exécutez-le :

node ni-advanced-async.js

Conditions préalables

Ajouter ce qui suit à build.gradle:

implementation 'com.vonage:server-sdk-kotlin:2.1.1'
implementation 'io.ktor:ktor-server-netty'
implementation 'io.ktor:ktor-serialization-jackson'

Rédiger le code

Ajouter ce qui suit à la méthode main du fichier AdvancedInsightWebhook:

embeddedServer(Netty, port = 8000) {
    routing {
        post ("/webhooks/insight") {
            val insightDetails = Jsonable.fromJson(call.receive(), AdvancedInsightResponse::class.java)
            println(insightDetails)
            call.respond(204)
        }
    }
}.start(wait = true)

Voir la source complète

Exécutez votre code

Nous pouvons utiliser le plugin application pour Gradle afin de simplifier l'exécution de notre application. Mettez à jour votre build.gradle avec ce qui suit :

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Lancez la commande suivante gradle pour exécuter votre application, en remplaçant com.vonage.quickstart.kt.numberinsight par le paquet contenant AdvancedInsightWebhook:

gradle run -Pmain=com.vonage.quickstart.kt.numberinsight.AdvancedInsightWebhook

Conditions préalables

Ajouter ce qui suit à build.gradle:

implementation 'com.vonage:server-sdk:9.3.1'
implementation 'com.sparkjava:spark-core:2.9.4'

Rédiger le code

Ajouter ce qui suit à la méthode main du fichier AsyncInsightTrigger:

port(3000);
Spark.post("/webhooks/insight", (req, res) -> {
    AdvancedInsightResponse response = Jsonable.fromJson(req.body());
    System.out.println("Country: " + response.getCountryName());

    res.status(204);
    return "";
});

Voir la source complète

Exécutez votre code

Nous pouvons utiliser le plugin application pour Gradle afin de simplifier l'exécution de notre application. Mettez à jour votre build.gradle avec ce qui suit :

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Lancez la commande suivante gradle pour exécuter votre application, en remplaçant com.vonage.quickstart.insight par le paquet contenant AsyncInsightTrigger:

gradle run -Pmain=com.vonage.quickstart.insight.AsyncInsightTrigger

Conditions préalables

Install-Package Vonage

Créez un fichier nommé NumberInsightsController.cs et ajoutez le code suivant :

using Vonage.Utility;
using System;

Voir la source complète

Rédiger le code

Ajouter ce qui suit à NumberInsightsController.cs:

            var insights = await WebhookParser.ParseWebhookAsync<AdvancedInsightsResponse>
                (Request.Body, Request.ContentType);
            Console.WriteLine($"Advanced insights received: {insights.RequestId} " +
                $"that number's carrier is {insights.CurrentCarrier.Name} " +
                $"and it's ported status is: {insights.Ported}");
            return NoContent();
        }
    }
}

Voir la source complète

Conditions préalables

composer require vonage/client

Rédiger le code

Ajouter ce qui suit à index.php:

$handler = function (Request $request, Response $response) {
    $params = $request->getParsedBody();

    error_log($params['status_message']);
    error_log($params['country_code']);
    error_log($params['current_carrier']['name']);

    return $response->withStatus(204);
};

Voir la source complète

Exécutez votre code

Enregistrez ce fichier sur votre machine et exécutez-le :

php index.php

Conditions préalables

pip install fastapi[standard]

Rédiger le code

Ajouter ce qui suit à main.py:

from fastapi import FastAPI, Request

app = FastAPI()


@app.post('/webhooks/insight')
async def display_advanced_number_insight_info(request: Request):
    data = await request.json()
    print(data)

Voir la source complète

Exécutez votre code

Enregistrez ce fichier sur votre machine et exécutez-le :

fastapi dev number-insight/async-callback/main.py

Conditions préalables

gem install sinatra sinatra/multi-route json

Rédiger le code

Ajouter ce qui suit à ni-advanced-async.rb:

require 'sinatra'
require 'sinatra/multi_route'
require 'json'

helpers do
  def parsed_body
     json? ? JSON.parse(request.body.read) : {}
  end

  def json?
    request.content_type == 'application/json'
  end
end

route :post, '/webhooks/insight' do
  puts params.merge(parsed_body)
  
  status 200
end

set :port, 3000

Voir la source complète

Exécutez votre code

Enregistrez ce fichier sur votre machine et exécutez-le :

ruby ni-advanced-async.rb

La réponse de l'API contient les données suivantes :

{
    "status": 0,
    "status_message": "Success",
    "lookup_outcome": 0,
    "lookup_outcome_message": "Success",
    "request_id": "75fa272e-4743-43f1-995e-a684901222d6",
    "international_format_number": "447700900000",
    "national_format_number": "07700 900000",
    "country_code": "GB",
    "country_code_iso3": "GBR",
    "country_name": "United Kingdom",
    "country_prefix": "44",
    "request_price": "0.03000000",
    "remaining_balance": "10.000000",
    "current_carrier": {
        "network_code": "23420",
        "name": "Hutchison 3G Ltd",
        "country": "GB",
        "network_type": "mobile"
    },
    "original_carrier": {
        "network_code": "23410",
        "name": "Telefonica UK Limited",
        "country": "GB",
        "network_type": "mobile"
    },
    "valid_number": "valid",
    "reachable": "reachable",
    "ported": "ported",
    "roaming": { "status": "not_roaming" }
}

Pour une description de chaque champ renvoyé et pour voir toutes les valeurs possibles, voir la section Documentation de Number Insight API