Incompatibilidade de preço ou outras exceções de alteração de preço

  1. Houve uma alteração de preço no estabelecimento antes que o usuário fizesse a reserva ou as atualizações de conversão de moeda não correspondem mais à disponibilidade das tarifas do quarto quando retornadas na resposta. Quando a tarifa não corresponde ao banco de dados, um erro de incompatibilidade de preço é retornado.
  2. Nesses casos em que uma alteração de preço "real" não ocorreu de fato, mas uma mensagem de alteração ou incompatibilidade de preço foi recebida, verifique a precisão de todos os valores sendo enviados na reserva.  Dados/valores incorretos enviados nos elementos rateKey, roomTypeCode, rateCode ou total geram uma incompatibilidade de preço no momento da reserva. Cada um dos valores desses elementos deve corresponder à seleção do usuário na resposta de disponibilidade do quarto.
  3. Um erro de incompatibilidade de preço também pode ocorrer quando o local e a moeda não correspondem à localização geográfica de customerIpAddress. Nesses casos raros, maneje o erro reenviando a reserva e omitindo customerIpAddress nessa solicitação. Se a reserva for bem-sucedida, a incompatibilidade de preço foi gerada por uma correspondência geográfica imprecisa dos valores enviados. Os valores de encargo são calculados geograficamente com base nesses itens e quando não correspondem com precisão podem gerar a incompatibilidade dos valores de encargo com a tarifa do banco de dados para essa atribuição.

Mensagem de exemplo retornada ao usar a revisão secundária 9 da versão 3 ou superior:

Exemplo de resposta XML

<ns2:HotelRoomReservationResponse xmlns:ns2 = "http://v3.hotel.wsapi.ean.com/">
   <EanWsError>
      <itineraryId>XXXXXX</itineraryId>
      <handling>RECOVERABLE</handling>
      <category>PRICE_MISMATCH</category>
      <exceptionConditionId>1673</exceptionConditionId>
      <ErrorAttributes>
         <errorAttributesMap>
            <entry>
               <key>RATE_CHANGE</key>
               <value>121.89</value>
            </entry>
            <entry>
               <key>RATE_KEY</key>
               <value>4fc6fd3b-03b4-49e2-96cf-22b1aa4ad89b</value>
            </entry>
         </errorAttributesMap>
      </ErrorAttributes>
      <presentationMessage>Falha na verificação de preço da reserva final antes da confirmação. (Tarifa solicitada: 120,89(USD)) (Nova tarifa: 121,89(USD)). Tente novamente com a nova tarifa.</presentationMessage>
      <verboseMessage>
         Final Reservation Price Check failed before booking QuoteKey: 4fc6fd3b-03b4-49e2-96cf-22b1aa4ad89b
         RatePlan: status = Available
         roomTypeId = 19304
         ratePlanId = 200245232
         ....  [dados gerais da solicitação removidos para concisão] ...
         Falha na verificação de preço da reserva final antes da confirmação. (Tarifa solicitada: 120,89(USD)) (Nova tarifa: 121,89(USD)). Tente novamente com a nova tarifa.
      </verboseMessage>
      <ServerInfo
         serverTime = "13:52:51.848-0500"
         timestamp = "1318963971"
         instance = "167"/>
   </EanWsError>
   <customerSessionId>0AB81CA7-9955-D913-3162-AA666D9074FD</customerSessionId>
</ns2:HotelRoomReservationResponse>

Exemplo de resposta JSON

{
    "HotelRoomReservationResponse" : {
        "EanWsError" : {
            "itineraryId" : XXXXX,
            "handling" : "RECOVERABLE",
            "category" : "PRICE_MISMATCH",
            "exceptionConditionId" : 1673,
            "ErrorAttributes" : {
                "errorAttributesMap" : {
                    "entry" : [{
                        "key" : "RATE_CHANGE",
                        "value" : 151.8
                    },
                    {
                        "key" : "RATE_KEY",
                        "value" : "d18ce59c-82ba-4dbd-8f9a-5b04ec2283bd"
                    }]
                }
            },
            "presentationMessage" : "Falha na verificação de preço da reserva final antes da confirmação.
             (Tarifa solicitada: 141,8(USD)) (Nova tarifa: 151,8(USD)). Tente novamente com a nova tarifa.",
            "verboseMessage" : "Final Reservation Price Check failed before booking QuoteKey: d18ce59c-82ba-4dbd-8f9a-5b04ec2283bd \nRatePlan: status =                Available\nroomTypeId = 8282\nratePlanId = 8282\nrateRuleId = 200584001\nratePlanType =
           Expedia CollectStandard\nratePlanName = quarto Deluxe com duas camas de casal
           ....  [dados gerais da solicitação removidos para concisão] ...
           Falha na verificação de preço da reserva antes da confirmação. (Tarifa solicitada: 141,8(USD)) (Nova tarifa: 151,8(USD)).
           Tente novamente com a nova tarifa.",
            "ServerInfo" : {
                "@serverTime" : "17:06:46.659-0500",
                "@timestamp" : "1320358006",
                "@instance" : "42"
            }
        },
        "customerSessionId" : "0ABAA856-E9C5-4913-36B2-5C0F37906376"
    }
}

O erro aparece da seguinte forma no nosso sistema:

SUPPLIER : 13
      FUNCTION : 3
      CATEGORY : 25
      HANDLING : 1
      SEVERITY : 0
      ITIN ID : XXXXX
      DB MSG : Expedia Reservation Supplier Price Mismatch Exception
      PRESENTATION MESSAGE: O preço do quarto selecionado foi alterado.
      VERBOSE MESSAGE: 3000: The price has changed.
  • OBSERVE que handling=RECOVERABLE indica que o processo será "recuperável" se for feito corretamente.
  • OBSERVE que category=PRICE_MISMATCH para exceções de alteração de preço
  • Além disso, reservationStatusCode=DT. A solicitação foi excluída e NÃO será acompanhada por um agente; um e-mail NÃO será enviado ao usuário quando o processo recuperável pelo afiliado (handling=RECOVERABLE).

Forçar um erro de incompatibilidade de preço para teste

Para forçar uma resposta de erro de incompatibilidade de preço, altere o valor "chargeableRate" na solicitação de reserva antes de enviá-la. Por exemplo, se o valor retornado na resposta do quarto a ser usado como chargeableRate for 150.00, envie qualquer outro valor na solicitação de reserva, como 151.00. A exceção retornada permitirá que você teste seu algoritmo selecionando atributos de erro para reenviar na nova solicitação de reserva.

Observe também que uma ID de itinerário é retornada nesses erros, a qual pode ser enviada na solicitação de reserva subsequente. Ao usar a mesma ID de itinerário, menos solicitações com erro canceladas serão incluídas nas estatísticas do afiliado e todas as tentativas do mesmo usuário para a mesma solicitação de reserva estarão no mesmo itinerário.

Siga as instruções na solicitação de reserva sobre como usar a ID de itinerário na solicitação de reserva reenviada.

Recuperação de falha na reserva pelo manejo de erro como descrito:

  • minorRev=9 ou superior retorna novos valores de entrada de mapa para ajudá-lo na recuperação desse erro. Também elimina a necessidade de atualizar qualquer resultado de disponibilidade de quarto para obter os preços atuais ao incluir o novo valor, que pode ser automaticamente recuperado da mensagem de erro e usado para reenviar a reserva.
  • Exiba a nova tarifa do quarto que deverá ser aceita pelo usuário para evitar qualquer problema com o cliente nas cobranças esperadas.
  • Inclua o novo valor de rateKey na reserva reenviada.

Método alternativo para aplicativos que não usam a revisão secundária 9 da versão 3 ou superior:

  • Atualize o resultado de disponibilidade do quarto e compare as tarifas para o quarto selecionado

Se a tarifa for menor:

  • Reenvie a solicitação de reserva com o novo preço menor e a chave de tarifa
  • Notifique o usuário da tarifa menor reservada no resultado da reserva/confirmação
  • Alguns países ou regiões internacionais podem ter implicações legais que obriguem você a informar ao usuário sobre a nova tarifa (mesmo sendo menor do que a seleção original) antes da efetivação automática da reserva. Verifique se você está seguindo todos os requisitos legais locais para seu país ou região.

Se a tarifa for maior:

  • Notifique o usuário de que a tarifa foi alterada
  • Exiba a nova tarifa do quarto para a seleção original com as opções de quarto adicionais do estabelecimento
  • Dê ao usuário a opção de
    1. Aceitar a nova tarifa e prosseguir com a reserva
    2. Selecionar um novo quarto e prosseguir com a reserva
    3. Selecionar um novo hotel na lista anterior

Envie a nova seleção de reserva com a entrada do usuário da tentativa de reserva original armazenada temporariamente. Isso é conveniente para o usuário, pois as mesmas informações pessoais e de pagamento não precisam ser inseridas novamente.

Se o erro de incompatibilidade de preço ou alteração de tarifa ocorrer em mais de duas solicitações válidas para o mesmo estabelecimento, há um problema com esse estabelecimento e um novo hotel deverá ser selecionado.