52
Documentação da API de WebServices NewSkies Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0 Introdução Este documento trás os passos necessários para a implementação de um sistema de criação e modificação de reservas através da utilização da API de WebServices do sistema NewSkies da Navitaire. Os serviços mais comuns estão detalhados neste documento em forma de instruções passo-a-passo, acompanhadas de exemplos de código ilustrando a implementação de cada passo. Os exemplos mostram como implementar as funcionalidades básicas do sistema e também o padrão de desenvolvimento que deve ser adotado na criação das aplicação que utilizam os WebServices do NewSkies. Este documento incluí as seguintes funcionalidades: - Criação de Bookings - Recuperação de Bookings - Modificação de Bookings O diagrama abaixo descreve o fluxo dos WebServices: Os Web Services são descritos por um arquivo WSDL(Web Services Description Language Linguagem de Descrição de Serviços Web) único que é acessado (disponível uma vez que sua conta esteja definida por Operações) através de uma URI como:

Web Services - Guia Do Desenvolvedor v10!2!1

Embed Size (px)

Citation preview

Page 1: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Introdução

Este documento trás os passos necessários para a implementação de um sistema de criação e modificação de

reservas através da utilização da API de WebServices do sistema NewSkies da Navitaire.

Os serviços mais comuns estão detalhados neste documento em forma de instruções passo-a-passo,

acompanhadas de exemplos de código ilustrando a implementação de cada passo. Os exemplos mostram como

implementar as funcionalidades básicas do sistema e também o padrão de desenvolvimento que deve ser adotado na

criação das aplicação que utilizam os WebServices do NewSkies.

Este documento incluí as seguintes funcionalidades:

- Criação de Bookings

- Recuperação de Bookings

- Modificação de Bookings

O diagrama abaixo descreve o fluxo dos WebServices:

Os Web Services são descritos por um arquivo WSDL(Web Services Description Language – Linguagem de Descrição

de Serviços Web) único que é acessado (disponível uma vez que sua conta esteja definida por Operações) através de

uma URI como:

Page 2: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

https://1Lapi.navitaire.com/wsdl/1.3/skychannelAPI.wsdl

Onde: 1L é o código da companhia.

Este endereço provê acesso para os clientes (aplicações que consumirão) dos WebServices.

Este documento não pretende ser uma documentação sobre WebServices, mas sim referencias sobre os serviços

fornecidos pela API do NewSkies.

Os WebServices pretendem ser independentes de plataforma e linguagem de programação, entretanto, tipos char

requerem uma consideração especial. A API representa chars como strings. As strings são preenchidas com o valor

decimal ASCII para o caractere. Por exemplo, um espaço é especificado como uma string contendo o valor “32” que é

o código ASCII para espaço.

FlightDesignator.OpSuffix =' '; // char ' ' é incorreto

FlightDesignator.OpSuffix ="32"; // correto

O padrão básico de uso para a API é instanciar um API Manager Client que agrupa logicamente um conjunto de APIs

para uma área funcional. Por exemplo, o grupo da API BookingManagerClient é quem cria ou modifica PNRs. Para

programadores familiarizados com a Orientação a Objetos, a API Manager Client (referenciado como manager ou

managerClient) é similar a uma classe e todas as APIs são os métodos dessa classe. Acessar uma API é similar a fazer

uma chamada a um método ou função.

Todas APIs do New Skies recebem parâmetros. Estes parâmetros de entrada são coletados solicitando um usuário ou

coletando-o do sistema. Uma vez que os dados são coletados, os parâmetros de uma dada API são preenchidos e a

API é, então, chamada. Estes parâmetros de entrada formam o respectivo objeto de requisição de entrada

necessário para invocar a API. Por exemplo, a Sell API do BookingManagerClient precisa de um objeto SellRequest

como um parâmetro de entrada. O objeto SellRequest agrupa vários dados de entrada em um objeto. Se não

existirem exceções, a API retorna um objeto de resposta o qual contem um agrupamento de dados dos resultados da

operação da API.

Nota: O código de exemplo fornecido neste documento é para C# .Net.

O uso da API segue um padrão. Uma vez que se tenha entendido tal padrão, todo uso da API é similar.

Um client é instanciado para obter acesso à API e parâmetros são preenchidos com os dados necessários. Na maioria

dos casos um objeto de requisição deve ser instanciado a preenchido utilizando as propriedades fornecidas pelo

mesmo. As coleções são mantidas como arrays utilizando as propriedades para preencher os valores de elementos

individuais. A API é invocada e o resultado é processado conforme o necessário.

Nas descrições de tarefa que seguem, uma tarefa é descrita com uma seqüência de passos utilizados para concluí-la.

Alguns passos são opcionais e outros são obrigatórios. Isso está comentado no passo em questão. As tarefas

descritas neste documento incluem os passos necessários para realizar uma tarefa juntamente com partes de código

de exemplo mostrando como executar cada passo.

A tecnologia subjacente é W3C compliant. O protocolo de comunicação dos Web Services do New Skies é através de

mensagens SOAP. Os exemplos mostrados utilizando um cliente .NET permitem abstração das mensagens SOAP

Page 3: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

subjacentes que são serializadas e deserializadas durante a comunicação cliente-servidor. Esta abstração é possível

devido a classe Proxy que o .NET gera do contrato WSDL dos Web Services. Enquanto a Navitaire acessar os

WebServices através de classes Proxy – um cliente não está limitado a esta modalidade de acesso a Web Services que

aderem a interoperabilidade. Todo cliente pretende utilizar Web Services somente o necessário para estabelecer

uma conexão e ter um método para gerar uma requisição SOAP para comunicar com os Web Services. A requisição e

respostas SOAP são descritas no Web Services Programming Reference Guide.

Os exemplos inclusos não pretendem mostrar exaustivamente todas as propriedades e métodos possíveis. A

intenção é demonstrar o suficiente para exibir o padrão de desenvolvimento e como iniciar o uso da API.

Tratando exceções na API de Web Services: Os métodos da API de Web Services lança diferentes tipos de

exceções. O número e o tipo de uma exceção podem variar de release para release, entretanto recomenda-

se que todas as chamadas à API devem estar num bloco try-catch. Se uma exceção é lançada, a aplicação

que fez a chamada a API deve examinar a exceção para determinar qual ação deve ser tomada antes de

prosseguir. Visto que as exceções estão sujeitas a mudança, a lista de exceções não é exaustiva. Contudo,

para alguns métodos algumas exceções comuns, que o cliente deve ter ciência, estão listadas.

Nota: Nesta release do New Skies o sistema não garante todas as configurações dos perfis definidos no Sky

Utilities. É de responsabilidade da aplicação, que está utilizando a API, aplicar as regras estabelecidas para

um perfil. Por exemplo, se um perfil de usuário inclui configurações para “Booking – Contact Information” e o

campo Title é definido como obrigatório, é responsabilidade da aplicação assegurar-se que um título (Title)

seja incluído nos dados do contato na requisição que o inclui.

Nota: Devido as APIs de Web Services do New Skies proverem extensiva funcionalidade, isso dita um

contrato WSDL complexo. É altamente recomendado utilizar uma ferramenta de geração de Proxy

automatizada para estabelecer uma base para aumentar clientes que consomem as APIs dos Web Services. A

experiência tem mostrado que desenvolver manualmente clientes que consomem Web Services pode ser

trabalhoso e suscetível a erros. Muitos problemas levantados por clientes que desenvolvem o Proxy

manualmente estão relacionados à falta de elementos XML ou erro na definição dos mesmos, utilização

incorreta de namespaces e resultados inesperados. Gerar um Proxy utilizando uma ferramenta como .NET ou

Wsdl2Java trata estes problemas corretamente sem utilizar desenvolvedores e tempo, o que resulta num

custo mais efetivo do ciclo de desenvolvimento e numa entrega mais rápida.

Page 4: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

USANDO COMMON SERVICES

Introdução

Common Services são aqueles serviços utilizados em muitas tarefas. Por exemplo, o serviço mais comum é o de

Logon, que é necessário antes da utilização de qualquer outro serviço. SessionManagerClient provê acesso a este

serviço.

Logon

Provê uma sessão para uso do serviço posterior e estabelece um perfil para a sessão. Para utilizar os Web Services,

deve-se estabelecer uma sessão com uma identificação e senha de login específicos. O ID e senha do usuário

concedem ao mesmo, direitos específicos para os Web Services baseado no perfil para a função de trabalho. Por

exemplo, um Agente de Reserva pode ter direitos a fazer uma reserva, alterar certas reservas ou configurar a conta

de um cliente. Um supervisor, por outro lado, pode ter direitos de alterar o preço de uma passagem ou

manualmente autorizar um crédito em cartão.

O objeto SessionContext retornado como parte do LogonResponse será um parâmetro necessário em todas as

chamadas subseqüentes à um método do Web Service. O SessionContext só pode ser criado pelo Logon. O Logon

estabelecerá um booking state (estado do agendamento) para o usuário que está efetuando o login.

Importante – Reutilizando o SessionContext

O serviço de Logon é um serviço muito pesado. Ele realiza vários acessos ao banco de dados e armazena

dados em cache para uso futuro, por isso é altamente recomendado que o SessionContext seja reutilizado

para múltiplas tarefas. Não é necessário efetuar o Logon para cada tarefa realizada. As sessões expirarão, se

não forem utilizadas, por timeout e os recursos alocados para as sessões não estarão disponíveis até a sessão

expirar ou até que o Logout seja realizado. O Logout liberará os recursos alocados para a sessão e é

recomendado que a aplicação chame o Logout quando a sessão não for mais necessária.

Os exemplos inclusos neste documento incluem os passos para Logon e Logout mostrarem que um

SessionContext é necessário para realizar uma tarefa. Não significa que um Logon seria realizado antes de

cada tarefa. Para uma dada tarefa o SessionContext pode ser um que foi criado anteriormente como parte

de outras tarefas.

Passos:

Criar uma instância de um SessionManagerClient que será utilizado para interagir com a API.

Page 5: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Coletar os identificadores do usuário. A fim de identificar um usuário e autenticá-lo para o sistema, o nome

do usuário e sua senha são necessários. Estes dados são coletados pela aplicação que os fornece ao serviço

de Logon.

Uma vez coletados os identificadores, um LogonRequest é criado e preenchido com estes identificadores.

O LogonRequest é passado com um parâmetro para o serviço de Logon.

Se bem sucedido, o serviço de Logon retorna um LogonResponse. O LogonResponse contêm um objeto

SessionContext que é necessário em qualquer chamada subseqüente aos serviços da API. Ele é salvo dentro

de um objeto SessionContext que é então utilizado nas chamadas subseqüentes à API.

O exemplo seguinte mostra o uso do serviço de Logon.

using System;

using System.Collections.Generic;

using System.Text;

using SampleLogon.SkyChannel;

namespace SampleLogon

{

class SampleLogon

{

static void Main(string[] args)

{

Console.WriteLine("Starting Logon");

String username = "jsmith";

String password = "P@ssword2";

String domain = "def";

SkyChannel.SessionContext sessionContext = new SessionContext();

SkyChannel.SessionManagerClientSoap sessionAPI = new SkyChannel.SessionManagerClientSoap();

SkyChannel.LogonRequest logonRequest = new SkyChannel.LogonRequest();

SkyChannel.LogonResponse logonResponse;

logonRequest.AgentName = username;

logonRequest.DomainCode = domain;

logonRequest.Password = password;

logonRequest.SystemType = SkyChannel.SystemType.WebServicesAPI;

logonRequest.ChannelType = SkyChannel.ChannelType.API;

logonRequest.LocationCode = String.Empty;

logonRequest.TerminalInfo = String.Empty;

logonRequest.RoleCode = String.Empty;

logonResponse = sessionAPI.Logon(logonRequest);

if (logonResponse != null && logonResponse.SessionContext != null)

{

sessionContext = logonResponse.SessionContext;

Console.WriteLine("Completed Logon");

}

else

{

Console.WriteLine("Logon failed");

}

sessionAPI.Logout(sessionContext);

Console.Write("anykey to continue ");

Console.Read();

}

}

}

Fluxograma do Logon

Page 6: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Instanciar

SessionManagerClientSoap

Obter

identificadores do

usuário

Instanciar e

popular

LogonRequest

Chamar o serviço

Logon

OKReceber

LogonResponseSimFalha no logon Não

Armazenar

SessionContext

Início

Fim

Alterar Senha

ChangePassword permite a alteração de senhas programaticamente. ChangePassword não retorna reposta alguma

nem lança uma exceção caso a senha não seja alterada. A exceção indica por que a senha não foi alterada.

Nota: Um objeto SessionContext não é necessário por que o AgentName e o Password do agente são

necessários para identificar o agente que está alterando sua própria senha.

O exemplo abaixo mostra um exemplo simples de uso do ChangePassword.

String agentname = "jsmith";

String password = "P@ssword4";

String domain = "def";

String newPassword = "P@ssword5";

sessionAPI = new SkyChannelAPI.SessionManagerClientSoap();

SkyChannelAPI.LogonRequest logonRequest = new SkyChannelAPI.LogonRequest();

logonRequest.AgentName = agentname;

logonRequest.DomainCode = domain;

logonRequest.Password = password;

logonRequest.SystemType = SkyChannelAPI.SystemType.WebServicesAPI;

logonRequest.ChannelType = SkyChannelAPI.ChannelType.API;

logonRequest.LocationCode = String.Empty;

logonRequest.TerminalInfo = String.Empty;

logonRequest.RoleCode = String.Empty;

sessionAPI.ChangePassword(logonRequest, newPassword);

Fluxograma do ChangePassword

Instanciar

SessionManagerClientSoapInício

Obter

identificadores e

dados do usuário

Instanciar e

popular

LogonRequest

Chamar o serviço

ChangePassword

ExceçãoTratar exceção

Fim

Sim

Não

Page 7: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Page 8: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Logout

O Logout encerra uma sessão existente. Qualquer dado não cometido ao banco de dados será perdido.

Passos:

Utilize a instância existente de um SessionManagerClient que é utilizado para interagir com a API. (opcional)

Faça uma chamada ao serviço de Logout fornecendo o objeto SessionContext obtido no Logon.

sessionAPI.Logout(sessionContext);

Fluxograma do Logout

Utilizar uma instância de

SessionManagerClientSoapInício

Chamar o serviço

LogoutFim

Page 9: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

BOOKING SERVICES

Introdução às tarefas de Agendamento.

As tarefas de Booking operam nas reservas e dados relacionados. Um BookingManagerClient provê acesso a estas

APIs. O SessionContext obtido do Logon é necessário para estas APIs.

Nota: Quando um número de vôo é informado é necessário que esteja justificado a direita para quatro

dígitos.

Nota: Na requisição, o elemento DistributeToContacts é definido como false. Quando definido como false o

sistema não envia notificações. As duas condições que seguem devem ser atendidas antes que uma

notificação seja enviada:

1. O DistributeToContacts deve ser definido como true.

2. Nenhum dinheiro pode ser devido no agendamento.

Tarefas Iniciais

Criando um Agendamento (Booking) – Passo Inicial

A tarefa de criação de um agendamento descreve os passos utilizados para adicionar um agendamento no sistema.

Não é necessário efetuar o Logon para cada tarefa se já existir um SessionContext válido. Da mesma forma, não é

necessário efetuar o Logout após cada tarefa. Logon a Logout estão inclusos abaixo para melhor entendimento.

Este tópico inclui as instruções para criar um agendamento e mostra exemplos de como fazê-lo. Os exemplos dados

não são detalhados nem exaustivos. Eles estão inclusos como representações da informação que necessita ser

passada para completar o passo.

A criação de um processo de agendamento é a seguinte:

Fazer Log on (Obrigatório)

Criar uma instância de um BookingManagerClient (Obrigatório)

Obter disponibilidade de um vôo (Opcional)

Preço do itinerário (Opcional)

Vender vôos (Obrigatório)

Adicionar Informações do Passageiro (Obrigatório)

Vender SSR (Opcional)

Taxa de Serviço de Venda(Opcional)

Finalizar Reserva (Obrigatório)

Page 10: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Para criar um agendamento, utilize a seguinte informação:

Se um SessionContext não está instanciado, criar uma instância de um SessionManagerClient que será utilizado

para interagir com a Logon API.

[Obrigatório] Logon – estabelece uma sessão que será utilizada nas interações subseqüentes com a API.

Criar uma instância de um BookingManagerClient que será utilizado para interagir com a API de agendamento

(Booking API).

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

[Opcional] Obter disponibilidade – Obtêm a disponibilidade de um vôo e a informação da tarifa para um

mercado. Não atualiza o estado do agendamento.

Nota: O Journey Data Market é diário e depende da propriedade DOW (Day of Week) do pedido de

disponibilidade.

Por exemplo, 14/02/06 a 24/02/06 e DOW definido para Terça-feira terá dois Journey Data Market se dia 14 for

uma Terça-feira.

AvailabilityFilter pode ser definido para indicar se vôos agendados devem ser retornados. Journey Data Market é

por dia e depende da propriedade DOW do pedido de disponibilidade. Ex: 14/02/06 a 24/02/06 e DOW definido

para Terça-feira terá dois Journey Data Market se dia 14 for uma Terça-feira.

AvailabilityFilter pode ser definido para indicar se vôos agendados devem ser retornados.

Dados da Station são providos para a API pela aplicação.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.AvailabilityRequest availabilityRequest = new AvailabilityRequest();

PaxPriceType[] priceTypes = new PaxPriceType[1];

priceTypes[0] = new PaxPriceType();

priceTypes[0].PaxType = "ADT";

availabilityRequest.BeginDate = DateTime.Parse("2006-08-25T00:00:00");

availabilityRequest.EndDate = DateTime.Parse("2006-08-25T00:00:00");

availabilityRequest.ArrivalStation = "SLC";

availabilityRequest.DepartureStation = "JFK";

availabilityRequest.FlightType = FlightType.All;

availabilityRequest.CurrencyCode = "USD";

availabilityRequest.PaxPriceTypes = priceTypes;

availabilityRequest.Dow = DOW.Daily;

//optional filters

availabilityRequest.FlightNumber = "1115";

availabilityRequest.CarrierCode = "1L";

SkyChannel.AvailabilityResponse availabilityResponse = bookingAPI.GetAvailability(sessionContext,

availabilityRequest);

[Opcional] Preço do Itinerário – Fixa o preço de um itinerário completo, registra taxas, cargas, impostos e preços

utilizando os parâmetros fornecidos a respondendo o preço total incluindo todas as taxas, cargas e impostos.

Nota: PriceItinerary pode incluir FareTypes que foram previamente configurados no Sky Utilities. Se não são

inclusos FareTypes, deixe o campo definido como null.

Nota: O código de exemplo precisa também marcar priceItinRequest.SSRResquests[0].FlightDesignator quando

ele está marcando o priceitinrequest.

Se o FlightDesignator for branco, então o agendamento da viagem não pode ser encontrado.

Page 11: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Muitos dos dados utilizados em Price Itinerary podem ser copiados de uma resposta do GetAvailability.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.PriceItineraryRequest priceItinRequest = new PriceItineraryRequest();

priceItinRequest.CurrencyCode = “BRL”;

priceItinRequest.JourneyRequests = new JourneyRequest[1];

priceItinRequest.JourneyRequests[0] = new JourneyRequest();

priceItinRequest.JourneyRequests[0].Segments = new SegmentRequest[1];

SegmentRequest[] srSegments = new SegmentRequest[1];

srSegments[0] = new SegmentRequest();

srSegments[0].ActionStatusCode = "NN";

srSegments[0].PaxCount = 1;

srSegments[0].ClassOfService = availResponse.Schedule[0].Journeys[0].Fares[0].ClassOfService;

srSegments[0].DepartureStation = availResponse.Schedule[0].Journeys[0].Segments[0].DepartureStation;

srSegments[0].STD = availResponse.Schedule[0].Journeys[0].Segments[0].STD;

srSegments[0].ArrivalStation = availResponse.Schedule[0].Journeys[0].Segments[0].ArrivalStation;

srSegments[0].STA = availResponse.Schedule[0].Journeys[0].Segments[0].STA;

srSegments[0].Legs = availResponse.Schedule[0].Journeys[0].Segments[0].Legs;

priceItinRequest.JourneyRequests[0].Segments = srSegments;

priceItinRequest.JourneyRequests[0].CarrierCode = "AD";

// FareTypes is an optional field. If not used leave set to null,

// otherwise set to values defined using SkyManager.

priceItinRequest.FareTypes = new String[2];

priceItinRequest.FareTypes[0] = "R";

priceItinRequest.FareTypes[1] = "PR";

priceItinRequest.Passengers = new Passenger[1];

priceItinRequest.Passengers[0] = new Passenger();

priceItinRequest.Passengers[0].Name = new Name();

priceItinRequest.Passengers[0].Name.FirstName = "João";

priceItinRequest.Passengers[0].Name.MiddleName = "da";

priceItinRequest.Passengers[0].Name.LastName = "Silva";

priceItinRequest.Passengers[0].PaxPriceType = new PaxPriceType();

priceItinRequest.Passengers[0].PaxPriceType.PaxType = "ADT";

priceItinRequest.SSRRequests = new SSRRequest[1];

priceItinRequest.SSRRequests[0] = new SSRRequest();

priceItinRequest.SSRRequests[0].ActionStatusCode = "NN";

priceItinRequest.SSRRequests[0].SSRCode = "BIKE";

priceItinRequest.SSRRequests[0].SSRNumber = 0;

priceItinRequest.SSRRequests[0].STD = availResponse.Schedule[0].Journeys[0]. Segments[0].STD;

priceItinRequest.SSRRequests[0].FlightDesignator = new FlightDesignator();

priceItinRequest.SSRRequests[0].FlightDesignator =

availResponse.Schedule[0].Journeys[0].Segments[0].Legs[0].FlightDesignator;

priceItinRequest.SSRRequests[0].DepartureStation =

availResponse.Schedule[0].Journeys[0].Segments[0].DepartureStation;

priceItinRequest.SSRRequests[0].ArrivalStation =

availResponse.Schedule[0].Journeys[0].Segments[0].ArrivalStation;

priceItinRequest.SSRRequests[0].PassengerNumber = 0;

SkyChannel.PriceItineraryResponse piResponse = bookingAPI.PriceItinerary(sessionContext, priceItinRequest);

Console.WriteLine("Total price = {0:C} ", piResponse.Total);

[Obrigatório] Vender Vôos

O método SellFlights reserva um lugar na viagem desejada. Atualiza o estado da sessão. Isto substitui o estado atual

com os dados fornecidos no SellRequest.

SellRequest contêm uma coleção de JourneyRequest que contêm SegmentRequest. Os tipos de

segmentos deve ser SegmentRequest.

[Opcional] Utilização de Promo Codes.

Informações do passageiro.

Page 12: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Nota sobre o preenchimento do SellRequest

Seguem Notas e informações a respeito do uso do método Sell.

Você somente pode copiar os resultados da disponibilidade para o pedido de venda se for uma

disponibilidade de sentido único.

Sell usa, normalmente, uma base de taxa específica (um elemento que armazena e determina elegibilidade e

restrições da taxa) o qual restringe a venda para a base da tarifa e suas regras.

O número da regra é associado à base da tarifa e utilizado para distinguir entre códigos da base da tarifa se

existir múltiplas instâncias de código base da tarifa definidos com diferentes regras. Combinando com a base

da tarifa, ele identifica uma tarifa.

O código da operadora (Carrier code) é obrigatório. Ele identifica a operadora a qual o número do vôo

pertence. Ele é obrigatório porque múltiplos vôos da operadora podem estar disponíveis para venda, como

no caso do code share e do wet lease.

A regra da tarifa deve ser deixada em branco. Ela está reservada para uso futuro.

A classe do serviço deve corresponder à classe do serviço definida com o código da base da tarifa.

Existem 2 formas de utilizar o método Sell:

Uma venda que utiliza somente a classe do serviço e o tipo de tarifa. (Este não é um uso comum).

Uma venda que utiliza uma base de tarifa específica na qual restringe a venda a esta base de tarifa e

suas regras.

O método Sell requer os seguintes campos:

FlightDesignator

CarrierCode

FlightNumber

opSuffix

STA

STD

DepartureStation

ArrivalStation

PriorityCode

inboudoutbound

RuleNumber

RuleTariff

RuleBasis

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

String fareBasis = String.Empty;

String ruleNumber = String.Empty;

SkyChannel.SellRequest sellRequest = new SellRequest();

sellRequest.PriceRequest = new PriceRequest();

sellRequest.JourneyRequests = new JourneyRequest[1];

sellRequest.JourneyRequests[0] = new JourneyRequest();

sellRequest.JourneyRequests[0].Segments = new SegmentRequest[1];

SegmentRequest[] srSegments = new SegmentRequest[1];

// get a segment with valid fares from availability response

Page 13: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

for (int j = 0; j < availResponse.Schedule.Length; j++)

{

for (int i = 0; i < availResponse.Schedule[j].Journeys.Length; i++)

{

InventoryJourney journey = availResponse.Schedule[j].Journeys[i];

InventorySegment segment = (InventorySegment)journey.Segments[0];

if (segment.SegmentClasses.Length > 0 && segment.Fares.Length > 0)

{

srSegments[0].DepartureStation = availResponse.Schedule[j].Journeys[i].Segments[0].DepartureStation;

srSegments[0].STD = availResponse.Schedule[j].Journeys[i].Segments[0].STD;

srSegments[0].ArrivalStation = availResponse.Schedule[j].Journeys[i].Segments[0].ArrivalStation;

srSegments[0].STA = availResponse.Schedule[j].Journeys[i].Segments[0].STA;

srSegments[0].Legs = availResponse.Schedule[j].Journeys[i].Segments[0].Legs;

srSegments[0].FlightDesignator = new FlightDesignator();

srSegments[0].FlightDesignator =

availResponse.Schedule[j].Journeys[i].Segments[0].Legs[0].FlightDesignator;

srSegments[0].ActionStatusCode = "NN";

srSegments[0].PaxCount = 1;

srSegments[0].CarrierCode = srSegments[0].FlightDesignator.CarrierCode;

srSegments[0].ClassOfService = segment.Fares[0].ClassOfService;

fareBasis = availResponse.Schedule[j].Journeys[i].Fares[0].FareBasis;

ruleNumber = availResponse.Schedule[j].Journeys[i].Fares[0].RuleNumber;

break;

}

}

}

sellRequest.JourneyRequests[0].Segments = srSegments;

sellRequest.JourneyRequests[0].CarrierCode = "AD";

sellRequest.JourneyRequests[0].FareBasis = fareBasis;

sellRequest.JourneyRequests[0].RuleNumber = ruleNumber;

sellRequest.PriceRequest.CurrencyCode = “BRL”;

sellRequest.PriceRequest.PaxResidentCountry = "BR";

sellRequest.PriceRequest.Passengers = new Passenger[1];

sellRequest.PriceRequest.Passengers[0] = new Passenger();

sellRequest.PriceRequest.Passengers[0].Name = new Name();

sellRequest.PriceRequest.Passengers[0].Name.FirstName = "João";

sellRequest.PriceRequest.Passengers[0].Name.MiddleName = "da";

sellRequest.PriceRequest.Passengers[0].Name.LastName = "Silva";

sellRequest.PriceRequest.Passengers[0].PaxPriceType = new PaxPriceType();

sellRequest.PriceRequest.Passengers[0].PaxPriceType.PaxType = "ADT";

sellRequest.PriceRequest.Passengers[0].PaxPriceType.PaxDiscountCode = null;

SkyChannel.SellResponse sellResponse = bookingAPI.Sell(sessionContext, sellRequest);

Console.WriteLine("Sell Balance Due = {0:C} ", sellResponse.BalanceDue);

[Obrigatório] Adicionar informações ao passageiro

Informações básicas do passageiro podem ser incluídas através do método Sell. Outro dado do passageiro é

adicionado ou completado utilizando o BookingRequest passado dentro do Commit. Veja Commit para maiores

detalhes. Esteja ciente que alterando o tipo de passageiro, o código de desconto e o nome causarão atualização de

preço do agendamento (Booking).

[Opcional] Vender SSR

Vender um ou mais SSRs (SSR – Special Service Request – Requisição de Serviço Especial) do agendamento (Booking)

atual. O SSRRequest pode ou especificar um nível de segmento de venda SSR ou de um trecho. A fim de vender um

SSR, um passageiro é necessário (atualiza o estado atual com os dados fornecidos no SellSSRRequest).

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

// SellSSRRequest Contains a collection of SSRs to be sold

SkyChannel.SellSSRRequest sellSsrRequest = new SellSSRRequest();

sellSsrRequest.SSRRequests = new SSRRequest[1];

SSRRequest[] SSRs = new SSRRequest[1];

SSRs[0] = new SSRRequest();

SSRs[0].ActionStatusCode = "NN";

SSRs[0].SSRCode = "BIKE";

SSRs[0].SSRNumber = 0;

Page 14: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

SSRs[0].STD = availResponse.Schedule[0].Journeys[0].Segments[0].STD;

SSRs[0].FlightDesignator = new FlightDesignator();

SSRs[0].FlightDesignator = availResponse.Schedule[0].Journeys[0].Segments[0].Legs[0].FlightDesignator;

SSRs[0].DepartureStation = availResponse.Schedule[0].Journeys[0].Segments[0].DepartureStation;

SSRs[0].ArrivalStation = availResponse.Schedule[0].Journeys[0].Segments[0].ArrivalStation;

SSRs[0].PassengerNumber = 0;

sellSsrRequest.SSRRequests = SSRs;

SkyChannel.SellSSRResponse sellSsrResponse = bookingAPI.SellSSR(sessionContext, sellSsrRequest);

System.Console.WriteLine("Total Cost {0:C}", sellSsrResponse.TotalCost);

[Obrigatório] Venda de Taxa de serviço

Vende uma taxa de serviço e a aplica no estado atual do agendamento (Booking). Ele atualiza o estado atual com

dados fornecidos no SellServiceFeeRequest.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SellServiceFeeRequest feeRequest = new SellServiceFeeRequest();

feeRequest.PassengerNumber = 0;

feeRequest.FeeCode = "CMF";

feeRequest.CollectedCurrencyCode = “BRL”;

feeRequest.Note = "API added Service Fee";

BookingResponse br = bookingAPI.SellServiceFee(sessionContext, feeRequest);

[Obrigatório] Finalizar uma reserva

Adiciona um agendamento no banco de dados.

Nota: Se você está suplementando a API originada de agendamentos com TeleType (TTY, Type B)

processamento de post-booking , o FamilyNumber definido no BookingPassenger determina como os nomes

dos passageiros serão retornados na resposta TTY.

BookingPassengers com o mesmo sobrenome e FamilyNumber são incluídos juntos. FamilyNumber é um

campo opcional.

É responsabilidade da aplicação cliente garantir que os dados fornecidos são válidos. Submeter informações de

agendamento das lojas contidas no estado das etapas precedentes ao banco de dados. New Skies reforça as regras

de consistência de alguns dados quando são submetidos, mas não garante que todos os dados são válidos para a

aplicação. A aplicação deve efetuar a validação previamente e então submetê-las. Os dados inclusos no objeto

BookingRequest são inclusos nos dados do estado que é escrito no banco de dados.

Os seguintes dados podem também ser fornecidos utilizando o método Commit (Finalizar uma reserva é também

referenciado como Commit). Exemplos de uso destes dados são fornecidos na seção de alteração de agendamento.

[Opcional] Adicionar comentários a uma reserva.

[Obrigatório] Adicionar detalhes do contato.

[Obter o total examinando o estado da sessão ou o resultado da última venda]

Campos de pagamento definidos como obrigatórios pelos métodos de pagamento, como

definidos através do Sky Utilities, devem ser fornecidos no pagamento.

[Opcional] Adicionar pagamento a uma reserva

[Obter o total examinando o estado da sessão ou o resultado da última venda]

Page 15: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Se um campo de pagamento é definido como obrigatório para o método de pagamento no Sky Utilities (no nó

de Finanças), então você deve fornecê-lo no pagamento que está sendo realizado. Se a informação de

pagamento não estiver no formato correto, a seguinte exceção é lançada:

“New payments associated with the booking did not pass validation.”

O exemplo de pagamento externo fornecido abaixo é específico para a configuração do sistema utilizado para

gerar o exemplo. Os PaymentFields e o número do cartão de teste pode variar de outros sistemas de teste.

Entretanto, pagamentos realizados em outros sistemas têm de ser criados conforme a configuração daquele

sistema.

Os campos de pagamento utilizados no Pagamento são definidos no Sky Utilities na configuração do método de

Pagamento. A API Payment FieldName contem um campo Code do método de pagamento. Veja Utilizando

FieldNames nos campos de Pagamento para a lista de códigos.

Os seguintes campos são obrigatórios para o pagamento:

PaymentMethodType deve corresponder ao tipo de pagamento

CurrencyCode

QuotedAmount

QuotedCurrencyCode

Status

PaymentReference

ChannelType

FundedDate

Outros campos do tipo de pagamento que estão sendo utilizado.

Ao preencher um pagamento, esteja ciente do seguinte:

O PaymentoMethodType deve ser definido para o método de pagamento associado para

o pagamento que está sendo adicionado no agendamento. Ele pode ser um dos

seguintes:

PrePaid

ExternalAccount

AgencyAccount

CustomerAcount

Voucher

PaymentReference deve ser definido como “Default”.

ChannelType deve ser definido como “API”.

FundedDate deve ser definido como “1800-01-01T00:00:00”.

Qualquer PaymentFields definido para o método de pagamento no Sky Utilities deve

estar preenchido também.

A menos que múltiplas moedas estejam sendo utilizadas, preencher somente o seguinte:

CurrencyCode

QuotedCurrecyCode

QuotedAmount

Page 16: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

É possível criar um credit shell utilizando um stateless commit. Primeiro faça o Logon e garanta que você

esteja logado utilizando um agente na mesma agência / organização como a agência para qual você está

adicionando crédito. Também garanta que este agente tenha as configurações corretas de perfil para

pagamento AG (Agency Payments) e pagamentos CS (Credit Shell Refunds). As configurações do perfil devem

permitir ao agente emitir Agency Payments (AG) e Credit Shell Refunds (CS).

Nota: Um pagamento “credit shell” é tecnicamente um Credit File.

Uma vez que os perfis estejam corretamente configurados, preencher o BookingRequest é direto. Esteja

ciente dos seguintes itens a respeito da configuração do BookingRequest:

O seguinte é requerido:

CurrencyCode.

Contact; também marcar a SourceOrganization para a Agência na qual o Agency Payment aplica-se e

o Typecode definido como “80” para o tipo de pagamento.

Os campos do pagamento precisam ser preenchidos.

Os seguintes campos do Payment são obrigatórios para os Agency Payments:

O objeto Payment deve ser criado como um AgencyAccountPayment, que é o tipo de pagamento a

ser definido como “AgencyAccountPayment”.

PaymentMethodType deve ser definido como AgencyAccount.

PaymentMethodCode deve ser definido como “AG”.

A Moeda e quantidade são ajustadas.

AccountNumber é definido com o número de conta da agência.

ChannelType é definido como API.

Os seguintes campos do pagamento são obrigatórios para reembolsos do credit shell:

O objeto Payment deve ser criado como um CustomerAccountPayment, que é o tipo de pagamento

definido como “CustomerAccountPayment”.

PaymentMethodType definido como CustomerAccount.

PaymentMethodCode definido como CS.

QuotedCurrencyCode e QuotedAmount são definido com uma quantia negativa devido ao reembolso.

O ChannelType deve ser definido como API.

AccountTransactionCode é definido com um código de crédito válido que foi configurado no Sky

Utilities > Finance > Account Management > Credit Codes.

Nota: Se qualquer um dos tipos de pagamento solicitar uma taxa, deve-se também adicionar um

passageiro ao agendamento para associar a taxa. Então, se você tentar um Stateless Commit, a validação

do agendamento falhará. Na prática, somente os tipos de pagamento que devem incluir taxas são os

pagamentos externos. Taxas de pagamentos podem ser associadas à credit shells mas não funcionarão

na prática porque os credit shells são utilizados pelos reembolsos.

Page 17: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Nota de Processamento: O New Skies é projetado para fazer chamadas assíncronas ao sistema de

pagamento por razões de escalabilidade e performance. O New Skies faz a chamada ao sistema de

pagamento que imediatamente retorna o controle para o New Skies. Alguma hora mais tarde, após o

sistema de pagamento obter uma resposta de retorno de um provedor de serviço de pagamento, ele

retorna ao New Skies para atualizar o status de pagamento do agendamento.

Visando determinar o status do pagamento, as aplicações do Booking checam periodicamente o agendamento para

verificar se o status do pagamento foi atualizado. Por exemplo, Sky Sales aguarda alguns segundos e então verifica se

o status do agendamento foi atualizado. Se uma aplicação precisa determinar o status atual do pagamento de um

agendamento ele verifica o mesmo periodicamente para obter seu status mais recente. Se a aplicação tem um

agendamento em seu estado a seguinte chamada na API permite verificar o status do pagamento sem fazer uma

chamada ao GetBooking.

payments = BookingManagerClient.GetCurrentStateBookingPayments(UserSession.SessionContext);

if (payments != null)

{

foreach (Payment payment in payments)

{

if (payment.Status != BookingPaymentStatus.Declined &&

payment.Status != BookingPaymentStatus.Approved &&

(payment.Status != BookingPaymentStatus.PendingCustomerAction || pendingCustomerActionIsFinal

== true))

}

}

[Obrigatório] Adicionar detalhes do passageiro do agendamento

Informações básicas do passageiro

Detalhes do documento de viagem (opcional)

Detalhes da criança (opcional)

Documentos de viagem da criança (opcional)

[Obrigatório] Submeter reserva

Nota: Quando submeter um agendamento a configuração recomendada para CommitAction é a

seguinte:

bookingRequest.CommitAction = CommitAction.CommitRetrieve;

Obs.: Utilizar outros valores para CommitAction pode causar resultados não esperados.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

bookingRequest.CurrencyCode = “BRL”;

bookingRequest.ReceivedBy = “João da Silva”;

bookingRequest.PaxResidentCountry = "BR";

bookingRequest.CommitAction = CommitAction.CommitRetrieve;

bookingRequest.BookingComments = new BookingComment[1];

bookingRequest.BookingComments[0] = new BookingComment();

Page 18: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

bookingRequest.BookingComments[0].CommentText = "Sample created using Web API";

bookingRequest.BookingComments[0].CommentType = CommentType.Default;

bookingRequest.BookingContacts = new BookingContact[1];

bookingRequest.BookingContacts[0] = new BookingContact();

bookingRequest.BookingContacts[0].TypeCode = "72"; // decimal for "H";

bookingRequest.BookingContacts[0].AddressLine1 = "123 Rua Principal";

bookingRequest.BookingContacts[0].City = "São Paulo";

bookingRequest.BookingContacts[0].PostalCode = "06056-010";

bookingRequest.BookingContacts[0].CountryCode = "BR";

bookingRequest.Payments = new Payment[1];

bookingRequest.Payments[0] = new ExternalAccountPayment();

bookingRequest.Payments[0].PaymentMethodType = PaymentMethodType.ExternalAccount;

bookingRequest.Payments[0].ReferenceType = PaymentReferenceType.Default;

bookingRequest.Payments[0].PaymentMethodCode = "MC";

bookingRequest.Payments[0].CurrencyCode = “BRL”;

bookingRequest.Payments[0].ChannelType = ChannelType.API;

bookingRequest.Payments[0].QuotedCurrencyCode = “BRL”;

bookingRequest.Payments[0].QuotedAmount = sellResponse.BalanceDue;

bookingRequest.Payments[0].Status = BookingPaymentStatus.New;

bookingRequest.Payments[0].AccountNumber = "5210000010001001";

bookingRequest.Payments[0].Expiration = DateTime.Parse("2007-12-30T00:00:00");

bookingRequest.Payments[0].FundedDate = DateTime.Parse("1800-01-01T00:00:00");

bookingRequest.Payments[0].PaymentText = "MC payment";

bookingRequest.Payments[0].PaymentFields = new PaymentField[3];

bookingRequest.Payments[0].PaymentFields[0] = new PaymentField();

bookingRequest.Payments[0].PaymentFields[0].FieldName = "CC::VerificationCode";

bookingRequest.Payments[0].PaymentFields[0].FieldValue = "998";

bookingRequest.Payments[0].PaymentFields[1] = new PaymentField();

bookingRequest.Payments[0].PaymentFields[1].FieldName = "CC:AccountHolderName";

bookingRequest.Payments[0].PaymentFields[1].FieldValue = “João da Silva”;

bookingRequest.Payments[0].PaymentFields[2] = new PaymentField();

bookingRequest.Payments[0].PaymentFields[2].FieldName = "Avs::PostalCode";

bookingRequest.Payments[0].PaymentFields[2].FieldValue = "84121";

bookingRequest.BookingPassengers = new BookingPassenger[2];

bookingRequest.BookingPassengers[0] = new BookingPassenger();

bookingRequest.BookingPassengers[0].Name = new Name();

bookingRequest.BookingPassengers[0].CustomerNumber = "6500000022";

bookingRequest.BookingPassengers[0].Name.FirstName = "João";

bookingRequest.BookingPassengers[0].Name.MiddleName = "da";

Page 19: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

bookingRequest.BookingPassengers[0].Name.LastName = "Silva";

bookingRequest.BookingPassengers[0].PaxPriceType = new PaxPriceType();

bookingRequest.BookingPassengers[0].PaxPriceType.PaxType = "ADT";

bookingRequest.BookingPassengers[0].PaxPriceType.PaxDiscountCode = null;

bookingRequest.BookingPassengers[1] = new BookingPassenger();

bookingRequest.BookingPassengers[1].Name = new Name();

bookingRequest.BookingPassengers[1].Name.FirstName = "João";

bookingRequest.BookingPassengers[1].Name.MiddleName = "da";

bookingRequest.BookingPassengers[1].Name.LastName = "Silva";

bookingRequest.BookingPassengers[1].PaxPriceType = new PaxPriceType();

bookingRequest.BookingPassengers[1].PaxPriceType.PaxType = "ADT";

bookingRequest.BookingPassengers[1].PaxPriceType.PaxDiscountCode = null;

BookingCommitResponse br = bookingAPI.Commit(sessionContext, bookingRequest);

Console.WriteLine("Booking Committed, RECLOC = {0}, total = {1:C}", br.RecordLocator, br.TotalCost);

Fluxograma do Processo de Agendamento (Tarefas Iniciais)

Início SessionContext

Efetuar LogonInstanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Não existe

Existe

Instanciar

BookingManagerClientSoap

Obter

Disponibilidade

(Opcional)

Definir preço do

itinerário

(Opcional)

Reservar lugar

Adicionar

informações ao

passageiro

Vender SSR

(Opcional)

Vender Taxa de

ServiçoFinalizar Reserva Fim

Page 20: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

TAREFAS DE RECUPERAÇÃO

Encontrar um Agendamento (FindBooking)

FindingBooking fornece um mecanismo de consulta para recuperação de agendamentos que correspondam ao

critério de pesquisa. Veja a documentação Object Reference.chm no método BookingManagerClient.FindBooking

para mais detalhes.

Para encontrar um agendamento, faça o seguinte:

Recupere uma lista de agendamentos que corresponda ao critério de pesquisa especificado na solicitação.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.FindBookingRequest searchCriteria = new FindBookingRequest();

searchCriteria.LastName = "Silva";

searchCriteria.FirstName = new SearchString();

searchCriteria.FirstName.Value = "João";

searchCriteria.FirstName.SearchType = SearchType.StartsWith;

FindBookingResponse bookingResponse = bookingAPI.FindBooking(sessionContext, searchCriteria);

Console.WriteLine("{0} bookings found", bookingResponse.FindList.Length);

if(bookingResponse.FindList.Length > 0)

{

Console.WriteLine("First record locator = " + bookingResponse.FindList[0].RecordLocator);

}

Nota: A data do vôo não pode ser utilizada sozinha para pesquisar por agendamentos. Outra chave de

informação deve ser informada.

Os argumentos primários de pesquisa que podem ser utilizados incluem os seguintes:

Name

AgentName

AgentID

ContactCustomerNumber

ContacOnly

CreditCard

CustomerNumber

Email

OrganizationCode

PhoneNumber

RecordLocator

Os campos do vôo na solicitação são somente utilizados para reduzir os resultados retornados de uma solicitação.

Por exemplo, se FindingBooking é utilizado e um LastName é fornecido pode corresponder a múltiplos PNRs.

Informações de vôo podem ser utilizadas para reduzir a lista para uma data e vôo específico.

Page 21: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Fluxograma para FindBooking:

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Instanciar e popular

FindBookingRequest

Chamar

FindBookingFim

Obtendo Agendamento

Uma forma simples de obter um agendamento é fornecer a sessão do contexto e um localizador. Isto substitui o

estado do agendamento com o agendamento retornado.

Para obter um agendamento existente, recupere um agendamento pelo localizador.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

Booking booking = bookingAPI.GetBooking(sessionContext, recloc);

Fluxograma do GetBooking

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Chamar

GetBookingFim

Page 22: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

GetBookingByBookingID

Recupera um agendamento específico identificado por seu BookingID. Isto substitui o estado do agendamento com o

agendamento retornado.

Para obter um agendamento existente, você pode recuperá-lo pelo BookingID.

long bookingID = 2044;

bool retrieveFromArchive = false;

Booking booking = bookingAPI.GetBookingByBookingID(sessionContext, bookingID, retrieveFromArchive);

Console.WriteLine("retrieved record locator = " + booking.RecordLocator);

Fluxograma do GetBookingByBookingID

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Chamar

GetBookingByBookingIDFim Obter bookingID

Definir

retrieveFromArchive

Page 23: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

GetBookingWithHistory

Recupera um agendamento específico identificado por seu Localizador. Se encontrado os resultados incluem o

histórico do agendamento.

Atenção: Isto não atualiza o estado do agendamento.

Para obter um agendamento existente com histórico, identificar o agendamento pelo localizador.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.GetBookingRequest getBookingRequest = new GetBookingRequest();

getBookingRequest.RecordLocator = RECLOC;

getBookingRequest.IncludeBookingHistory = true;

Booking booking = bookingAPI.GetBookingWithHistory(sessionContext, getBookingRequest);

Fluxograma do GetBookingWithHistory

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Chamar

GetBookingWithHistoryFim

Instanciar e

preencher

GetBookingRequest

Page 24: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

GetRecordLocatorList

Recupera uma lista de localizadores para uma data específica e uma faixa de número de vôo.

BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

RecordLocatorListRequest rlRequest = new RecordLocatorListRequest();

rlRequest.CarrierCode = "AD";

rlRequest.DepartureDate = new DateTime(2007, 02, 15);

rlRequest.EndFlightNumber = "1115";

rlRequest.StartFlightNumber = "1115";

rlRequest.Initial = true;

RecordLocatorListResponse rlResponse = bookingAPI.GetRecordLocatorList(sessionContext, rlRequest);

if (rlResponse.RecordLocators[0] != null)

{

Console.WriteLine("First record locator is " + rlResponse.RecordLocators[0].ToString());

}

Fluxograma do GetRecordLocatorList

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Chamar

GetRecordLocatorList e

atribuí-lo a um

RecordLocatorListResponse

FimInstanciar e preencher

RecordLocatorListRequest

Page 25: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

GetSeatAvailability

Contem um AircraftConfiguration totalmente preenchido especificando o estado combinado de SeatAvailability de

cada assento em cada cabine para o vôo especificado entre a partida especificada e as estações de chegada. Esteja

ciente que GetSeatAvailability é sensível aos conteúdos do estado atual. Se o estado é preenchido com dados do

agendamento, a solicitação do assento deve referenciar os vôos no estado, senão a solicitação não retornará

assentos na resposta do SeatAvailability. O uso do GetSeatAvailability depende de como você pretende atribuir

assentos. O campo SeatAssingmentMode determina como a solicitação de disponibilidade será tratada. Se os

assentos são atribuídos antes do checkin então defina o SeatAssignmentMode como “CheckIn”. Se os assentos são

previamente associados antes do checkin então defina o SeatAssignmentMode como “PreSeatAssignment” e garanta

que os dados do estado do agendamento estão consistentes solicitando GetSeatAvailability. Caso contrário, os

assentos não serão retornados.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

SkyChannel.Booking booking = bookingAPI.GetBooking(sessionContext, recordLocator);

SeatAvailabilityRequest seatAvailabilityRequest = new SeatAvailabilityRequest();

seatAvailabilityRequest.FlightDesignator = new FlightDesignator();

seatAvailabilityRequest.FlightDesignator = booking.JourneyServices[0].Segments[0].Legs[0].FlightDesignator;

seatAvailabilityRequest.DepartureStation = booking.JourneyServices[0].Segments[0].DepartureStation;

seatAvailabilityRequest.ArrivalStation = booking.JourneyServices[0].Segments[0].ArrivalStation;

seatAvailabilityRequest.STD = booking.JourneyServices[0].Segments[0].STD;

seatAvailabilityRequest.SeatAssignmentMode = SeatAssignmentMode.PreSeatAssignment;

seatAvailabilityRequest.IncludeSeatFees = false;

seatAvailabilityRequest.IncludeSSRSeatMapCode = false;

SeatAvailabilityResponse seatAvailResponse =

bookingAPI.GetSeatAvailability(sessionContext, seatAvailabilityRequest);

Fluxograma do GetSeatAvailability

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Obter um Booking

através da chamada

do GetBooking

FimInstanciar

BookingRequest

Instanciar e preencher

SeatAvailabilityRequest

Chamar

GetSeatAvailability

Page 26: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

GetSSRAvailability

Retorna todo o conjunto de SSR disponíveis no trecho especificado. Para uma dada lista de trechos, ele retorna uma

lista com todo o conjunto de SSR disponível em pelo menos um dos trechos.

Obter os SSR disponíveis por trecho, segmentos ou tudo, está controlado pelo campo SSRCollectionsMode na

requisição de disponibilidade. (Não afeta o estado)

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SSRAvailabilityRequest SSRAvailRequest = new SSRAvailabilityRequest();

SSRAvailRequest.SSRCollectionsMode = SSRCollectionsMode.All;

SSRAvailRequest.InventoryLegKeys = new InventoryLegKey[1];

SSRAvailRequest.InventoryLegKeys[0] = new InventoryLegKey();

SSRAvailRequest.InventoryLegKeys[0].DepartureDate = availResponse.Schedule[0].DepartureDate;

SSRAvailRequest.InventoryLegKeys[0].ArrivalStation =

availResponse.Schedule[0].Journeys[0].Segments[0].ArrivalStation;

SSRAvailRequest.InventoryLegKeys[0].DepartureStation =

availResponse.Schedule[0].Journeys[0].Segments[0].DepartureStation;

SSRAvailRequest.InventoryLegKeys[0].FlightNumber =

availResponse.Schedule[0].Journeys[0].Segments[0].FlightDesignator.FlightNumber;

SSRAvailRequest.InventoryLegKeys[0].CarrierCode =

availResponse.Schedule[0].Journeys[0].Segments[0].FlightDesignator.CarrierCode;

SSRAvailabilityResponse saResponse = bookingAPI.GetSSRAvailability(sessionContext, SSRAvailRequest);

Fluxograma do GetSSRAvailability

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

FimInstanciar e preencher

SSRAvailabilityRequest

Chamar

GetSSRAvailability

Page 27: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Recuperando um agendamento

Um agendamento pode ser recuperado de várias formas. FindBooking provê um método para pesquisar por

agendamentos baseados nos dados da consulta fornecida na requisição. O serviço GetBooking recupera

agendamentos baseado nos dados de um identificador específico de um agendamento. Recuperar um agendamento

atualiza o estado do agendamento atual com os dados do agendamento recuperado.

Recuperando agendamentos do arquivo

A única forma de obter um agendamento completo de um arquivo é utilizando:

GetBookingByBookngID(bookingID, SearchArchive);

Encontrar um agendamento num arquivo pesquisando por PNR:

1. Faça um FindBooking por PNR e defina a flag SearchArchive como “true”.

2. Obtenha o BookingID do FindBookingList retornado e faça um GetBookingByBookingID.

Page 28: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

ALTERAR TAREFAS

Adicionar pagamentos a uma reserva

Adicionar Pagamento a um agendamento - Exemplo ExternalAccountPayment pmt = null;

//Create an instance of BookingManagerClientSoap

BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

Booking booking = bookingAPI.GetBooking(sessionContext, "C8MTTD");

// DCC and TDS only apply to external payments.

ExternalAccountPayment payment = new ExternalAccountPayment();

payment.Status = BookingPaymentStatus.New;

payment.PaymentMethodType = PaymentMethodType.ExternalAccount;

payment.ReferenceType = PaymentReferenceType.Default;

payment.PaymentMethodCode = "MC";

payment.CurrencyCode = “BRL”;

payment.ChannelType = ChannelType.API;

payment.QuotedCurrencyCode = “BRL”;

payment.QuotedAmount = 78.23M;

payment.Status = BookingPaymentStatus.New;

payment.AccountNumber = "5210000010001001";

payment.Expiration = DateTime.Parse("2007-12-30T00:00:00");

payment.FundedDate = DateTime.Parse("1800-01-01T00:00:00");

payment.PaymentText = "MC payment";

payment.PaymentFields = new PaymentField[2];

payment.PaymentFields[0] = new PaymentField();

payment.PaymentFields[0].FieldName = "CC::VerificationCode";

payment.PaymentFields[0].FieldValue = "998";

payment.PaymentFields[1] = new PaymentField();

payment.PaymentFields[1].FieldName = "CC::AccountHolderName";

payment.PaymentFields[1].FieldValue = “João da Silva”;

// DCC backward compatibility

// any value other than string.empty will enable

// the following 2.0.1 DCC/TDS processing

payment.ValidationDCCPutInState = "EnableNewDccTds";

bool waiveFee = false;

BookingPaymentResponse paymentResponse;

paymentResponse = bookingAPI.AddPaymentToBooking(sessionContext, payment, waiveFee);

bool DCCSupported = false;

if (paymentResponse.ValidationErrors.Length > 0)

{

Console.WriteLine("Payment validation failed");

return pmt;

}

pmt = (ExternalAccountPayment)paymentResponse.NewPayment;

// note: if SkyPay configured without DCC or TDS this will always be true

if (pmt.PaymentAddedToState)

{

return pmt;

}

if (pmt.ValidationDCCApplicable)

{

// there is a DCC offer

// if there is a DCC Offer the application

// must call one of the following

// 1. AcceptDCCOffer

// 2. RejectDCCOffer

// 3. DCCNotOffered

Page 29: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

// the application determines if DCC is supported

if (DCCSupported)

{

// the application will either accept or reject the offer

// in this case accept the offer

bookingAPI.AcceptDCCOffer(sessionContext, pmt);

}

else

{

// or DCC is not supported by the application

bookingAPI.DCCNotOffered(sessionContext, pmt);

}

// add the updated payment to booking state

bookingAPI.AddPaymentToBooking(sessionContext, pmt, waiveFee);

if (paymentResponse.ValidationErrors.Length > 0)

{

Console.WriteLine("Payment validation failed");

return pmt;

}

// note: if TDS is applicatble the payment will not be in state

if (pmt.PaymentAddedToState)

{

// commit is used to update the PNR in the Database

return pmt;

}

}

if (pmt.ValidationTDSApplicable)

{

Console.WriteLine("Use URL to redirect to Verified by Visa web site");

Console.WriteLine(pmt.ValidationTDSAcsURL.ToString());

// save the PaRes returned in the post back from the TDS site

String postBack_paRes = String.Empty;

pmt.ValidationTDSPaRes = postBack_paRes;

// add the updated payment to booking state

bookingAPI.AddPaymentToBooking(sessionContext, pmt, waiveFee);

if (paymentResponse.ValidationErrors.Length > 0)

{

Console.WriteLine("Payment validation failed");

return pmt;

}

if (pmt.PaymentAddedToState)

{

// commit is used to update the PNR in the Database

return pmt;

}

Console.WriteLine("TDS request did not validate");

}

else

{

Console.WriteLine("Error payment not in state");

}

Page 30: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Adicionar pagamento a um agendamento - Fluxograma

Adicionar

pagamento a um

Agendamento

Erros de

ValidaçãoErro

Pagamento

adicionado ao

estado

Se DCC/TDS não

configurado então o

pagamento estará no

estado

DCC aplicável A

Cliente suporta

DCC

Chamar

DCCNotOferred

Chamar

AcceptDCCOffer

Ou

RejectDCCOffer

Adicionar

pagamento ao

Agendamento

Erros de

validaçãoErro

Pagamento

adicionado ao

Estado

Adição de pagamento

concluída.

Retornar

A

A

TDS aplicávelErro. Pmt não está

no estado

Cliente usa TDS

URL para

redirecionar para

Verified do site Visa

Inserir token

retornado no

ValidationTDSPaRes

Adicionar

pagamento ao

agendamento

Erros de

validaçãoErro

Pagamento

adicionado ao

estado

Requisição do

TDS não validado

Adição de pagamento

concluída.

Retornar

Page 31: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Adicionar pagamento utilizando AddPaymentToBooking

Pagamentos podem ser adicionado a um agendamento utilizando o método AddPaymentToBooking. Este método

adiciona um pagamento ao estado do agendamento. Após ser adicionado o pagamento ao estado do agendamento o

Commit deve ser utilizado para gravar o agendamento no banco de dados. O Fluxograma apresentado em “Adicionar

pagamento a um agendamento - Fluxograma” e o seguinte exemplo de código mostram como utilizar o

AddPaymentToBooking juntamente com Dynamic Currency Conversion (DCC) e 3D Secure (TDS).

Quando DCC ou TDS são utilizados, chamadas múltiplas para AddPaymentToBooking são necessárias. Para cada

chamada ao AddPaymentToBooking a propriedade PaymentAddedToState é utilizada para determinar se mais

passos são necessários para completar a adição do pagamento. Uma vez que a propriedade seja “true” o Commit é

utilizado para gravar o agendamento no banco de dados.

A primeira chamada ao AddPaymentToBooking sucederá e o pagamento será adicionado ao estado se nem DCC ou

TDS for aplicado ao pagamento. Se o pagamento não estiver no estado então uma verificação deve ser realizada para

determinar se o processamento do DCC deve ser executado. Se estiver, a aplicação determina se deve ou não utilizar

a oferta do DCC presente no pagamento retornado por AddPaymentToBooking. A aplicação deve chamar

DCCNotOffered, AcceptDCCOffer ou RejectDCCOffer para atualizar o pagamento e então AddPaymentToBooking é

chamado para atualizar o pagamento. A aplicação então verifica a propriedade PaymentAddedToState para

determinar se TDS se aplica. Se o pagamento estiver no estado então a adição do pagamento está completa.

Se o pagamento não está no estado então o processamento do TDS deve ser realizado. A aplicação utiliza a URL do

TDS fornecida no objeto de pagamento retornado pela chamada anterior ao AddPaymentToBooking, para

redirecioná-lo para o Verified do site Visa. Em cima do retorno, a aplicação insere o token de autorização na

propriedade ValidationTDSPaRes. Então AddPaymentToBooking é chamado pela última vez para tentar atualizar o

pagamento do estado do agendamento. Se o pagamento for adicionado ao estado do agendamento, o pagamento

está completo e Commit é chamado para gravar o agendamento no banco de dados. Se não a verificação não foi

bem sucedida.

DCC e TDS são somente aplicáveis para ExternalAccountPayments. Se outro tipo de pagamento for adicionado ao

agendamento, somente o primeiro passo é realizado.

Nota: Para compatibilidade inversa, os seguintes controles de campo como o DCC são processados:

payment.ValidationDCCPutInState = "EnableDccTds";

Qualquer valor diferente de uma string vazia habilitará o processamento do DCC/TDS:

ValidationDCCPutInState – Determina a forma com a qual o DCC será processado. Se ele for definido com uma string

vazia, seu comportamento corresponde às versões anteriores a 2.0.1 na qual as ofertas do DCC são automaticamente

adicionadas ao estado do agendamento e tem que ser explicitamente rejeitado. Se ele estiver definido com outro

valor o novo processo é habilitado como descrito em “Adicionar pagamento a um agendamento - Fluxograma”.

Page 32: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Adicionando pagamento com Commit

Nota: Nas versões 2.0 e posteriores é crítico que não sejam preenchidos os seguintes campos de moeda:

NominalPaymentAmount

CollectedAmount

CurrencyCode

CollectedCurrencyCode

Somente os seguintes campos de moeda devem ser preenchidos:

QuotedAmount

QuotedCurrencyCode

Pagamentos são adicionados a um agendamento existente fazendo uso do método Commit. O agendamento deve

existir no estado do agendamento antes que um pagamento seja adicionado a ele ou ocorrerão erros inesperados.

Quando você criar um pagamento, seu tipo é determinado pelo construtor que foi utilizado. No exemplo que segue

ele é um PrePaidPayment. A propriedade PaymenteMethodType deve também ser definida como PrePaid.

Se os dados do pagamento não foram fornecidos no formato correto, a seguinte exceção é lançada:

"New payments associated with the booking did not pass validation."

Os campos de pagamento também podem causar erros de validação. Os campos de pagamento são definidos no Sky

Utilities, associados ao método de pagamento e definidos como obrigatório para ser fornecido na solicitação de

pagamento, se não o pagamento não passará na validação.

Os seguintes campos são obrigatórios para um pagamento:

PaymentMethodType (deve corresponder ao tipo de pagamento)

CurrencyCode

QuotedAmount

QuotedCurrencyCode

Status

PaymentReference

ChannelType

FundedDate

Outros campos dependem do tipo de pagamento que está sendo utilizado.

Quando preencher um pagamento, esteja ciente do seguinte:

PaymentReference deve ser definido como “Default”.

ChannelType deve ser definido como “API”.

FundedDate deve ser definido com valor maior que “1800-01-01T00:00:00”.

Qualquer PaymentFields definido para o método de pagamento no Sky Utilities deve ser preenchido.

A menos que múltiplas moedas estejam sendo utilizadas, preencha somente o seguinte:

Page 33: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

CurrencyCode

QuotedCurrencyCode

QuotedAmount

Os tipos de pagamento suportados são:

AgencyAccount

CustomerAccount

ExternalAccount

PrePaid

Voucher

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

bookingRequest.RecordLocator = recordLocator;

bookingRequest.CurrencyCode = “BRL”;

bookingRequest.ReceivedBy = “João da Silva”;

bookingRequest.CommitAction = CommitAction.CommitRetrieve;

// create new payment and populate payment fields

bookingRequest.Payments = new Payment[1];

bookingRequest.Payments[0] = new PrePaidPayment();

bookingRequest.Payments[0].Status = BookingPaymentStatus.New;

bookingRequest.Payments[0].PaymentMethodType = PaymentMethodType.PrePaid;

bookingRequest.Payments[0].ReferenceType = PaymentReferenceType.Default;

bookingRequest.Payments[0].PaymentMethodCode = "CA";

bookingRequest.Payments[0].CurrencyCode = “BRL”

bookingRequest.Payments[0].ChannelType = ChannelType.API;

bookingRequest.Payments[0].QuotedCurrencyCode = “BRL”;

bookingRequest.Payments[0].QuotedAmount = 76.00M;

bookingRequest.Payments[0].AuthorizationStatus = AuthorizationStatus.Approved;

bookingRequest.Payments[0].AccountNumber = "CASH";

bookingRequest.Payments[0].Expiration = DateTime.Parse("2006-08-26T00:00:00");

bookingRequest.Payments[0].FundedDate = DateTime.Parse("2006-08-25T00:00:00");

bookingRequest.Payments[0].PaymentText = "Cash Text";

// Commit booking to save changes to the database

BookingCommitResponse br = bookingAPI.Commit(sessionContext, bookingRequest);

Fluxograma para adicionar um pagamento com Commit.

Page 34: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

FimInstanciar e preencher

BookingRequest

Criar um novo

pagamento

Preencher o novo

pagamentoChamar o Commit

Alterar Tarefas

Aceitar alterações do Horário

Este método aceita alterações do horário realizadas para os segmentos de um agendamento. Existem 2 formas de

utilizar este método:

Definir a flag AcceptAllChanges para “true”. Isto indica que todos os segmentos para todos os passageiros

neste agendamento foram aceitos.

Defina a flag AcceptAllChanges para “false”. Adiciona um Segment para cada segmento aceito. Isto diz que

este segmento foi aceito para todos os passageiros.

O AcceptChangesRequest também tem 2 queue codes (CurrentQueueCode e ErrorQueueCode). Ambos são opcionais.

Se o CurrentQueueCode for definido ele tenta remover o agendamento desta fila. Se o CurrentQueueCode for vazio

ele não faz nada.

Se ErrorQueueCode for definido e um erro ocorrer, então o agendamento é colocado na fila definida pelo

ErrorQueueCode. Atualmente, existe somente um erro possível. Se um ou mais dos segmentos dados não puder

encontrar um correspondente no agendamento, então um resultará num erro. Se ErrorQueueCode for vazio e um

erro ocorrer, nada é feito.

Se CurrentQueueCode e ErrorQueueCode forem definidos com a mesma fila e ocorrer um erro, o agendamento é

retido na mesma fila.

//Create an instance of BookingManagerClientSoap

BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

AcceptChangesRequest request = new AcceptChangesRequest();

request.AcceptAllChanges = true;

request.RecordLocator = "Y1KB2L";

request.Segments = GetAvailability(sessionContext).Schedule[0].Journeys[0].Segments;

bookingAPI.AcceptScheduleChanges(sessionContext, request);

Page 35: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Fluxograma para aceitar alterações de Horário

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

FimInstanciar e preencher

AcceptChangesRequest

Obter segmentos

através de

GetAvailability

Chamar

AcceptScheduleChanges

Adicionar comentários à reserva

Existem 2 formas para adicionar comentários a um agendamento existente. O primeiro é por inclusão de

comentários no Commit, a outra é utilizar o método AddBookingComments. Seguem os exemplos de cada um.

Adicionar comentários utilizando Commit

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

bookingRequest.BookingComments = new BookingComment[1];

bookingRequest.BookingComments[0] = new BookingComment();

bookingRequest.BookingComments[0].State = MessageState.New;

bookingRequest.BookingComments[0].CommentText = "Added Cash Payment";

bookingRequest.BookingComments[0].CommentType = CommentType.Default;

bookingRequest.BookingComments[0].CreatedAgentID = 7;

// Commit booking to save changes to the database

Fluxograma para adicionar comentários à reserva

Page 36: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

FimInstanciar e preencher

BookingRequest

Instanciar e

preencher

BookingComments

Chamar

Commit

Adicionar comentários utilizando o método AddBookingComments

Nota: AddBookingComments não precisa de um Booking carregado no State Booking. Ele pode ser usado

sem alterar o State Booking.

SkyChannelAPI.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

BookingComment[] bookingComments = new BookingComment[2];

bookingComments[0] = new BookingComment();

bookingComments[0].CommentText = "Line 1 Added Comment from Web API";

bookingComments[0].CommentType = CommentType.Default;

bookingComments[1] = new BookingComment();

bookingComments[1].CommentText = "Line 2 Added Comment from Web API";

bookingComments[1].CommentType = CommentType.Default;

bookingAPI.AddBookingComments(sessionContext, recordLocator, bookingComments);

Fluxograma para adicionar comentários utilizando AddBookingComments.

Page 37: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

FimInstanciar e preencher

BookingComment

Chamar

AddBookingComments

Adicionar Detalhes para Menores de idade

Adiciona um Infant SSR para um passageiro. Perceba que o passageiro tem que estar incluído num agendamento ou

os dados do menor não serão associados corretamente.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

SkyChannel.Booking booking = bookingAPI.GetBooking(sessionContext, recordLocator);

// Sell Infant SSR to passenger

SkyChannel.SellSSRRequest sellSsrReques = new SellSSRRequest();

sellSsrRequest.SSRRequests = new SSRRequest[1];

sellSsrRequest.SSRRequests[0] = new SSRRequest();

sellSsrRequest.SSRRequests[0].ActionStatusCode = "NN";

sellSsrRequest.SSRRequests[0].SSRCode = "INF1";

sellSsrRequest.SSRRequests[0].SSRNumber = 0;

sellSsrRequest.SSRRequests[0].STD = booking.JourneyServices[0].Segments[0].STD;

sellSsrRequest.SSRRequests[0].FlightDesignator = new FlightDesignator();

sellSsrRequest.SSRRequests[0].FlightDesignator =

booking.JourneyServices[0].Segments[0].Legs[0].FlightDesignator;

sellSsrRequest.SSRRequests[0].DepartureStation = booking.JourneyServices[0].Segments[0].DepartureStation;

sellSsrRequest.SSRRequests[0].ArrivalStation = booking.JourneyServices[0].Segments[0].ArrivalStation;

sellSsrRequest.SSRRequests[0].PassengerNumber = 0;

SkyChannel.SellSSRResponse sellSsrResponse = bookingAPI.SellSSR(sessionContext, sellSsrRequest);

System.Console.WriteLine("Total Cost {0:C}", sellSsrResponse.TotalCost);

bookingRequest.RecordLocator = recordLocator;

bookingRequest.CurrencyCode = “BRL”;

bookingRequest.ReceivedBy = “João da Silva”;

bookingRequest.CommitAction = CommitAction.CommitRetrieve;

Adiciona Informação de identificação do menor para um passageiro existente.

// identify passenger to update

bookingRequest.BookingPassengers = booking.BookingPassengers;

// create travel document objects

bookingRequest.BookingPassengers[0].PassengerInfant = new PassengerInfant();

// add infant information to passenger

Page 38: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

bookingRequest.BookingPassengers[0].PassengerInfant.State = MessageState.New;

bookingRequest.BookingPassengers[0].PassengerInfant.Name = new Name();

bookingRequest.BookingPassengers[0].PassengerInfant.Name.FirstName = "João";

bookingRequest.BookingPassengers[0].PassengerInfant.Name.LastName = "Silva";

bookingRequest.BookingPassengers[0].PassengerInfant.Gender = Gender.Male;

bookingRequest.BookingPassengers[0].PassengerInfant.DOB = DateTime.Parse("2005-08-13T00:00:00");

bookingRequest.BookingPassengers[0].Infant = true;

// Commit booking to save changes to the database

BookingCommitResponse br = bookingAPI.Commit(sessionContext, bookingRequest);

Fluxograma para adicionar detalhes a menores de idade.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Fim

Instanciar

BookingRequest

Chamar

GetBooking

Instanciar e preencher

SellSSRRequest

Chamar SellSSR e

atribuir a um

SellSSRResponse

Configurar o

BookingRequest com as

informações do passageiro

Instaciar e preencher um

PassengerInfant. Atribuí-lo

ao BookingRequest

Chamar

Commit

Adicionar detalhes do documento de viagem SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

SkyChannel.Booking booking = bookingAPI.GetBooking(sessionContext, recordLocator);

bookingRequest.RecordLocator = recordLocator;

bookingRequest.CurrencyCode = “BRL”;

bookingRequest.ReceivedBy = “João da Silva”;

bookingRequest.CommitAction = CommitAction.CommitRetrieve;

// identify passenger to update

bookingRequest.BookingPassengers = booking.BookingPassengers;

// create travel document objects

bookingRequest.BookingPassengers[0].PassengerTravelDocs = new PassengerTravelDoc[1];

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0] = new PassengerTravelDoc();

bookingRequest.BookingPassengers[0].PassengerTravelDocs = new PassengerTravelDoc[1];

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0] = new PassengerTravelDoc();

Page 39: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

// populate travel document data and add to passenger

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].State = MessageState.New;

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].Name = new Name();

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].Name.FirstName = "João";

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].Name.MiddleName = "da";

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].Name.LastName = "Silva";

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].DocNumber = "898902";

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].DOB = DateTime.Parse ("1985-08-13T00:00:00");

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].DocTypeCode = "P";

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].CreatedDate = DateTime.Parse("2000-04-

01T00:00:00");

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].ExpirationDate = DateTime.Parse("2010-04-

01T00:00:00");

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].IssuedByCode = "BR";

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].ModifiedAgentID = 7;

bookingRequest.BookingPassengers[0].PassengerTravelDocs[0].CreatedAgentID = 7;

// Commit the booking to save changes to the database

BookingCommitResponse br = bookingAPI.Commit(sessionContext, bookingRequest);

Fluxograma para adicionar detalhes ao documento de viagem.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Instanciar

BookingRequest

Chamar

GetBooking

Identificar os

passageiros que

serão atualizados

Criar e preencher

PassengerTravelDoc

Chamar

CommitFim

Page 40: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Adicionar / Cancelar taxas numa reserva

Venda de Taxa de Serviço

Isto vende uma taxa de serviço e a aplica no agendamento do estado atual (atualiza o estado atual com os dados

fornecidos no SellServiceFeeRequest).

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SellServiceFeeRequest feeRequest = new SellServiceFeeRequest();

feeRequest.PassengerNumber = 0;

feeRequest.FeeCode = "CMF";

feeRequest.CollectedCurrencyCode = “BRL”;

feeRequest.Note = "API added Service Fee";

BookingResponse br = bookingAPI.SellServiceFee(sessionContext, feeRequest);

Fluxograma para adicionar taxas a uma reserva.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

FimInstanciar e preencher

SellServiceFeeRequest

Chamar

SellServiceFee

Cancelar Taxa

Isto cancela um preço de taxa de serviço incluindo um objeto adicional PassenderFee como o ajuste que contem

uma taxa negativa e impostos negativos na taxa (atualiza o estado atual com os dados fornecidos no

SellServiceFeeRequest).

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

Booking booking = bookingAPI.GetBooking(sessionContext, recordLocator);

FeeRequest cancelFeeRequest = new FeeRequest();

cancelFeeRequest.PassengerNumber = 0;

cancelFeeRequest.NetAmount = booking.BookingPassengers[0].PassengerFees[0].ServiceCharges[0].Amount;

cancelFeeRequest.NetAmount = cancelFeeRequest.NetAmount * -1;

cancelFeeRequest.FeeNumber = booking.BookingPassengers[0].PassengerFees[0].FeeNumber;

BookingResponse cFeeBr = bookingAPI.CancelFee(sessionContext, cancelFeeRequest);

Fluxograma para Cancelar uma taxa de uma reserva.

Page 41: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

FimChamar

GetBooking

Instanciar e configurar

FeeRequest

Chamar

CancelFee

Adicionar / Alterar atribuição de assentos

Nota: Quando se atribui um assento através do método AssignSeats para um agendamento, o

agendamento deve existir no estado do agendamento ou erros inesperados ocorrerão. Os valores

utilizados para o campo SeatAssignmentMode são determinados quando as atribuições de assento são

feitas. Para um agendamento, utilize o valor “PreSeatAssignment”, para checkin utilize o valor “CheckIn”.

Se um agendamento está no estado o valor “AutoDetermine” pode ser utilizado.

Obter Disponibilidade de Assento

Tenha ciência de que GetSeatAvailability é sensível ao conteúdo do estado de agendamento atual. Se o estado do

agendamento é preenchido com os dados do agendamento, a solicitação do assento deve referir aos vôos do estado,

se a solicitação não retornar assentos no SeatAvailabilityResponse. O uso do GetSeatAvailability depende de como

se pretende atribuir os assentos. O campo SeatAssignmentMode determina como a requisição de disponibilidade

será tratada. Se os assentos são atribuídos no check-in então defina o SeatAssignmentMode para “CheckIn”. Se os

assentos são prefixados antes do check-in, então defina o SeatAssignmentMode para “PreSeatAssignment” e garanta

que o estado do agendamento esteja consistente com a solicitação do GetSeatAvailabilit, senão os assentos não

serão retornados.

Similarmente, atribuir assentos é sensível ao estado do agendamento, a configuração para SeatAssignmentMode e a

presença do localizador no SellSeatRequest. Uma forma de determinar quais os dados a fornecer é basear-se na

tarefa que está sendo realizada. Se a tarefa está relacionada ao agendamento, então o método stateful é utilizado. A

SellSeatRequest contem um campo para RecordLocator e outro para SeatAssignmentMode. As configurações destes

campos determinam como os assentos são atribuídos. Se um agendamento está sendo atualizado pelo Commit, o

estado do agendamento deve estar preenchido. Para fazer assim, ajuste o RecordLocator para “null” e o

SeatAssignmentMode para “PreSeatAssignment”. Se os assentos estão sendo atribuídos pelo check-in então o estado

Page 42: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

do agendamento é utilizado; ajuste o RecordLocator para o localizador do agendamento desejado e defina

SeatAssignmentMode para “CheckIn”.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

SkyChannel.Booking booking = bookingAPI.GetBooking(sessionContext, recordLocator);

SeatAvailabilityRequest seatAvailabilityRequest = new SeatAvailabilityRequest();

seatAvailabilityRequest.FlightDesignator = new FlightDesignator();

seatAvailabilityRequest.FlightDesignator = booking.JourneyServices[0].Segments[0].Legs[0].FlightDesignator;

seatAvailabilityRequest.DepartureStation = booking.JourneyServices[0].Segments[0].DepartureStation;

seatAvailabilityRequest.ArrivalStation = booking.JourneyServices[0].Segments[0].ArrivalStation;

seatAvailabilityRequest.STD = booking.JourneyServices[0].Segments[0].STD;

seatAvailabilityRequest.SeatAssignmentMode = SeatAssignmentMode.PreSeatAssignment;

seatAvailabilityRequest.IncludeSeatFees = false;

seatAvailabilityRequest.IncludeSSRSeatMapCode = false;

SeatAvailabilityResponse seatAvailResponse = bookingAPI.GetSeatAvailability(sessionContext,

seatAvailabilityRequest);

Fluxograma para obter disponibilidade de assentos.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Instanciar

BookingRequest

Chamar

GetBooking

Instanciar e preencher

SeatAvailabilityRequest

Instanciar e preencher

FlightDesignator

Chamar

GetSeatAvailabilityFim

Atribuindo um assento

short[] pax = { 1 }; // designate which passenger is being assigned a seat

SellSeatRequest seats = new SellSeatRequest();

seats.RecordLocator = recordLocator;

seats.SeatAssignmentMode = SeatAssignmentMode.PreSeatAssignment;

seats.SeatRequests = new SeatRequest[1];

seats.SeatRequests[0] = new SeatRequest();

seats.SeatRequests[0].SeatPreference = SeatPreference.None;

seats.SeatRequests[0].FlightDesignator = new FlightDesignator();

seats.SeatRequests[0].FlightDesignator = booking.JourneyServices[0].Segments[0].Legs[0].FlightDesignator;

seats.SeatRequests[0].DepartureStation = booking.JourneyServices[0].Segments[0].DepartureStation;

Page 43: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

seats.SeatRequests[0].ArrivalStation = booking.JourneyServices[0].Segments[0].ArrivalStation;

seats.SeatRequests[0].STD = booking.JourneyServices[0].Segments[0].STD;

seats.SeatRequests[0].PassengerNumbers = pax;

seats.BlockType = SeatHoldType.None;

if(seatAvailResponse.AircraftConfiguration.AircraftCabins[0].AircraftSeats[0][0].SeatAvailability ==

SeatAvailability.Open)

{

seats.SeatRequests[0].Seat = seatAvailResponse.AircraftConfiguration.AircraftCabins[0].

AircraftSeats[0][0].Seat;

}

SellSeatResponse seatResponse = bookingAPI.AssignSeats(sessionContext, seats);

Fluxograma para atribuição de assentos.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Definir a que

passegeiro deve-se

atribuir um assento

Instanciar e

preencher

SellSeatRequest

Fim

Assentos

disponíveis

Atribuir assento ao

objeto

SellSeatRequest

criado

Sim

Chamar

AssignSeats

Page 44: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Adicionar / Alterar / Excluir um Segmento de uma reserva

Adicionar um segmento

Para adicionar novos segmentos ao estado do agendamento, faça o seguinte:

Criar uma instância do BookingManagerClientSoap para acessar a API.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

Recuperar o agendamento a ser alterado.

Se o agendamento a ser alterado não está no estado do agendamento então recupere o agendamento no qual os

segmentos serão adicionados. Veja a seção Recuperando Agendamentos.

Booking booking = bookingAPI.GetBooking(sessionContext, recordLocator);

Obter a disponibilidade para recuperar os dados do segmento.

SkyChannel.AvailabilityRequest availabilityRequest = new AvailabilityRequest();

PaxPriceType[] priceTypes = new PaxPriceType[1];

priceTypes[0] = new PaxPriceType();

priceTypes[0].PaxType = "ADT";

availabilityRequest.BeginDate = DateTime.Parse("2006-08-26T00:00:00");

availabilityRequest.EndDate = DateTime.Parse("2006-08-26T00:00:00");

availabilityRequest.ArrivalStation = "JFK";

availabilityRequest.DepartureStation = "SLC";

availabilityRequest.FlightType = FlightType.All;

availabilityRequest.CurrencyCode = “BRL”;

availabilityRequest.PaxPriceTypes = priceTypes;

availabilityRequest.Dow = DOW.Daily;

SkyChannel.AvailabilityResponse availResponse = new AvailabilityResponse();

availResponse = bookingAPI.GetAvailability(sessionContext, availabilityRequest);

Faça uma requisição de venda para atualizar, adicione os segmentos para o estado de agendamento.

SkyChannel.SellRequest sellRequest = new SellRequest();

sellRequest.PriceRequest = new PriceRequest();

sellRequest.PriceRequest.CurrencyCode = “BRL”

sellRequest.PriceRequest.PaxResidentCountry = "BR";

sellRequest.JourneyRequests = new JourneyRequest[1];

sellRequest.JourneyRequests[0] = new JourneyRequest();

sellRequest.JourneyRequests[0].Segments = new SegmentRequest[1];

SegmentRequest[] srSegments = new SegmentRequest[1];

srSegments[0] = new SegmentRequest();

srSegments[0].DepartureStation = availResponse.Schedule[0].Journeys[0].Segments[0].DepartureStation;

srSegments[0].STD = availResponse.Schedule[0].Journeys[0].Segments[0].STD;

srSegments[0].ArrivalStation = availResponse.Schedule[0].Journeys[0].Segments[0].ArrivalStation;

srSegments[0].STA = availResponse.Schedule[0].Journeys[0].Segments[0].STA;

srSegments[0].Legs = availResponse.Schedule[0].Journeys[0].Segments[0].Legs;

srSegments[0].FlightDesignator = new FlightDesignator();

srSegments[0].FlightDesignator =

availResponse.Schedule[0].Journeys[0].Segments[0].Legs[0].FlightDesignator;

srSegments[0].ActionStatusCode = "NN";

srSegments[0].PaxCount = 2;

srSegments[0].ClassOfService = availResponse.Schedule[0].Journeys[0].Fares[0].ClassOfService;

sellRequest.JourneyRequests[0].Segments = srSegments;

sellRequest.JourneyRequests[0].CarrierCode = "AD";

sellRequest.JourneyRequests[0].FareBasis = availResponse.Schedule[0].Journeys[0].Fares[0].FareBasis;

sellRequest.JourneyRequests[0].RuleNumber = availResponse.Schedule[0].Journeys[0].Fares[0].RuleNumber;

Page 45: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

SkyChannel.SellResponse sellResponse = bookingAPI.Sell(sessionContext, sellRequest);

Submeta o agendamento para salvar as alterações no banco de dados.

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

bookingRequest.RecordLocator = recordLocator;

bookingRequest.CurrencyCode = “BRL”;

bookingRequest.ReceivedBy = “João da Silva”;

bookingRequest.CommitAction = CommitAction.CommitRetrieve;

BookingCommitResponse br = bookingAPI.Commit(sessionContext, bookingRequest);

Fluxograma para adicionar um segmento.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Chamar

GetBooking

Instanciar e

preencher

AvailabilityRequest

Instanciar e

preencher

PaxPriceType

Instanciar

AvailabilityResponse

Chamar

GetAvailability

Instanciar e

preencher

SellRequest

Instanciar e

preencher

SegmentRequest

Chamar

Sell

Instanciar e

preencher

BookingRequest

Chamar

CommitFim

Page 46: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Cancelar um segmento

Para remover uma viagem especifica do estado de agendamento, faça o seguinte:

Nota: Se você utilizar CancelAll, ele requer um agendamento no estado e um Commit após a chamada.

Criar uma instância do BookingManagerClientSoap para acessar a API.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

Recuperar o agendamento a ser alterado.

Se o agendamento a ser alterado não estiver no estado do agendamento então recupere o agendamento no qual os

segmentos serão cancelados. Veja a sessão Recuperando Agendamentos.

Booking booking = bookingAPI.GetBooking(sessionContext, recordLocator);

Criar um JourneyRequest para identificar os segmentos a cancelar e chamar o método Cancel.

JourneyRequest journey = new JourneyRequest();

journey.Segments = new Segment[1];

journey.Segments[0] = new Segment();

journey.Segments[0].DepartureStation = booking.JourneyServices[0].Segments[0].DepartureStation;

journey.Segments[0].ArrivalStation = booking.JourneyServices[0].Segments[0].ArrivalStation;

journey.Segments[0].STD = booking.JourneyServices[0].Segments[0].STD;

journey.Segments[0].STA = booking.JourneyServices[0].Segments[0].STA;

journey.Segments[0].FlightDesignator = new FlightDesignator();

journey.Segments[0].FlightDesignator = booking.JourneyServices[0].Segments[0].FlightDesignator;

CancelResponse cancelResponse = bookingAPI.CancelJourney(sessionContext, journey);

Submeter o agendamento para salvar as alterações no banco de dados.

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

bookingRequest.RecordLocator = recordLocator;

bookingRequest.CurrencyCode = “BRL”;

bookingRequest.ReceivedBy = “João da Silva”;

bookingRequest.CommitAction = CommitAction.CommitRetrieve;

BookingCommitResponse br = bookingAPI.Commit(sessionContext, bookingRequest);

Page 47: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Fluxograma de cancelamento de um segmento.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Chamar

GetBooking

Instanciar e

preencher

JourneyRequest

Chamar

CancelJourney

Instanciar e

preencher

BookingRequest

Chamar

CommitFim

Cancelando uma SSR

Para cancelar uma SSR, faça o seguinte:

Recuperar o agendamento que contenha a SSR a ser cancelada utilizando um dos métodos descritos em

Recuperando Agendamentos.

Criar uma CancelSSRRequest e preenche-la com dados identificando as SSRs a serem canceladas. Em

seguida, chamar o serviço CancelSSR.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

CancelSSRRequest cancelSSRs = new CancelSSRRequest();

cancelSSRs.SSRRequests = new SSRRequest[1];

cancelSSRs.SSRRequests[0] = new SSRRequest();

cancelSSRs.SSRRequests[0].ActionStatusCode = "NN";

cancelSSRs.SSRRequests[0].SSRCode = "BIKE";

cancelSSRs.SSRRequests[0].SSRNumber = 0;

cancelSSRs.SSRRequests[0].STD = availResponse.Schedule[0].Journeys[0].Segments[0]. STD;

cancelSSRs.SSRRequests[0].FlightDesignator = new FlightDesignator();

cancelSSRs.SSRRequests[0].FlightDesignator =

availResponse.Schedule[0].Journeys[0].Segments[0].Legs[0].FlightDesignator;

cancelSSRs.SSRRequests[0].DepartureStation =

availResponse.Schedule[0].Journeys[0].Segments[0].DepartureStation;

cancelSSRs.SSRRequests[0].ArrivalStation =

availResponse.Schedule[0].Journeys[0].Segments[0].ArrivalStation;

cancelSSRs.SSRRequests[0].PassengerNumber = 0;

CancelSSRResponse cancelResponse = bookingAPI.CancelSSR(sessionContext, cancelSSRs);

// Commit the booking to save changes to the database

Page 48: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

bookingRequest.RecordLocator = recordLocator;

bookingRequest.CurrencyCode = “BRL”;

bookingRequest.ReceivedBy = “João da Silva”;

bookingRequest.CommitAction = CommitAction.CommitRetrieve;

BookingCommitResponse br = bookingAPI.Commit(sessionContext, bookingRequest);

Fluxograma do cancelamento de uma SSR.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Instanciar e

preencher

CancelSSRRequest

Chamar

CancelSSR

Instanciar e

preencher

BookingRequest

Chamar

CommitFim

Alterando um agendamento

A fim de mudar um agendamento deve-se recuperá-lo primeiro. O serviço de alteração opera no agendamento o

estado do agendamento atual. Uma vez que o agendamento esteja disponível para processamento ele pode ser

modificado.

Alterar Tarefas - Nota

Sobre o método AssignSeats. Quando atribuir assentos para um agendamento, este deve existir no estado do

agendamento ou erros inesperados ocorrerão. Os valores utilizados para o campo SeatAssignmentMode são

determinados quando as atribuições dos assentos são feitas. Para um agendamento utilize o valor

“PreSeatAssignment”, para um checkin utilize o valor “CheckIn”. Se o agendamento está no estado o valor

“AutoDetermine” pode ser utilizado.

Copiar uma reserva

Não existem APIs específicas para copiar o agendamento. Isto é tratado APIs clientes pela recuperação de um

agendamento e pela criação de um novo agendamento. Os dados do agendamento original são copiados para o novo

Page 49: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

utilizando as tarefas descritas em Criar um agendamento. Antes de submeter o novo agendamento o agendamento

original deve ser apagado.

skychannel.bookingmanagerclientsoap bookingAPI = new BookingManagerClientSoap();

bookingAPI.Clear(sessionContext);

Dividir uma reserva

Mover um ou mais porém, não todos os passageiros de um PNR existente para um novo PNR filho. O resultado é

como se dividisse um PNR em dois. Pelo menos um passageiro deve restar no PNR original.

SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

DivideRequest divideRequest = new DivideRequest();

divideRequest.SourceRecordLocator = recordLocator;

divideRequest.AutoDividePayments = true;

divideRequest.PassengerNumbers = new short[1];

divideRequest.PassengerNumbers[0] = 1;

divideRequest.OverrideRestrictions = true;

divideRequest.ReceivedBy = "ClaudioSilva";

divideRequest.AddComments = true;

DivideResponse divideResponse = bookingAPI.Divide(sessionContext, divideRequest);

Console.WriteLine("After divide child record locator = " + divideResponse.ChildRecordLocator);

Fluxograma para dividir uma reserva.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Instanciar e

preencher

DivideRequest

Chamar

DivideFim

Obter os pagamentos de uma reserva

Os pagamentos podem ser recuperados de um agendamento existente utilizando o método GetBookingPayments. O

método retorna um conjunto de objetos Payment associados ao agendamento.

//Create an instance of BookingManagerClientSoap

BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

Payment[] payments = bookingAPI.GetBookingPayments(sessionContext, "TBVSFK");

Page 50: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Page 51: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Modificar detalhes do contato SkyChannel.BookingManagerClientSoap bookingAPI = new BookingManagerClientSoap();

SkyChannel.BookingRequest bookingRequest = new BookingRequest();

SkyChannel.Booking booking = bookingAPI.GetBooking(sessionContext, recordLocator);

bookingRequest.RecordLocator = recordLocator;

bookingRequest.CurrencyCode = “BRL”;

bookingRequest.ReceivedBy = "João da Silva";

bookingRequest.CommitAction = CommitAction.CommitRetrieve;

// identify contacts

bookingRequest.BookingContacts = booking.BookingContacts;

bookingRequest.BookingContacts[0].State = MessageState.New;

bookingRequest.BookingContacts[0].CompanyName = "ABC Travel";

// Commit booking to save changes to the database

BookingCommitResponse br = bookingAPI.Commit(sessionContext, bookingRequest);

Fluxograma para modificar detalhes de um contato.

Início SessionContext

Instanciar

SessionManagerClientSoap

Utilizar uma instância de

SessionManagerClientSoap

Efetuar Logon

Instanciar

BookingManagerClientSoap

Instanciar e

preencher

BookingRequest

Chamar

CommitFim

Enviar uma reserva para a fila

Veja os seguintes tópicos para informações de como enviar uma reserva para a fila:

Tarefas Iniciais

Adicionar um agendamento na fila

Tarefas de alteração

Excluir um agendamento de um fila ou outra

Mover um agendamento de uma fila ou outra

Tarefas de recuperação

Page 52: Web Services - Guia Do Desenvolvedor v10!2!1

Documentação da API de WebServices NewSkies

Azul Linhas Aéreas Brasileiras WebServices API NewSkies Versão 1.0

Buscando filas de agendamentos