
Compartilhar:
Guillaume é um ex-membro da equipe da Vonage. Ele atuou como Promotor Sênior de Desenvolvimento .NET na Vonage. Trabalha com .NET há quase 15 anos, tendo se dedicado, nos últimos anos, à promoção do Software Craftsmanship. Seus temas favoritos incluem qualidade de código, automação de testes, mobbing e code katas. Fora do trabalho, ele gosta de passar tempo com a esposa e a filha, malhar ou jogar videogame.
Guia de migração para o .NET SDK v7.0.0
Olá, amigos,
Nosso SDK do .NET recebeu recentemente uma nova versão principal — v7.0.0 já está disponível!
Por se tratar de uma grande atualização, você pode encontrar alguns problemas durante a atualização para esta versão. É exatamente disso que trata esta postagem no blog: ajudar você a identificar e resolver esses problemas.
O objetivo geral desta versão é oferecer suporte a novos recursos que exigiram uma mudança compatibilidade e começar a simplificar a base de código.
Pré-requisitos
Este guia de migração se aplica à migração da versão v6.X.X — Se você ainda estiver na versão v5.X.X, recomendamos fortemente que atualize para v6.16.0 primeiro, usando o guia de migração.
Etapas da migração
Tudo o que estava marcado com a anotação “Obsoleto” foi removido
Ao atualizar para uma versão mais recente, você talvez tenha notado um aviso indicando que está usando um método obsoleto. De fato, marcamos essas alterações com uma Obsolete tag.
Observe que sempre há um substituto quando retiramos algo de serviço.
Métodos síncronos
Até o momento, muitos recursos estão disponíveis tanto na implementação síncrona quanto na assíncrona. Todos os métodos síncronos foram removidos na versão v7.0.0. Caso ainda seja necessário chamar uma API da Vonage em um contexto síncrono, você deverá chamar a versão assíncrona usando .Result ou .Wait() para aguardar o resultado de forma síncrona.
// Using v6.X.X
applicationClient.DeleteApplication(applicationId);
// Using v7.X.X and above
await applicationClient.DeleteApplicationAsync(applicationId);
// Or
applicationClient.DeleteApplicationAsync(applicationId).Wait(); Subaccounts features on 'AccountClient'
Os recursos do Subaccounts foram inicialmente implementados por um colaborador no AccountClient enquanto o produto ainda estava em fase beta. Com o lançamento da versão GA, todos os recursos dos Subaccounts estão disponíveis no SubAccountsClient, o que torna os recursos anteriores obsoletos.
// 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); 'CreateApplicationAsync' em 'ApplicationClient'
O método atual contém um erro de digitação.
// Using v6.X.X
var application = await applicationClient.CreateApplicaitonAsync(request);
// Using v7.X.X and above
var application = await applicationClient.CreateApplicationAsync(request); 'CreateCall' no 'VoiceClient'
Esse método oferece três assinaturas diferentes. Apenas aquela com um CallCommand parâmetro permanecerá, para evitar a “obsessão por primitivas” e utilizar um ValueObject adequado.
// 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); Construtores em “Credenciais”
A criação de uma instância de Credentials deve ser feita por meio de um método de fábrica ou a partir de uma Configuration instância. Os construtores ficarão ocultos, e o objeto permanecerá imutável.
Recomendamos vivamente que você utilize nossos métodos de extensão para inicializar dinamicamente Credentials a partir do seu appsettings.json arquivo.
// 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>(); Acesso aos URLs da Vonage
Todas as URLs foram transferidas para um objeto aninhado (VonageUrls) para simplificar a Configuration classe e permitir URLs multirregionais.
// 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); Remover o objeto do webhook 'Input'
Este item ficou obsoleto devido à nova funcionalidade de entradas múltiplas. Adicione os Dtmf argumentos à sua ação de entrada e use o MultiInput objeto, conforme recomendado em nossa documentação.
Remover o idioma “português” da Meetings API
Esse idioma foi removido e substituído por “português-brasileiro”.
// Using v6.X.X
var language = UserInterfaceLanguage.Pt;
// Using v7.X.X and above
var language = UserInterfaceLanguage.PtBr; Remova “VoiceName” de “TalkCommand” e “TalkAction” em Voice
Este parâmetro foi declarado obsoleto pelos campos de idioma e estilo.
Adicionar novos tempos limite aos webhooks de voz na API do aplicativo
Solicitação para adicionar novos tempos limite (connection_timeout, socket_timeout) nos Webhooks de Voice. A criação de uma estrutura específica, diferente da de outros webhooks, foi necessária para quebrar a Capability herança.
Renomear a chave de configurações de “appSettings” para “vonage”
A fim de tornar as configurações mais explícitas e reduzir as chances de conflito com outras bibliotecas, a chave base foi atualizada.
Além disso, “Vonage” foi removido de todas as chaves para simplificar a seção. Por fim, algumas chaves foram completamente renomeadas:
| 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 |
Usando a versão 6.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": "..."
}
}Usando a versão 7.X.X e superiores
{
"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": "..."
}
} Tornar StartTime nulo no webhook “Answered”
Conforme definido nas especificações, o StartTime agora é nulo.
Remova 'EventUrl' e 'EventMethod' de 'ConversationAction'
Conforme definido nas especificações, a Conversation ação não possui um EventUrl nem um EventMethod.
Tornar o campo “De” obrigatório no fluxo de trabalho do VerifyV2 no WhatsApp
A From propriedade costumava ser opcional — agora é obrigatória.
// 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); Conclusão
O guia de migração também está disponível em nosso repositório do GitHub.
Não hesite em relatar qualquer problema no GitHub ou junte-se a nós no Slack dos desenvolvedores da Vonage, e entraremos em contato com você. Você também pode nos seguir no X para ficar por dentro das últimas novidades.
Boa programação e até breve!
Compartilhar:
Guillaume é um ex-membro da equipe da Vonage. Ele atuou como Promotor Sênior de Desenvolvimento .NET na Vonage. Trabalha com .NET há quase 15 anos, tendo se dedicado, nos últimos anos, à promoção do Software Craftsmanship. Seus temas favoritos incluem qualidade de código, automação de testes, mobbing e code katas. Fora do trabalho, ele gosta de passar tempo com a esposa e a filha, malhar ou jogar videogame.