Cómo migrar de Pricing API v1 a Pricing API v2

Visión general

Esta guía explica cómo migrar de la API de precios v1 a la API de precios v2. La nueva versión de la API de precios incluye cambios en la autenticación, las rutas y las estructuras de respuesta. En esta guía se describen los cambios que debes realizar en tu aplicación para que puedas actualizar tu integración.

Es importante migrar a la API de precios v2 para aprovechar la mayor coherencia, seguridad y flexibilidad que ofrece la nueva API.

Antes de empezar

Antes de iniciar la migración, asegúrate de que:

  • Tienes tu clave y secreto de API de Vonage.
  • Ha revisado esta documentación para comprender las nuevas funciones y capacidades.
  • Dispones de un entorno de pruebas o de desarrollo para probar los cambios antes de implementarlos en producción.

Tenga en cuenta el cambio de URL

La API de precios v2 utiliza una nueva URL base para la API en comparación con la v1.

  1. En su aplicación, cambie la URL base y la ruta de https://rest.nexmo.com/account/get-pricing/outbound/ a https://api.nexmo.com/v2/account/pricing/

    // Example using the old route
    const apiKey = 'vonage_api_key'; // Replace with your API Key
    const apiSecret = 'vonage_api_secret'; // Replace with your API Secret
    const product = 'sms'; // Example product
    const country = 'CA'; // Example country code
    
    const url = `https://rest.nexmo.com/account/get-pricing/outbound/${product}?api_key=${apiKey}&api_secret=${apiSecret}&country=${country}`;
    
    // Example using the new route
    const apiKey = 'vonage_api_key'; // Replace with your API Key
    const apiSecret = 'vonage_api_secret'; // Replace with your API Secret
    const product = 'sms-outbound'; // Example product
    const country = 'CA'; // Example country code
    
    const url = `https://api.nexmo.com/v2/account/pricing/${product}`
    

Seleccione el producto adecuado

La Pricing API v2 sólo admite sms-outbound y voice-outbounden comparación con la Pricing API v1, que admitía sms, sms-transity voice. Tendrás que asegurarte de utilizar el nombre correcto del producto, ya que este puede variar. En la mayoría de los casos sms-transit y sms puede cambiarse a sms-outboundy voice puede cambiarse a voice-outbound.

Migrar a la autenticación mediante encabezado básico

La Pricing API v1 utilizaba la autenticación de parámetros de consulta para validar su solicitud, y la Pricing API v2 utiliza ahora la autenticación básica mediante el parámetro Authorization de cabeza.

  1. Encuentre la solicitud de API en su aplicación actual. Si estás usando Node.js, tus peticiones pueden tener el siguiente aspecto:

    const fetch = require('node-fetch');
    
    const apiKey = 'vonage_api_key'; // Replace with your API Key
    const apiSecret = 'vonage_api_secret'; // Replace with your API Secret
    const product = 'sms'; // Example product
    const country = 'CA'; // Example country code
    
    const url = `https://rest.nexmo.com/account/get-pricing/outbound/${product}?api_key=${apiKey}&api_secret=${apiSecret}&country=${country}`;
    
    fetch(url)
        .then(response => {
            if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
            }
            return response.json();
        })
        .then(data => {
            console.log('Pricing Data:', data);
        })
        .catch(error => {
            console.error('Error fetching pricing data:', error);
        });
    
    const axios = require('axios');
    
    const apiKey = 'vonage_api_key'; // Replace with your API Key
    const apiSecret = 'vonage_api_secret'; // Replace with your API Secret
    const product = 'sms-outbound'; // Example product
    const country = 'CA'; // Example country code
    
    const url = `https://rest.nexmo.com/account/get-pricing/outbound/sms`;
    
    axios
        .get(url, {
            params: {
            api_key: apiKey,
            api_secret: apiSecret,
            country: country,
            },
        })
        .then(response => {
            console.log('Pricing Data:', response.data);
        })
        .catch(error => {
            console.error('Error fetching pricing data:', error.response ? error.response.data : error.message);
        });
    
  2. Retire el api_key y api_secret parámetros y sustituirlos por un Authentication que utiliza la autenticación básica.

    // Example using Node Fetch
    const fetch = require('node-fetch');
    
    const apiKey = 'vonage_api_key'; // Replace with your API Key
    const apiSecret = 'vonage_api_secret'; // Replace with your API Secret
    const product = 'sms-outbound'; // Example product
    const country = 'CA'; // Example country code
    
    const url = `https://api.nexmo.com/v2/account/pricing/${product}?country=${country}`;
    
    fetch(url, {
        method: 'GET',
        headers: {
            Authorization: `Basic ${Buffer.from(`${apiKey}:${apiSecret}`).toString('base64')}`,
        },
    })
        .then(response => {
            if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
            }
            return response.json();
        })
        .then(data => {
            console.log('Pricing Data:', data);
        })
        .catch(error => {
            console.error('Error fetching pricing data:', error);
        });
    
    // Example using Axios
    const axios = require('axios');
    
    const apiKey = 'vonage_api_key'; // Replace with your API Key
    const apiSecret = 'vonage_api_secret'; // Replace with your API Secret
    const product = 'sms-outbound'; // Example product
    const country = 'CA'; // Example country code
    
    const url = `https://api.nexmo.com/v2/account/pricing/${product}`;
    
    axios
        .get(url, {
            auth: {
                username: username,
                password: password,
            },
            params: {
                country: country,
            },
        })
        .then(response => {
            console.log('Pricing Data:', response.data);
        })
        .catch(error => {
            console.error('Error fetching pricing data:', error.response ? error.response.data : error.message);
        });
    

Cambio para procesar la nueva estructura de respuesta

La Pricing API v2 utiliza ahora un JSON-HAL estructura de respuesta para que sea más coherente con otras API de Vonage. Se trata de una estructura de respuesta de la API diferente a la estructura más «plana» de la API de precios v1, pero ofrece algunas ventajas adicionales, como una mejor paginación de los resultados.

  1. Fíjate en el cambio en la ubicación de los datos en la respuesta. La información sobre precios y red se encuentra ahora en el _embedded.countries matriz en lugar de la networks matriz.

    // Pricing API v1 Response
    {
        "countryCode": "CA",
        "countryName": "Canada",
        "countryDisplayName": "Canada",
        "currency": "EUR",
        "defaultPrice": "0.00620000",
        "dialingPrefix": "1",
        "networks": [
            {
                "type": "mobile",
                "price": "0.00590000",
                "currency": "EUR",
                "mcc": "302",
                "mnc": "530",
                "networkCode": "302530",
                "networkName": "Keewaytinook Okimakanak"
            }
        ]
    }
    
    // Pricing API v2 Response
    {
        "page_size": "100",
        "page": "1",
        "total_items": "243",
        "total_pages": "3",
        "_embedded": {
            "countries": [
                {
                    "country_name": "Canada",
                    "dialing_prefix": "1",
                    "dest_network_type": "ALL",
                    "group_internal_start": "1s",
                    "rate_increment": "60",
                    "currency": "USD",
                    "price": "0.1"
                }
            ]
        },
        "_links": {
            "self": {
                "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=1&page_size=100"
            },
            "first": {
                "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=1&page_size=100"
            },
            "last": {
                "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=3&page_size=100"
            },
            "next": {
                "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=2&page_size=100"
            },
            "prev": {
                "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=1&page_size=100"
            }
        }
    }
    
  2. Fíjate en los cambios en los nombres de las claves. Ahora los nombres de las claves utilizan snake_case en lugar de camelCase. Esto cumple con los estándares de API de Vonage y mantiene la coherencia con nuestras otras respuestas de API. Algunas ubicaciones de las claves también han cambiado.

  • countryCode ahora aparece en la URL como el country parámetro de consulta.
  • countryName se encuentra ahora en _embedded.countries[X].country_name.
  • countryDisplayName se encuentra ahora en _embedded.countries[X].country_name.
  • currency se encuentra ahora en _embedded.countries[X].currency.
  • defaultPrice se encuentra ahora en _embedded.countries[X].price.
  • dialingPrefix se encuentra ahora en _embedded.countries[X].dialing_prefix.
  • network[X].type ya no se devuelve.
  • network[X].price se encuentra ahora en _embedded.countries[X].price.
  • network[X].currency se encuentra ahora en _embedded.countries[X].currency.
  • network[X].mcc ya no se devuelve.
  • network[X].mnc ya no se devuelve.
  • network[X].networkCode ya no se devuelve.
  • network[X].networkName ya no se devuelve.
  1. Ahora la respuesta refleja con mayor precisión el paginado. Puedes comparar el page clave con el total_pages para ver si está al final de los resultados, o compruebe la existencia de la tecla _links.next tecla . Si necesita pasar a la página siguiente, puede utilizar la tecla _links.next.href valor para determinar automáticamente la página siguiente y pasar a ella.

Véase también