Developer Hub
Esta é uma tradução automática

Visão geral da atribuição de reservas

Relatório sobre a conversão de anúncios provenientes de conteúdo patrocinado.

Como os anunciantes usam anúncios patrocinados para aumentar a visibilidade e as reservas, é essencial gerar relatórios sobre as conversões geradas ou influenciadas por esses anúncios para comunicar o valor do investimento em publicidade. Esse valor é determinado pelas reservas que ocorrem depois que os anúncios são visualizados ou clicados. Apresentamos os resultados da atribuição de impression-driven e click-driven, utilizando um método de atribuição de 7 dias para last-touch.

A integração com a API de Anúncios Patrocinados do Rapid Lodging exige que você nos envie informações de conversão atribuídas a cliques em anúncios patrocinados, mesmo que a tarifa reservada após o clique não seja uma tarifa Expedia Group. As informações da reserva devem ser fornecidas independentemente de o clique mais recente antes da reserva ter sido em um anúncio patrocinado ou em um resultado de pesquisa orgânica.

Existem duas maneiras de nos fornecer informações de conversão:

Information

Observação

Expedia Group utiliza a solução AWS Clean Rooms, que não está disponível em todas as regiões. Consulte seu consultor B2B da Expedia Group para confirmar a elegibilidade.

Salas limpas de dados

As salas limpas de dados (DCRs) oferecem um ambiente seguro para analisar o desempenho em conjuntos de dados compartilhados sem expor os dados brutos do user-level. Essa solução também alivia a carga da equipe de desenvolvimento da sua organização, eliminando a necessidade de criar e manter a lógica que define quais informações de reserva devem ser enviadas para Expedia Group e quais não devem.

Utilizamos uma solução de sala limpa da Amazon Web Services (AWS) para transferência de dados.

Exemplo de política de geranciamento de identidade e acesso da AWS

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CleanRoomsCollaborationAccess",
      "Effect": "Allow",
      "Action": [
        "cleanrooms:ListCollaborations",
        "cleanrooms:GetCollaboration",
        "cleanrooms:GetConfiguredTable",
        "cleanrooms:ListConfiguredTables",
        "cleanrooms:CreateMembership",
        "cleanrooms:GetMembership",
        "cleanrooms:ListMemberships",
        "cleanrooms:StartAnalysis",
        "cleanrooms:GetAnalysisTemplate",
        "cleanrooms:ListAnalysisTemplates",
        "cleanrooms:GetSchema",
        "cleanrooms:ListSchemas"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadAccessToGlueDataCatalog",
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase",
        "glue:GetDatabases",
        "glue:GetTable",
        "glue:GetTables",
        "glue:GetPartition",
        "glue:GetPartitions"
      ],
      "Resource": [
        "arn:aws:glue:REGION:YOUR_AWS_ACCOUNT_ID:catalog",
        "arn:aws:glue:REGION:YOUR_AWS_ACCOUNT_ID:database/YOUR_DATABASE_NAME",
        "arn:aws:glue:REGION:YOUR_AWS_ACCOUNT_ID:table/YOUR_DATABASE_NAME/YOUR_TABLE_NAME"
      ]
    },
    {
      "Sid": "AllowReadAccessToS3Data",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetBucketLocation",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::YOUR_BUCKET_NAME",
        "arn:aws:s3:::YOUR_BUCKET_NAME/YOUR_PREFIX/*"
      ]
    }
  ]
}

Lista de verificação para uso de salas limpas

Antes de enviar seus dados para uma sala limpa, você deve verificar se estas informações estão incluídas:

  • Informações da sua conta AWS
  • Funções e permissões de geranciamento de identidade e acesso configuradas
  • Todos os IDs propriedade foram mapeados para IDs Expedia Group's propriedade.
  • Tabelas Glue preparadas e registradas, que definem o esquema para uma interpretação precisa.
  • Convite para participar da colaboração
  • Esquemas validados
  • IDs de clientes
  • Informações de identificação pessoal (PII) criptografadas (com hash), geralmente endereços de e-mail.

Dados de conversão

Os dados exigidos pelos anunciantes incluem diversos parâmetros para informar o valor da reserva patrocinada.

CampoObrigatórioDescriçãoExemplo do valor
booking_date_timeSimData e hora em que a reserva foi feita, usando o formato de fuso horário UTC.2024-12-25T12:30:00Z
customer_idSimIdentificador único do usuário (usado para associar a outros eventos de interação com anúncios desse usuário). Este é o ID configurado e fornecido consistentemente pelo editor, desde as solicitações de anúncios até as reservas.e4dda90a-f31b-47f2-be4f-7e7289d224fa
property_idSimExpedia Group propriedade ID da reserva. Somente IDs com o código Expedia Group propriedade são aceitos.8906878
number_of_room_nightsSimO número total de noites reservadas, independentemente do número de quartos. Por exemplo, se o viajante reservou 2 quartos por 3 noites, o valor das diárias será 3.3
number_of_roomsNúmero total de quartos reservados.2
gross_booking_amountSimPreço final pago pelo viajante.200,00
currencySimA moeda em que o gross_booking_amount é fornecido.GBP
customer_email_hashSHA-256 criptografia do e-mail do cliente. Poderia ser usado para realizar a conexão cross-site (entre Expedia Group e um determinado editor) para uma atribuição de desempenho mais robusta. O valor pode ser nulo.

Endpoint da API de Notificação de Reservas

Caso opte por não utilizar ou não seja elegível para utilizar um DCR para comunicar atribuições de reservas com Expedia Group, você pode utilizar nosso endpoint de Notificação de Reservas.

Informações do ponto de extremidade

Assim como um DCR, a API de Notificação de Reservas reporta dados de reservas vinculados a uma visualização anterior ou a um beacon de clique acionado em um anúncio patrocinado. Você enviará informações de atribuição para esta API ao final do processo de reserva, de forma regular. Recomendamos visualização diária, mas dentro de 8 dias após a visualização ou clique em um anúncio patrocinado é aceitável.

Envie uma solicitação para a API de Notificação de Reserva somente quando a reserva for confirmada com sucesso.

Sequência de eventos

A sequência é essencial para os resultados do endpoint de Notificação de Reserva. Não altere a sequência de eventos listada abaixo ao fazer uma solicitação à API de Anúncios Patrocinados de Hospedagem.

  1. Quando um viajante realiza uma busca em seu site, você fará 2 solicitações: 1 para a API de Anúncios Patrocinados de Hospedagem para verificar a disponibilidade e 1 para o endpoint de Disponibilidade de Compras de Hospedagem para disponibilidade e tarifas de Expedia Group. A ordem não importa aqui, mas ambos devem ser chamados antes de prosseguir.
  2. A API de Anúncios Patrocinados de Hospedagem realiza um lance para anúncios patrocinados.
  3. Os resultados patrocinados serão exibidos na resposta caso haja disponibilidade. A resposta também incluirá beacons de clique, visualização e renderização.

>> Saiba mais sobre Rastreamento 4. Os anúncios patrocinados são exibidos em seu site na ordem de classificação recebida da hashtag Expedia Group. Você escolhe se deseja exibir a tarifa Expedia Group no anúncio patrocinado ou uma tarifa de outra fonte. 5. O beacon de renderização (se estiver sendo usado) é acionado assim que os anúncios são exibidos na página pelo navegador. 6. O indicador de visualização é acionado quando o anúncio patrocinado entra na área visível da tela. 7. O beacon de clique é acionado quando o viajante clica no anúncio patrocinado exibido na página de resultados da pesquisa. 8. Solicite a notificação de reserva no endpoint após a conclusão e confirmação da reserva. Nenhuma ação é necessária se a reserva for cancelada posteriormente.

Fluxograma de sequência

Fluxograma de sequência de rastreamento

|

Definição de notificação de reserva OpenAPI

openapi: 3.0.1
info:
  title: Booking Notification API
  version: v1
  description: Booking Notification API to capture booking notification data. The endpoint should be called whenever an ad of the 
    same property was viewed or clicked during the same session. For example, if the traveler saw an ad for a specific property,
    but clicked and booked the organic tile, the booking notification endpoint should still be called.
  contact:
    name: Media Solutions
    email: MediaSolutionsAPI1@expedia.com
tags:
  - name: Booking Notification
    description: API to post booking data
servers:
  - url: https://test.ean.com/v1
  - url: https://api.ean.com/v1
paths:
  /ads/booking-notification:
    post:
      tags:
        - Booking Notification
      description: Endpoint to capture booking notification data such as the booking date, the number of nights booked, the id of the property booked,
        the gross booked amount, and the currency of the gross booked amount.
      summary: Endpoint to capture booking data.
      operationId: booking-notification
      parameters:
        - name: Accept
          in: header
          description: Specifies the response format that the client would like to receive back. This must be application/json
          required: true
          schema:
            type: string
          example: 'application/json'
        - name: Accept-Encoding
          in: header
          description: Specifies the response encoding that the client would like to receive back. This must be gzip.
          required: true
          schema:
            type: string
          example: 'gzip'
        - name: User-Agent
          in: header
          description: The User-Agent header string from the customer's request, as captured by your integration.
          required: true
          schema:
            type: string
          example: 'Mozilla/5.0 (Linux; Android 13; SM-S901B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36'
        - name: Content-Type
          in: header
          description: This parameter is to specify what format the request body is in. The only supported value is application/json.
          required: true
          schema:
            type: string
            example: application/json
        - name: Customer-Ip
          in: header
          description: IP address of the customer, as captured by your integration.
            Ensure your integration passes the customer's IP, not your own. This value helps
            determine their location for ad relevancy.
            Also used for fraud recovery and other important analytics.
          required: true
          schema:
            type: string
            format: ipv4
          example: 127.0.0.1
        - name: Customer-Session-Id
          in: header
          description: Insert your own unique value for each user session, beginning with the first API call. Continue to pass the
            same value for each subsequent API call during the user's session, using a new value for every new customer
            session. This should match the initial request and all subsequent requests to retrieve ads for the user's session.
          required: false
          schema:
            type: string
          example: '7f9a24ea-2145-4819-a7b7-2a4cbe1165ab'
        - name: Customer-Id
          in: header
          description: An obfuscated unique identifier for each customer. This should not contain any personal information such as email, first or last name.
          required: true
          schema:
            type: string
          example: '7f9a24ea-2145-4819-a7b7-2a4cbe1165ab'
        - name: billing_terms
          in: query
          description: This parameter is to specify the terms of how a resulting booking should be billed. If this field is
            needed, the value for this will be provided to you separately.
          schema:
            type: string
        - name: partner_point_of_sale
          in: query
          description: This parameter is to specify what point of sale is being used to shop and book. If this field is needed,
            the value for this will be provided to you separately.
          schema:
            type: string
        - name: payment_terms
          in: query
          description: This parameter is to specify what terms should be used when being paid for a resulting booking. If this
            field is needed, the value for this will be provided to you separately.
          schema:
            type: string
        - name: platform_name
          in: query
          description: This parameter is to specify what platform is being used to shop and book. If this field is needed, the
            value for this will be provided to you separately.
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingRequest'
      responses:
        '204':
          description: No content - Successfully received the booking data.
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: 'invalid_input'
                message: 'An invalid request was sent in, please check the nested errors for details.'
                errors:
                  - type: 'item_id.required'
                    message: 'The item_id is required'
                    fields:
                      - name: 'item_id'
                        type: 'query'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: 'request_unauthenticated'
                message: 'Data required to authenticate your request is missing or inaccurate. 
                  Ensure that your request follows the guidelines in our documentation.'
                fields:
                  - name: 'apikey'
                    type: 'header'
                    value: 'jaj3982k239dka328e'
                  - name: 'signature'
                    type: 'header'
                    value: '129d75332614a5bdbe0c7eb540e95a65f9d85a5b53dabb38d19b37fad6312a2bd25c12ee5a82831d55112087e1b'
                  - name: 'timestamp'
                    type: 'header'
                    value: '198284729'
                  - name: 'servertimestamp'
                    type: 'server'
                    value: '198284729'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: 'request_unauthorized'
                message: 'Your request could not be authorized.'
        '426':
          description: Upgrade Required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: 'upgrade_required'
                message: 'This service requires the use of TLS.'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: 'too_many_requests'
                message: 'You have reached your capacity for this type of request.'
        '500':
          description: Unknown Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: 'unknown_internal_error'
                message: 'An internal server error has occurred.'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: 'service_unavailable'
                message: 'This service is currently unavailable.'
components:
  schemas:
    BookingRequest:
      type: object
      required:
        - total
        - property_id
        - number_of_nights
        - creation_date_time
      properties:
        property_id:
          description: The property id that was booked.
          type: string
          example: 24323423
        number_of_nights:
          description: The total number of room nights booked. If multiple rooms were booked, this is rooms multiplied by nights.
          type: integer
          format: int32
          minimum: 1
          maximum: 20
          example: 10
        total:
          $ref: '#/components/schemas/Total'
        creation_date_time:
          description: The date and time of the booking in UTC.
          type: string
          format: date-time
          example: 2024-12-25T12:30:00Z
    Total:
      type: object
      required:
        - value
        - currency
      properties:
        value:
          description: The value.
          type: number
          format: float
          example: 34343.56
        currency:
          description: The currency of the value.
          type: string
          minLength: 3
          maxLength: 3
          example: USD
    Error:
      type: object
      properties:
        type:
          type: string
          description: The error type.
        message:
          type: string
          description: A human readable message giving details about this error.
        fields:
          type: array
          description: Details about the specific fields that had an error.
          items:
            $ref: '#/components/schemas/Field'
        errors:
          type: array
          description: An array of all the actual errors that occurred.
          items:
            $ref: '#/components/schemas/ErrorIndividual'
      description: The overall class of error that occurred.
    Field:
      type: object
      properties:
        name:
          type: string
          description: The field that had an error.
        type:
          type: string
          description: The type of the field that had an error.
        value:
          type: string
          description: The value of the field that had an error.
      description: An individual field that had an error.
    ErrorIndividual:
      type: object
      properties:
        type:
          type: string
          description: The error type.
        message:
          type: string
          description: A human readable message giving details about this error.
        fields:
          type: array
          description: Details about the specific fields that had an error.
          items:
            $ref: '#/components/schemas/Field'
      description: An individual error.

Exemplo de solicitação de notificação de reserva

{ 

  "property_id": "24323423", 
  "number_of_nights": 10, 
  "total": { 
    "value": 34343.56, 
    "currency": "USD" 
  }, 
  "creation_date_time": "2024-12-25T12:30:00Z" 
}

Detalhes da API

Explore os endpoints nesta página e, em seguida, use um software de teste para entender como os exemplos e as configurações de esquema se comparam à saída real.

Nota: Seu gerenciador de inicialização fornecerá parâmetros específicos para incluir no cabeçalho ao chamar este endpoint. Se você não incluir esses parâmetros, suas chamadas serão rejeitadas.

Esta página foi útil?
Como podemos melhorar esse conteúdo?
Agradecemos por nos ajudar a melhorar.