Developer Hub
これは自動生成された翻訳です。

予約のアトリビューションの概要

スポンサードコンテンツからの広告コンバージョンに関するレポート

広告主はスポンサー掲載を利用して認知度向上や予約獲得を図っているため、スポンサー掲載によって促進または影響を受けたコンバージョンに関するレポートを作成することは、広告費の価値を伝える上で不可欠です。その数値は、広告の閲覧やクリックの後に発生した予約によって決定されます。本稿では、last-touch, の7日間アトリビューション手法を用いて、「impression-driven」および「click-driven」の両方のアトリビューションについて報告いたします。

Rapid Lodgingのスポンサー掲載APIと連携するには、スポンサー掲載のクリックに起因するコンバージョン情報を弊社に送信していただく必要があります。たとえ、クリック後に予約された料金がExpedia Groupの料金でなかった場合でも同様です。予約前の直近のクリックがスポンサーリンクであったか、自然検索結果であったかに関わらず、予約情報を提供する必要があります。

変換に関する情報を弊社へご提供いただくには、以下の2つの方法がございます:

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アカウント情報
  • IDおよびアクセス管理のロールと権限の設定
  • すべての 施設IDが、Expedia Group's施設IDにマッピングされました。
  • 正確な解釈のためのスキーマを定義したGlueテーブルを作成し、登録しました
  • 共同研究への参加のお誘い
  • 検証済みのスキーマ
  • 顧客ID
  • 暗号化(ハッシュ化)されたPII(個人を特定できる情報)、通常はメールアドレス

変換データ

広告主が求めるデータには、スポンサー付き予約の価値を報告するための複数のパラメータが含まれています。

フィールド必須説明サンプル値
booking_date_time必須予約が行われた日時(UTCタイムゾーン形式)。2024-12-25T12:30:00Z
customer_id必須ユーザーを一意に識別するための識別子(このユーザーによる他の広告インタラクションイベントと照合するために使用されます)。これは、すべての広告リクエストから予約に至るまで、パブリッシャーによって設定され、一貫して提供されるIDです。e4dda90a-f31b-47f2-be4f-7e7289d224fa
property_id必須Expedia Group施設 ご予約のIDです。Expedia Group施設 のIDのみ受け付けております。8906878
number_of_room_nights必須予約された宿泊日数の合計です(客室数にかかわらず)。たとえば、旅行者が3泊分として2部屋を予約した場合、宿泊日数の値は3となります。3
number_of_rooms予約された客室の総数です。2
gross_booking_amount必須旅行者が最終的に支払った金額です。200.00
currency必須gross_booking_amountで提供されている通貨です。GBP
customer_email_hash# 顧客のメールに対するSHA-256暗号化。より堅牢なパフォーマンスアトリビューションを実現するために、cross-site接続(Expedia Groupと指定されたパブリッシャーの間)を行うために使用できます。値はnullになる場合があります。

予約通知APIのエンドポイント

DCRを使用してExpedia Group, に予約の帰属情報を通知しないことを選択された場合、またはその資格がない場合は、代わりに当社の「予約通知」エンドポイントをご利用いただけます。

エンドポイントの詳細

DCRと同様に、予約通知APIは、以前の閲覧や、スポンサー掲載でトリガーされたクリックビーコンに関連付けられた予約データを報告します。予約プロセスの終了時に、定期的にこのAPIへアトリビューション情報を送信していただきます。毎日行うことをお勧めしますが、スポンサー掲載の閲覧またはクリックから8日以内であれば問題ありません。

予約が正常に確定した場合にのみ、予約通知APIへリクエストを送信してください。

一連の出来事

Booking Notificationエンドポイントの結果については、順序が極めて重要です。Lodging Sponsored Listings APIにリクエストを送信する際は、以下に挙げる処理の順序を変更しないでください。

  1. 旅行者が貴社のサイトで検索を行うと、2つのリクエストが送信されます。1つは空室状況を確認するための「Lodging Sponsored Listings API」へのリクエスト、もう1つは「Expedia Group」の空室状況と料金を確認するための「Lodging Shopping Availability」エンドポイントへのリクエストです。ここでは順序は関係ありませんが、先に進む前に、両方を呼び出す必要があります。
  2. 「Lodging Sponsored Listings 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 の詳細

このページのエンドポイントを詳しく確認した後、テスト用ソフトウェアを使用して、例やスキーマ定義と実際の出力結果がどのように異なるかを把握してください。

注: このエンドポイントを呼び出す際にヘッダーに含めるべき具体的なパラメータについては、Launch Managerから提供されます。これらのパラメータを含めない場合、リクエストは拒否されます。

このページは役に立ちましたか ?
このコンテンツに改善が必要な点があれば、
サービス向上にご協力いただきありがとうございます。