Developer Hub
此為系統自動產生的翻譯

預訂歸因概覽

關於贊助內容廣告轉化的報告

由於廣告主會利用贊助型廣告來提升曝光率並促進預訂,因此針對由贊助型廣告驅動或影響的轉換進行報告,對於闡明其廣告支出的價值至關重要。該數值是由廣告被瀏覽或點擊後所產生的預訂所決定的。我們針對 impression-driven 與 click-driven 的歸因分析,採用 last-touch, 的 7 天歸因方法。

若要與 Rapid Lodging 的「贊助式廣告」API 整合,您必須將歸因於贊助式廣告點擊的轉換資訊傳送給我們——即使點擊後預訂的房價並非 Expedia Group 上的房價。無論預訂前的最後一次點擊是來自贊助廣告還是自然搜尋結果,都應提供預訂資訊。

有兩種方式可將轉換資訊回報給我們:

Information

注意

Expedia Group 使用 AWS Clean Rooms 解決方案,但該解決方案並非在所有地區皆可使用。請向您的 Expedia Group B2B 顧問查詢,以確認您是否符合資格。

資料潔淨室

資料潔淨室 (DCR) 提供了一個保險箱環境,讓使用者能在不暴露原始 user-level 資料的情況下,分析共享資料集的效能。此解決方案還能減輕貴組織開發團隊的負擔,因為無需再建置和維護「哪些預訂資訊應傳送至 Expedia Group,哪些則不應傳送」的邏輯。

我們採用 Amazon Web Services (AWS) 的客房解決方案來進行資料傳輸。

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/*"
      ]
    }
  ]
}

客房正確使用檢查清單

在將資料推送至一個空的客房之前,您應確認其中已包含以下資訊:

  • 您的 AWS 帳戶資訊
  • 已設定的身分與存取管理角色及權限
  • 所有旅宿識別碼均已對應至 Expedia Group's 旅宿識別碼。
  • 已編製並登錄的 Glue 表格,這些表格定義了用於精確解讀的資料結構
  • 合作邀請函
  • 已驗證的模式
  • 客戶編號
  • 經過加密 (雜湊處理) 的個人可識別資訊 (PII),通常為電子郵件地址

轉換資料

廣告主所需的数据包含多項參數,用以報告贊助預訂的價值。

欄位必填說明範例值
booking_date_time預訂的日期與時間,採用 UTC 時區格式。2024-12-25T12:30:00Z
customer_id該使用者的唯一識別碼 (用於與該使用者產生的其他廣告互動事件進行關聯)。這是由發佈商設定並在從所有廣告請求到預訂的整個過程中始終如一地提供的識別碼。e4dda90a-f31b-47f2-be4f-7e7289d224fa
property_idExpedia Group 旅宿此預訂的編號。僅接受 Expedia Group 旅宿的帳號。8906878
number_of_room_nights預訂的總住宿天數,不論房間數目為何。舉例來說,若旅客預訂了 2 間房,入住 3 晚,則客房的「晚數」值將為 3。3
number_of_rooms已預訂的房間總數。2
gross_booking_amount旅客實際支付的最終價格。200.00
currencygross_booking_amount所使用的貨幣。GBP
customer_email_hash# 客戶電子郵件的 SHA-256 加密。可用於建立「cross-site」連結 (介於 Expedia Group 與指定發佈者之間),以實現更穩健的成效歸因。該值可以為空。

預訂通知 API 端點

若您選擇不使用 DCR,或不符合使用 DCR 與 Expedia Group, 通報預訂歸因的資格,則可改用我們的「預訂通知」端點。

端點詳細資料

與 DCR 類似,預訂通知 API 會回報與先前瀏覽或於贊助列表上觸發的點擊信標相關聯的預訂資料。您將在預訂流程結束時,定期向此 API 傳送歸因資訊。我們建議每日進行,但若在贊助式廣告的瀏覽或點擊發生後 8 天內進行,亦屬可接受範圍。

僅在預訂確認成功時,才向「預訂通知 API」發送請求。

事件經過

對於「預訂通知」端點的結果而言,順序至關重要。向「住宿贊助廣告 API」發出請求時,請勿變更以下列出的事件順序。

  1. 當旅客在您的網站上進行搜尋時,系統會發出兩項請求:一項是向「住宿贊助列表 API」查詢空房狀況,另一項則是向「住宿購物空房狀況」端點查詢 Expedia Group 的空房狀況與房價。這裡的順序無關緊要,但必須先呼叫這兩項,才能繼續進行。
  2. 「住宿贊助廣告」API 會針對贊助廣告進行拍賣。
  3. 若庫存充足,回應中將顯示贊助結果。該回應中亦將包含點擊、瀏覽及渲染信標。

>> 進一步了解追蹤機制 4. 贊助式廣告會依照從 Expedia Group. 您可以選擇在贊助式列表中顯示「Expedia Group」的價格,或是顯示來自其他來源的價格。 5. 一旦瀏覽器在頁面中渲染出廣告,渲染信標 (若使用) 便會立即觸發。 6. 當贊助式列表進入檢視區時,檢視信標即會被觸發。 7. 當旅客點擊搜尋結果頁面上顯示的贊助廣告時,點擊信標便會被觸發。 8. 在預訂完成並確認後,請向「預訂通知」端點發出請求。若其後取消預訂,則無需採取任何行動。

序列流程圖

追蹤序列流程圖

|

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.

預訂通知範本請求

{ 

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

API 詳細資料

請瀏覽本頁面的端點,然後使用測試軟體,以了解範例和架構定義與實際輸出結果之間的差異。

注意: 您的發射管理員會提供您在呼叫此端點時,需包含於標頭中的具體參數。若未包含這些參數,您的呼叫將會被拒絕。

這個頁面對您有幫助嗎?
我們能如何改善內容?
感謝您協助我們進行改善!