Webhook avanzado de Number Insight

A partir del 4 de febrero de 2027, Vonage dejará de ofrecer el servicio «Vonage Number Insights». Para garantizar una asistencia ininterrumpida y ofrecer una solución más escalable y preparada para el futuro, le recomendamos que migre a nuestra oferta mejorada: API de información de identidad de Vonage. La API «Vonage Identity Insights» agrupa varios conjuntos de datos relacionados con números de teléfono en una única API flexible, lo que te permite solicitar información en tiempo real sobre un número de teléfono y obtener cualquier combinación de datos —como el formato del número, los detalles del operador, el cambio de tarjeta SIM y la coincidencia de abonados— en una sola llamada.

Por favor, revise el Guía de transición Number Insightsque ofrece información detallada sobre las diferencias entre las API, los cambios necesarios y las mejores prácticas para una transición sin problemas.

Este fragmento de código muestra cómo codificar el controlador de webhook que recibe los datos devueltos por una llamada asíncrona a la API avanzada de Number Insight. Consulte el Number Insight Avanzado para aprender a codificar la solicitud inicial de los datos de insight.

Antes de intentar ejecutar los ejemplos de código, sustituye los marcadores de posición de las variables:

ClaveDescripción
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.

Requisitos previos

npm install @vonage/server-sdk

Crea un archivo llamado ni-advanced-async.js y añade el siguiente código:

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

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

Ver fuente completa

Escriba el código

Añada lo siguiente a ni-advanced-async.js:

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

Ver fuente completa

Ejecute su código

Guarde este archivo en su máquina y ejecútelo:

node ni-advanced-async.js

Requisitos previos

Añada lo siguiente a build.gradle:

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

Escriba el código

Añada lo siguiente al método main del archivo 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)

Ver fuente completa

Ejecute su código

Podemos utilizar el plugin aplicación para Gradle para simplificar la ejecución de nuestra aplicación. Actualiza tu build.gradle con lo siguiente:

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

Ejecute el siguiente comando gradle para ejecutar su aplicación, sustituyendo com.vonage.quickstart.kt.numberinsight por el paquete que contiene AdvancedInsightWebhook:

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

Requisitos previos

Añada lo siguiente a build.gradle:

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

Escriba el código

Añada lo siguiente al método main del archivo 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 "";
});

Ver fuente completa

Ejecute su código

Podemos utilizar el plugin aplicación para Gradle para simplificar la ejecución de nuestra aplicación. Actualiza tu build.gradle con lo siguiente:

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

Ejecute el siguiente comando gradle para ejecutar su aplicación, sustituyendo com.vonage.quickstart.insight por el paquete que contiene AsyncInsightTrigger:

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

Requisitos previos

Install-Package Vonage

Crea un archivo llamado NumberInsightsController.cs y añade el siguiente código:

using Vonage.Utility;
using System;

Ver fuente completa

Escriba el código

Añada lo siguiente a 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();
        }
    }
}

Ver fuente completa

Requisitos previos

composer require vonage/client

Escriba el código

Añada lo siguiente a 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);
};

Ver fuente completa

Ejecute su código

Guarde este archivo en su máquina y ejecútelo:

php index.php

Requisitos previos

pip install fastapi[standard]

Escriba el código

Añada lo siguiente a 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)

Ver fuente completa

Ejecute su código

Guarde este archivo en su máquina y ejecútelo:

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

Requisitos previos

gem install sinatra sinatra/multi-route json

Escriba el código

Añada lo siguiente a 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

Ver fuente completa

Ejecute su código

Guarde este archivo en su máquina y ejecútelo:

ruby ni-advanced-async.rb

La respuesta de la API contiene los siguientes datos:

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

Para obtener una descripción de cada campo devuelto y ver todos los valores posibles, consulte la página Documentación de la Number Insight API