Number Insight Advanced Webhook
This code snippet shows you how to code the webhook handler that receives the data returned by an asynchronous call to the Number Insight Advanced API. See the Number Insight Advanced code snippet to learn how to code the initial request for the insight data.
Before attempting to run the code examples, replace the variable placeholders:
| Key | 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. |
Prerequisites
npm install @vonage/server-sdkCreate a file named ni-advanced-async.js and add the following code:
const { Vonage } = require('@vonage/server-sdk');
const vonage = new Vonage({
apiKey: VONAGE_API_KEY,
apiSecret: VONAGE_API_SECRET,
});Write the code
Add the following to ni-advanced-async.js:
vonage.numberInsight.asyncAdvancedLookup(
INSIGHT_NUMBER,
INSIGHT_CALLBACK_URL,
)
.then((result) => console.log(result))
.catch((error) => console.error(error));Run your code
Save this file to your machine and run it:
Prerequisites
Add the following to build.gradle:
implementation 'com.vonage:server-sdk-kotlin:2.1.1'
implementation 'io.ktor:ktor-server-netty'
implementation 'io.ktor:ktor-serialization-jackson'Write the code
Add the following to the main method of the AdvancedInsightWebhook file:
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)Run your code
We can use the application plugin for Gradle to simplify the running of our application. Update your build.gradle with the following:
apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''Run the following gradle command to execute your application, replacing com.vonage.quickstart.kt.numberinsight with the package containing AdvancedInsightWebhook:
Prerequisites
Add the following to build.gradle:
implementation 'com.vonage:server-sdk:9.3.1'
implementation 'com.sparkjava:spark-core:2.9.4'Write the code
Add the following to the main method of the AsyncInsightTrigger file:
port(3000);
Spark.post("/webhooks/insight", (req, res) -> {
AdvancedInsightResponse response = Jsonable.fromJson(req.body());
System.out.println("Country: " + response.getCountryName());
res.status(204);
return "";
});Run your code
We can use the application plugin for Gradle to simplify the running of our application. Update your build.gradle with the following:
apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''Run the following gradle command to execute your application, replacing com.vonage.quickstart.insight with the package containing AsyncInsightTrigger:
Prerequisites
Install-Package VonageCreate a file named NumberInsightsController.cs and add the following code:
using Vonage.Utility;
using System;Write the code
Add the following to 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();
}
}
}Prerequisites
composer require vonage/clientRun your code
Save this file to your machine and run it:
Prerequisites
pip install fastapi[standard]Write the code
Add the following to 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)Run your code
Save this file to your machine and run it:
Prerequisites
gem install sinatra sinatra/multi-route jsonRun your code
Save this file to your machine and run it:
The response from the API contains the following data:
{
"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" }
}
For a description of each returned field and to see all possible values, see the Number Insights API documentation