Webhook avançado do Numbers Insight

A partir de 4 de fevereiro de 2027, a Vonage encerrará o serviço Vonage Number Insights. Para garantir um suporte ininterrupto e oferecer uma solução mais escalável e preparada para o futuro, recomendamos que você migre para nossa oferta aprimorada: API do Vonage Identity Insights. A Number Insight API consolida vários conjuntos de dados relacionados a números de telefone em uma única API flexível, permitindo que você solicite informações em tempo real sobre um número de telefone e obtenha qualquer combinação de informações — como formatação do número, detalhes da operadora, troca de SIM e correspondência de assinante — em uma única chamada.

Por favor, verifique o Guia de Transição do Numbers Insights, que oferece orientações detalhadas sobre as diferenças nas APIs, as alterações necessárias e as melhores práticas para uma transição tranquila.

Este trecho de código mostra como programar o manipulador de webhook que recebe os dados retornados por uma chamada assíncrona à Number Insight API. Consulte o Number Insight Avançado trecho de código para aprender a programar a solicitação inicial dos dados de análise.

Antes de tentar executar os exemplos de código, substitua os marcadores de variáveis:

ChaveDescrição
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.

Pré-requisitos

npm install @vonage/server-sdk

Crie um arquivo chamado ` ni-advanced-async.js ` e insira o seguinte código:

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

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

Ver código-fonte completo

Escreva o código

Adicione o seguinte ao arquivo ` ni-advanced-async.js`:

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

Ver código-fonte completo

Execute seu código

Salve este arquivo no seu computador e execute-o:

node ni-advanced-async.js

Pré-requisitos

Adicione o seguinte ao arquivo ` build.gradle`:

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

Escreva o código

Adicione o seguinte ao método ` main ` do arquivo ` 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 código-fonte completo

Execute seu código

Podemos usar o plugin “ aplicativo ” para o Gradle a fim de simplificar a execução do nosso aplicativo. Atualize seu arquivo ` build.gradle ` com o seguinte:

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

Execute o seguinte comando ` gradle ` para rodar seu aplicativo, substituindo ` com.vonage.quickstart.kt.numberinsight ` pelo pacote que contém ` AdvancedInsightWebhook`:

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

Pré-requisitos

Adicione o seguinte ao arquivo ` build.gradle`:

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

Escreva o código

Adicione o seguinte ao método ` main ` do arquivo ` 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 código-fonte completo

Execute seu código

Podemos usar o plugin “ aplicativo ” para o Gradle a fim de simplificar a execução do nosso aplicativo. Atualize seu arquivo ` build.gradle ` com o seguinte:

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

Execute o seguinte comando ` gradle ` para rodar seu aplicativo, substituindo ` com.vonage.quickstart.insight ` pelo pacote que contém ` AsyncInsightTrigger`:

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

Pré-requisitos

Install-Package Vonage

Crie um arquivo chamado ` NumberInsightsController.cs ` e insira o seguinte código:

using Vonage.Utility;
using System;

Ver código-fonte completo

Escreva o código

Adicione o seguinte ao arquivo ` 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 código-fonte completo

Pré-requisitos

composer require vonage/client

Escreva o código

Adicione o seguinte ao arquivo ` 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 código-fonte completo

Execute seu código

Salve este arquivo no seu computador e execute-o:

php index.php

Pré-requisitos

pip install fastapi[standard]

Escreva o código

Adicione o seguinte ao arquivo ` 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 código-fonte completo

Execute seu código

Salve este arquivo no seu computador e execute-o:

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

Pré-requisitos

gem install sinatra sinatra/multi-route json

Escreva o código

Adicione o seguinte ao arquivo ` 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 código-fonte completo

Execute seu código

Salve este arquivo no seu computador e execute-o:

ruby ni-advanced-async.rb

A resposta da API contém os seguintes dados:

{
    "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 obter uma descrição de cada campo retornado e ver todos os valores possíveis, consulte o Documentação da Number Insight API