https://d226lax1qjow5r.cloudfront.net/blog/blogposts/migration-guide-for-net-sdk-v7-0-0/net_sdk_updates.png

Guía de migración para .NET SDK v7.0.0

Publicado el April 9, 2024

Tiempo de lectura: 4 minutos

Hola amigos,

Nuestro SDK .NET ha recibido recientemente una nueva versión importante v7.0.0 ¡ya está disponible!

Al tratarse de una versión mayor, es posible que encuentre efectos secundarios al actualizar a esta versión. De eso trata esta entrada del blog: de ayudarte a identificar y solucionar esos problemas.

El objetivo general de esta versión es dar soporte a las nuevas funciones que requerían un cambio de última hora y empezar a despejar el código base.

Requisitos previos

Esta guía de migración se aplica cuando se migra desde v6.X.X - Si todavía está en v5.X.X, le recomendamos encarecidamente que actualice a v6.16.0 utilizando la guía de migración guía de migración.

Pasos de la migración

Se ha eliminado todo lo marcado con la anotación "obsoleto".

Al actualizar a una versión más reciente, es posible que haya notado una advertencia que le indica que está utilizando un método obsoleto. De hecho, hemos marcado estos cambios con una etiqueta Obsolete etiqueta.

Tenga en cuenta que siempre hay un sustituto cuando desmantelamos algo.

Métodos sincrónicos

Hasta ahora, muchas funciones están disponibles tanto con implementación síncrona como asíncrona. Todos los métodos síncronos se han eliminado en v7.0.0. Si aún necesitas llamar a una API de Vonage en un contexto sincrónico, tendrás que llamar a la versión asincrónica con .Result o .Wait() para esperar el resultado de forma sincrónica.

// Using v6.X.X
applicationClient.DeleteApplication(applicationId);

// Using v7.X.X and above
await applicationClient.DeleteApplicationAsync(applicationId);
// Or
applicationClient.DeleteApplicationAsync(applicationId).Wait();

SubAccounts Características de 'AccountClient

Las funciones de Subaccounts fueron implementadas inicialmente por un colaborador en la plataforma AccountClient cuando el producto aún estaba en fase beta. Con la versión GA, todas las funciones de SubAccounts están disponibles en la versión SubAccountsClientlo que deja obsoletas las funciones anteriores.

// Using v6.X.X
var subAccount = await vonageClient.AccountClient.RetrieveSubAccountAsync(subAccountKey);
// Using v7.X.X and above
var request = GetSubAccountRequest.Parse(subAccountKey);
var subAccount = await vonageClient.SubAccountClient.GetSubAccountAsync(request);

CreateApplicaitonAsync' en 'ApplicationClient

El método actual contiene un error tipográfico.

// Using v6.X.X
var application = await applicationClient.CreateApplicaitonAsync(request);

// Using v7.X.X and above
var application = await applicationClient.CreateApplicationAsync(request);

'CreateCall' en 'VoiceClient'

Este método ofrece tres firmas diferentes. Sólo la que tiene un parámetro CallCommand para evitar la Obsesión Primitiva y depender de un ValueObject apropiado.

// Using v6.X.X
var callResponse = voiceClient.CreateCallAsync(toNumber, fromNumber, ncco);
var callResponse = voiceClient.CreateCallAsync(toEndpoint, fromNumber, ncco);
var callResponse = voiceClient.CreateCallAsync(callCommand);


// Using v7.X.X and above
var callResponse = voiceClient.CreateCallAsync(callCommand);

Constructores en "Credenciales

La creación de una instancia de Credenciales debe realizarse utilizando un método de fábrica o desde una instancia de Configuration instancia. Los constructores estarán ocultos y el objeto permanecerá inmutable.

Le recomendamos encarecidamente que utilice nuestros métodos de extensión para inicializar dinámicamente Credentials desde su appsettings.json archivo.

// Using v6.X.X
var credentials = new Credentials()
{
    ApiKey = apiKey,
};
var credentials = new Credentials(apiKey, apiSecret);
var credentials = Credentials.FromApiKeyAndSecret(apiKey, apiSecret);
var credentials = Credentials.FromAppIdAndPrivateKey(apiKey, apiSecret);


// Using v7.X.X and above
var credentials = Credentials.FromApiKeyAndSecret(apiKey, apiSecret);
var credentials = Credentials.FromAppIdAndPrivateKey(apiKey, apiSecret);
var credentials = configuration.BuildCredentials();
// Recommended
var credentials = serviceCollection.GetRequiredService<Credentials>();

Acceso a URL de Vonage

Todas las URL se han trasladado a un objeto anidado (VonageUrls) para simplificar la clase Configuration y permitir URL multirregión.

// Using v6.X.X
var url = configuration.NexmoApiUrl;
var url = configuration.RestApiUrl;
var url = configuration.VideoApiUrl;
var url = configuration.EuropeApiUrl;

// Using v7.X.X and above
var url = configuration.VonageUrls.Nexmo;
var url = configuration.VonageUrls.Rest;
var url = configuration.VonageUrls.Video;
var url = configuration.VonageUrls.Get(VonageUrls.Region.EMEA);

Eliminar objeto Webhook 'Input

Este artículo ha quedado obsoleto debido a la nueva funcionalidad multientrada. Por favor, añada los argumentos Dtmf a su acción de entrada y utilice el objeto MultiInput como se recomienda en nuestra documentación.

Eliminar el idioma "portugués" en Meetings API

Esta lengua se ha suprimido en favor del "portugués-brasileño".

// Using v6.X.X
var language = UserInterfaceLanguage.Pt;


// Using v7.X.X and above
var language = UserInterfaceLanguage.PtBr;

Eliminar 'VoiceName' de 'TalkCommand' y 'TalkAction' en Voice

Este parámetro ha quedado obsoleto por los campos de idioma y estilo.

Añadir Nuevos Tiempos de Espera en Webhooks de Voz en API de Aplicaciones

Añadir nuevos tiempos de espera solicitados (connection_timeout, socket_timeout) en los webhooks de Voice. Creación de una estructura específica, diferente de otros webhooks, necesaria para romper la Capability herencia.

Cambiar el nombre de la clave de configuración de "appSettings" a "vonage".

Para que los ajustes sean más explícitos y reducir las posibilidades de conflicto con otras bibliotecas, se ha actualizado la clave base.

Además, se ha eliminado "Vonage" de todas las teclas para despejar la sección. Por último, se ha cambiado completamente el nombre de algunas teclas:

Old Key New Key
Vonage.Vonage_key Api.Key
Vonage.Vonage_secret Api.Secret
Vonage.Vonage.Url.Api.Europe Url.Api.EMEA
N/A Url.Api.AMER
N/A Url.Api.APAC

Utilizando v6.X.X

{
  "appSettings": {
    "Vonage.UserAgent": "...",
    "Vonage.Url.Rest": "...",
    "Vonage.Url.Api": "...",
    "Vonage.Url.Api.Europe": "...",
    "Vonage.Url.Api.Video": "...",
    "Vonage.Vonage_key": "...",
    "Vonage.Vonage_secret": "...",
    "Vonage.Application.Id": "...",
    "Vonage.Application.Key": "...",
    "Vonage.Security_secret": "...",
    "Vonage.Signing_method": "...",
    "Vonage.RequestsPerSecond": "...",
    "Vonage.RequestTimeout": "..."
  }
}

Utilizando v7.X.X y superior

{
  "vonage": {
    "UserAgent": "...",
    "Url.Rest": "...",
    "Url.Api": "...",
    "Url.Api.EMEA": "...",
    "Url.Api.AMER": "...", 
    "Url.Api.APAC": "...",
    "Url.Api.Video": "...",
    "Api.Key": "...",
    "Api.Secret": "...",
    "Application.Id": "...",
    "Application.Key": "...",
    "Security_secret": "...",
    "Signing_method": "...",
    "RequestsPerSecond": "...",
    "RequestTimeout": "..."
  }
}

Hacer que StartTime sea nulo en Answered Webhook

Tal como se define en las especificacionesel StartTime es ahora anulable.

Eliminar 'EventUrl' y 'EventMethod' de 'ConversationAction'

Tal como se define en las especificacionesla acción Conversation no tiene un EventUrl ni un EventMethod.

Hacer obligatorio el campo "De" en el flujo de trabajo de WhatsApp de VerifyV2

La propiedad From era opcional, ahora es obligatoria.

// Using v6.X.X
var workflow =  WhatsAppWorkflow.Parse(ValidToNumber);
var workflow =  WhatsAppWorkflow.Parse(ValidToNumber, ValidFromNumber);

// Using v7.X.X and above
var workflow =  WhatsAppWorkflow.Parse(ValidToNumber, ValidFromNumber);

Conclusión

La guía de migración también está disponible en nuestro repositorio GitHub.

No dudes en notificar cualquier problema en GitHub o únete a nosotros en Slack para desarrolladores de Vonagey nos pondremos en contacto contigo. También puedes seguirnos en X para estar al tanto de nuestras últimas noticias.

Feliz codificación, ¡y hasta pronto!

Compartir:

https://a.storyblok.com/f/270183/384x384/fdffb72c8b/guillaume-faas.png
Guillaume FaasPromotor senior de desarrollo .Net

Guillaume es desarrollador senior de .Net en Vonage. Ha estado trabajando en .Net durante casi 15 años, mientras que en los últimos años se ha centrado en la defensa de Software Craftsmanship. Sus temas favoritos son la calidad del código, la automatización de pruebas, el mobbing y las katas de código. Fuera del trabajo, le gusta pasar tiempo con su mujer y su hija, hacer ejercicio o jugar.