> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Hướng dẫn tích hợp thanh toán dựa trên mức sử dụng

> Tìm hiểu cách thiết lập đồng hồ đo và gửi sự kiện sử dụng để kích hoạt thanh toán chính xác dựa trên mức sử dụng với Dodo Payments.

<CardGroup cols={2}>
  <Card title="API Reference - Events Ingestion" icon="code" href="/api-reference/usage-events/ingest-events">
    Truy cập đầy đủ tài liệu API để nhập sự kiện sử dụng và kiểm tra các yêu cầu và phản hồi nhập sự kiện một cách tương tác.
  </Card>

  <Card title="API Reference - Meters Creation" icon="code" href="/api-reference/meters/create-meter">
    Khám phá toàn bộ tài liệu API để tạo đồng hồ đo và kiểm tra tương tác các yêu cầu và phản hồi tạo đồng hồ đo.
  </Card>
</CardGroup>

## Tạo một đồng hồ đo

Các đồng hồ đo xác định cách các sự kiện sử dụng của bạn được tổng hợp và đo lường cho mục đích thanh toán.

Trước khi tạo một đồng hồ đo, hãy lập kế hoạch chiến lược theo dõi mức sử dụng của bạn:

* Xác định các sự kiện sử dụng mà bạn muốn theo dõi
* Xác định cách các sự kiện nên được tổng hợp (đếm, tổng, v.v.)
* Định nghĩa bất kỳ yêu cầu lọc nào cho các trường hợp sử dụng cụ thể

### Quy trình tạo đồng hồ đo từng bước

Theo dõi hướng dẫn toàn diện này để thiết lập đồng hồ đo sử dụng của bạn:

<Steps>
  <Step title="Configure Basic Information">
    Thiết lập các thông tin cơ bản cho đồng hồ đo của bạn.

    <ParamField path="Meter Name" type="string" required>
      Chọn một tên rõ ràng, dễ hiểu để xác định đồng hồ đo này đang theo dõi điều gì.

      Ví dụ: "Tokens", "API Calls", "Storage Usage", "Compute Hours"
    </ParamField>

    <ParamField path="Description" type="string">
      Cung cấp giải thích chi tiết về những gì đồng hồ đo này đang đo lường.

      Ví dụ: "Đếm mỗi yêu cầu POST /v1/orders do khách hàng thực hiện"
    </ParamField>

    <ParamField path="Event Name" type="string" required>
      Xác định định danh sự kiện sẽ kích hoạt đồng hồ đo này.

      Ví dụ: "token", "api.call", "storage.usage", "compute.session"
    </ParamField>

    <Info>
      Tên sự kiện phải khớp chính xác với những gì bạn gửi trong các sự kiện sử dụng của mình. Tên sự kiện phân biệt chữ hoa chữ thường.
    </Info>
  </Step>

  <Step title="Configure Aggregation Settings">
    Xác định cách đồng hồ đo tính toán việc sử dụng từ các sự kiện của bạn.

    <ParamField path="Aggregation Type" type="string" required>
      Chọn cách sự kiện nên được tổng hợp:

      <Tabs>
        <Tab title="Count">
          Đơn giản là đếm số sự kiện đã nhận.

          Trường hợp sử dụng: Các cuộc gọi API, lượt xem trang, tải tệp

          Phép tính: Tổng số sự kiện
        </Tab>

        <Tab title="Sum">
          Cộng các giá trị từ một thuộc tính cụ thể trong sự kiện của bạn.

          Trường hợp sử dụng: Chuyển dữ liệu, tiêu thụ lưu trữ, thời gian xử lý

          Phép tính: Tổng các giá trị thuộc tính
        </Tab>

        <Tab title="Max">
          Ghi lại giá trị cao nhất của một thuộc tính cụ thể trong chu kỳ thanh toán.

          Trường hợp sử dụng: Người dùng đồng thời cao nhất, lưu trữ tối đa đã sử dụng, băng thông cao nhất

          Phép tính: Giá trị thuộc tính lớn nhất được quan sát
        </Tab>

        <Tab title="Last">
          Sử dụng giá trị gần nhất của một thuộc tính cụ thể.

          Trường hợp sử dụng: Cấp độ gói hiện tại, cài đặt cấu hình mới nhất

          Phép tính: Giá trị thuộc tính được ghi lại cuối cùng
        </Tab>
      </Tabs>
    </ParamField>

    <ParamField path="Over Property" type="string">
      Tên thuộc tính từ siêu dữ liệu sự kiện để tổng hợp trên đó.

      <Warning>
        Trường này bắt buộc khi sử dụng các loại tổng hợp Sum, Max hoặc Last.
      </Warning>
    </ParamField>

    <ParamField path="Measurement Unit" type="string" required>
      Xác định nhãn đơn vị để hiển thị trong báo cáo và thanh toán.

      Ví dụ: "calls", "GB", "hours", "tokens"
    </ParamField>
  </Step>

  <Step title="Configure Event Filtering (Optional)">
    Thiết lập tiêu chí để kiểm soát sự kiện nào được bao gồm trong đồng hồ đo.

    <Info>
      Lọc sự kiện cho phép bạn tạo ra các quy tắc tinh vi quyết định sự kiện nào góp phần vào việc tính toán sử dụng. Điều này hữu ích để loại trừ sự kiện thử nghiệm, lọc theo tầng người dùng hoặc tập trung vào hành động cụ thể.
    </Info>

    **Kích hoạt lọc sự kiện**

    Bật **Kích hoạt lọc sự kiện** để kích hoạt xử lý sự kiện có điều kiện.

    **Chọn logic lọc**

    Chọn cách nhiều điều kiện được đánh giá:

    <Tabs>
      <Tab title="AND Logic">
        Tất cả điều kiện phải đúng để một sự kiện được tính. Dùng khi bạn cần sự kiện đáp ứng nhiều tiêu chí nghiêm ngặt cùng lúc.

        **Ví dụ:** Đếm các cuộc gọi API nơi `user_tier = "premium"` AND `endpoint = "/api/v2/users"`
      </Tab>

      <Tab title="OR Logic">
        Ít nhất một điều kiện phải đúng để một sự kiện được tính. Dùng khi bạn muốn bao gồm các sự kiện đáp ứng bất kỳ tiêu chí nào trong số nhiều tiêu chí.

        **Ví dụ:** Đếm các sự kiện nơi `method = "POST"` OR `method = "PUT"` OR `method = "DELETE"`
      </Tab>
    </Tabs>

    **Thiết lập điều kiện lọc**

    <Steps>
      <Step title="Add Condition">
        Nhấn **Add condition** để tạo quy tắc bộ lọc mới.
      </Step>

      <Step title="Configure Property Key">
        Chỉ định tên thuộc tính từ siêu dữ liệu sự kiện của bạn.
      </Step>

      <Step title="Select Comparator">
        Chọn từ các toán tử có sẵn:

        * `equals` - Khớp chính xác
        * `not_equals` - Bộ lọc loại trừ
        * `greater_than` - So sánh số
        * `greater_than_or_equals` - So sánh số (bao gồm)
        * `less_than` - So sánh số
        * `less_than_or_equals` - So sánh số (bao gồm)
        * `contains` - Chuỗi chứa chuỗi con
        * `does_not_contain` - Bộ lọc loại trừ chuỗi
      </Step>

      <Step title="Set Comparison Value">
        Đặt giá trị mục tiêu để so sánh.
      </Step>

      <Step title="Add Groups">
        Dùng **Add Group** để tạo nhóm điều kiện bổ sung cho logic phức tạp.
      </Step>
    </Steps>

    <Warning>
      Các thuộc tính được lọc phải có trong siêu dữ liệu sự kiện để các điều kiện hoạt động chính xác. Các sự kiện thiếu thuộc tính bắt buộc sẽ bị loại khỏi việc tính toán.
    </Warning>
  </Step>

  <Step title="Create Meter">
    Xem lại cấu hình đồng hồ đo và nhấn **Create Meter**.

    <Check>
      Đồng hồ đo của bạn giờ đã sẵn sàng nhận và tổng hợp các sự kiện sử dụng.
    </Check>
  </Step>
</Steps>

## Liên kết đồng hồ đo trong một sản phẩm

Khi bạn đã tạo đồng hồ đo của mình, bạn cần liên kết nó với một sản phẩm để kích hoạt thanh toán dựa trên mức sử dụng. Quy trình này kết nối dữ liệu sử dụng của đồng hồ đo với các quy tắc định giá cho việc thanh toán của khách hàng.

Liên kết các đồng hồ đo với các sản phẩm thiết lập kết nối giữa theo dõi mức sử dụng và thanh toán:

* Các sản phẩm xác định các quy tắc định giá và hành vi thanh toán
* Các đồng hồ đo cung cấp dữ liệu sử dụng cho các phép tính thanh toán
* Nhiều đồng hồ đo có thể được liên kết với một sản phẩm duy nhất cho các kịch bản thanh toán phức tạp

### Quy trình cấu hình sản phẩm

Biến dữ liệu sử dụng của bạn thành các khoản phí có thể tính bằng cách cấu hình đúng cài đặt sản phẩm của bạn:

<Steps>
  <Step title="Choose Usage-Based Billing Product Type">
    Đi tới trang tạo hoặc chỉnh sửa sản phẩm của bạn và chọn **Usage-Based** làm loại sản phẩm.
  </Step>

  <Step title="Select Associated Meter">
    Nhấn vào **Associated Meter** để mở bảng chọn đồng hồ đo từ bên cạnh.

    Bảng này cho phép bạn cấu hình những đồng hồ đo sẽ theo dõi việc sử dụng cho sản phẩm này.
  </Step>

  <Step title="Add Your Meter">
    Trong bảng chọn đồng hồ đo:

    1. Nhấp vào **Thêm đồng hồ đo** để xem các đồng hồ đo có sẵn
    2. Chọn đồng hồ đo bạn đã tạo từ danh sách thả xuống
    3. Đồng hồ đo đã chọn sẽ xuất hiện trong cấu hình sản phẩm của bạn
  </Step>

  <Step title="Configure Price Per Unit">
    Đặt giá cho mỗi đơn vị sử dụng được đồng hồ đo ghi nhận.

    <ParamField path="Price Per Unit" type="number" required>
      Xác định mức phí cho mỗi đơn vị mà đồng hồ đo đo được.

      **Ví dụ**: Thiết lập `$0.50` cho mỗi đơn vị có nghĩa là:

      * 1.000 đơn vị tiêu thụ = 1.000 × \$0.50 = 500.00 được tính phí
      * 500 đơn vị tiêu thụ = 500 × \$0.50 = 250.00 được tính phí
      * 100 đơn vị tiêu thụ = 100 × \$0.50 = 50.00 được tính phí
    </ParamField>
  </Step>

  <Step title="Set Free Threshold (Optional)">
    Cấu hình mức sử dụng miễn phí trước khi bắt đầu tính phí.

    <ParamField path="Free Threshold" type="number">
      Số đơn vị mà khách hàng có thể sử dụng miễn phí trước khi bắt đầu tính phí theo sử dụng trả tiền.

      **Cách hoạt động**:

      * Ngưỡng miễn phí: 100 đơn vị
      * Giá mỗi đơn vị: \$0.50
      * Khách hàng sử dụng: 250 đơn vị
      * **Phép tính**: (250 - 100) × $0.50 = **$75.00\*\* được tính phí
    </ParamField>

    <Info>
      Ngưỡng miễn phí lý tưởng cho mô hình freemium, thời gian dùng thử hoặc cung cấp một mức cho phép cơ bản trong gói của khách hàng.
    </Info>

    <Check>
      Ngưỡng miễn phí áp dụng cho mỗi chu kỳ thanh toán, mang đến cho khách hàng hạn mức mới hàng tháng hoặc theo lịch trình thanh toán của bạn.
    </Check>
  </Step>

  <Step title="Save Configuration">
    Xem lại cấu hình đồng hồ đo và định giá, sau đó nhấn **Save Changes** để hoàn tất thiết lập.

    <Check>
      Sản phẩm của bạn giờ đã được cấu hình cho thanh toán theo mức sử dụng và sẽ tự động tính phí khách hàng dựa trên mức tiêu thụ thực tế.
    </Check>

    **Điều gì sẽ xảy ra tiếp theo**:

    * Các sự kiện sử dụng gửi tới đồng hồ đo sẽ được theo dõi và tổng hợp
    * Các phép tính thanh toán sẽ tự động áp dụng quy tắc định giá của bạn
    * Khách hàng sẽ bị tính phí dựa trên mức tiêu thụ thực tế trong mỗi chu kỳ thanh toán
  </Step>
</Steps>

<Note>
  Hãy nhớ rằng bạn có thể thêm tối đa 10 đồng hồ đo cho mỗi sản phẩm, cho phép theo dõi sử dụng tinh vi trên nhiều chiều như cuộc gọi API, lưu trữ, thời gian tính toán và các chỉ số tùy chỉnh.
</Note>

## Gửi sự kiện sử dụng

Khi đồng hồ đo của bạn đã được cấu hình, bạn có thể bắt đầu gửi các sự kiện sử dụng từ ứng dụng của mình để theo dõi mức sử dụng của khách hàng.

### Cấu trúc sự kiện

Mỗi sự kiện sử dụng phải bao gồm các trường bắt buộc sau:

<ParamField body="event_id" type="string" required>
  Định danh duy nhất cho sự kiện cụ thể này. Phải là duy nhất trên tất cả các sự kiện.
</ParamField>

<ParamField body="customer_id" type="string" required>
  ID khách hàng Dodo Payments mà việc sử dụng này thuộc về.
</ParamField>

<ParamField body="event_name" type="string" required>
  Tên sự kiện trùng với cấu hình đồng hồ đo của bạn. Tên sự kiện kích hoạt đồng hồ đo tương ứng.
</ParamField>

<ParamField body="timestamp" type="string">
  Dấu thời gian ISO 8601 khi sự kiện xảy ra. Mặc định là thời gian hiện tại nếu không cung cấp.
</ParamField>

<ParamField body="metadata" type="object">
  Các thuộc tính bổ sung để lọc và tổng hợp. Bao gồm mọi giá trị được tham chiếu trong thiết lập "Over Property" hoặc các điều kiện lọc của đồng hồ đo của bạn.
</ParamField>

### Ví dụ API sự kiện sử dụng

Gửi các sự kiện sử dụng đến các đồng hồ đo đã cấu hình của bạn bằng cách sử dụng API Sự kiện:

<CodeGroup>
  ```javascript Node.js theme={null}
  const response = await fetch('https://test.dodopayments.com/events/ingest', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.DODO_PAYMENTS_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      events: [
        {
          event_id: "api_call_1234",
          customer_id: "cus_atXa1lklCRRzMicTqfiw2", 
          event_name: "api.call",
          timestamp: new Date().toISOString(),
          metadata: {
            endpoint: "/v1/orders",
            method: "POST",
            response_size: 1024
          }
        }
      ]
    })
  });
  ```

  ```python Python theme={null}
  import requests
  from datetime import datetime

  response = requests.post(
      'https://test.dodopayments.com/events/ingest',
      headers={
          'Authorization': f'Bearer {api_key}',
          'Content-Type': 'application/json'
      },
      json={
          'events': [
              {
                  'event_id': 'api_call_1234',
                  'customer_id': 'cus_atXa1lklCRRzMicTqfiw2',
                  'event_name': 'api.call',
                  'timestamp': datetime.now().isoformat(),
                  'metadata': {
                      'endpoint': '/v1/orders',
                      'method': 'POST',
                      'response_size': 1024
                  }
              }
          ]
      }
  )
  ```

  ```curl cURL theme={null}
  curl -X POST 'https://test.dodopayments.com/events/ingest' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -H 'Content-Type: application/json' \
    -d '{
      "events": [
        {
          "event_id": "api_call_1234",
          "customer_id": "cus_atXa1lklCRRzMicTqfiw2",
          "event_name": "api.call", 
          "timestamp": "2024-01-15T10:30:00Z",
          "metadata": {
            "endpoint": "/v1/orders",
            "method": "POST",
            "response_size": 1024
          }
        }
      ]
    }'
  ```
</CodeGroup>

## Phân tích thanh toán dựa trên mức sử dụng

Theo dõi và phân tích dữ liệu thanh toán dựa trên mức sử dụng của bạn với bảng điều khiển phân tích toàn diện. Theo dõi các mẫu tiêu thụ của khách hàng, hiệu suất đồng hồ đo và xu hướng thanh toán để tối ưu hóa chiến lược định giá của bạn và hiểu hành vi sử dụng.

### Phân tích tổng quan

Tab Tổng quan cung cấp cái nhìn tổng quát về hiệu suất thanh toán dựa trên mức sử dụng của bạn:

#### Chỉ số hoạt động

Theo dõi các thống kê sử dụng chính trong các khoảng thời gian khác nhau:

<ParamField path="Current Month" type="metric">
  Hiển thị hoạt động sử dụng trong chu kỳ thanh toán hiện tại, giúp bạn hiểu các mẫu tiêu thụ hàng tháng.
</ParamField>

<ParamField path="All Time" type="metric">
  Hiển thị số liệu sử dụng tích lũy kể từ khi bạn bắt đầu theo dõi, cung cấp cái nhìn dài hạn về sự tăng trưởng.
</ParamField>

<Tip>
  Sử dụng bộ chọn khoảng thời gian để so sánh việc sử dụng qua các tháng khác nhau và xác định xu hướng theo mùa hoặc mô hình tăng trưởng.
</Tip>

#### Biểu đồ số lượng đồng hồ đo

<Frame>
  <img src="https://mintcdn.com/dodopayments/16r81mgDWvSgYER7/images/guides/usage-based-billing/meter-quantities-chart.png?fit=max&auto=format&n=16r81mgDWvSgYER7&q=85&s=1a8a39547bd0259a53d4591d7928c8ea" alt="Biểu đồ số lượng đồng hồ hiển thị xu hướng sử dụng theo thời gian với hình ảnh gradient màu tím" style={{ maxHeight: '500px', width: 'auto' }} width="1602" height="888" data-path="images/guides/usage-based-billing/meter-quantities-chart.png" />
</Frame>

Biểu đồ số lượng đồng hồ đo trực quan hóa các xu hướng sử dụng theo thời gian với các tính năng sau:

* **Hình ảnh theo chuỗi thời gian**: Theo dõi các mẫu sử dụng qua các ngày, tuần hoặc tháng
* **Hỗ trợ nhiều đồng hồ đo**: Xem dữ liệu từ các đồng hồ đo khác nhau cùng một lúc
* **Phân tích xu hướng**: Xác định các đỉnh sử dụng, các mẫu và quỹ đạo tăng trưởng

<Info>
  Biểu đồ tự động thay đổi theo khối lượng sử dụng và phạm vi thời gian được chọn, cung cấp tầm nhìn rõ ràng vào cả biến động nhỏ lẫn thay đổi lớn về sử dụng.
</Info>

### Phân tích sự kiện

<Frame>
  <img src="https://mintcdn.com/dodopayments/16r81mgDWvSgYER7/images/guides/usage-based-billing/events-table.png?fit=max&auto=format&n=16r81mgDWvSgYER7&q=85&s=0af7aad1d5e9a379eee18edc40aac157" alt="Bảng sự kiện hiển thị tên sự kiện, ID và điều khiển phân trang cho phân tích sự kiện chi tiết" style={{ maxHeight: '500px', width: 'auto' }} width="1601" height="896" data-path="images/guides/usage-based-billing/events-table.png" />
</Frame>

Tab Sự kiện cung cấp cái nhìn chi tiết về từng sự kiện sử dụng:

#### Hiển thị thông tin sự kiện

Bảng sự kiện cung cấp cái nhìn rõ ràng về từng sự kiện sử dụng với các cột sau:

* **Tên sự kiện**: Hành động hoặc kích hoạt cụ thể đã tạo ra sự kiện sử dụng
* **ID sự kiện**: Định danh duy nhất cho mỗi phiên bản sự kiện
* **ID khách hàng**: Khách hàng liên quan đến sự kiện
* **Thời gian**: Khi sự kiện xảy ra

<Info>
  Chế độ xem này cho phép bạn theo dõi và giám sát các sự kiện sử dụng riêng lẻ trên cơ sở khách hàng của mình, mang lại tính minh bạch trong các phép tính thanh toán và mô hình sử dụng.
</Info>

### Phân tích khách hàng

Tab Khách hàng cung cấp cái nhìn chi tiết về dữ liệu sử dụng của khách hàng với các thông tin sau:

#### Các cột dữ liệu có sẵn

<ParamField path="Customer Email" type="string">
  Địa chỉ email của khách hàng để nhận dạng.
</ParamField>

<ParamField path="Subscription ID" type="string">
  Định danh duy nhất cho đăng ký của khách hàng.
</ParamField>

<ParamField path="Free Threshold" type="number">
  Số đơn vị miễn phí được bao gồm trong gói của khách hàng trước khi áp dụng phí.
</ParamField>

<ParamField path="Price Per Unit" type="currency">
  Chi phí mỗi đơn vị cho việc sử dụng vượt quá ngưỡng miễn phí.
</ParamField>

<ParamField path="Last Event" type="timestamp">
  Dấu thời gian của sự kiện sử dụng gần đây nhất của khách hàng.
</ParamField>

<ParamField path="Total Price" type="currency">
  Tổng số tiền đã tính phí khách hàng cho thanh toán theo mức sử dụng.
</ParamField>

<ParamField path="Consumed Units" type="number">
  Tổng số đơn vị khách hàng đã tiêu thụ.
</ParamField>

<ParamField path="Chargeable Units" type="number">
  Số đơn vị vượt ngưỡng miễn phí và đang bị tính phí.
</ParamField>

#### Các tính năng của bảng

* **Lọc cột**: Sử dụng tính năng "Chỉnh sửa cột" để hiển thị/ẩn các cột dữ liệu cụ thể
* **Cập nhật theo thời gian thực**: Dữ liệu sử dụng phản ánh các chỉ số tiêu thụ hiện tại nhất

## Ví dụ về tổng hợp

Dưới đây là các ví dụ thực tế về cách các loại tổng hợp khác nhau hoạt động:

### Hiểu các loại tổng hợp

Các loại tổng hợp khác nhau phục vụ cho các kịch bản thanh toán khác nhau. Chọn loại phù hợp dựa trên cách bạn muốn đo lường và tính phí cho mức sử dụng.

### Ví dụ thực tế về triển khai

Các ví dụ này minh họa các ứng dụng thực tế của mỗi loại tổng hợp với các sự kiện mẫu và kết quả mong đợi.

<AccordionGroup>
  <Accordion title="Count Aggregation - API Calls">
    Kịch bản: Theo dõi tổng số yêu cầu API

    Cấu hình đồng hồ đo:

    * Event Name: `api.call`
    * Aggregation Type: Count
    * Measurement Unit: `calls`

    **Sự kiện mẫu**:

    ```json theme={null}
    {
      "events": [
        {"event_id": "call_1", "customer_id": "cus_123", "event_name": "api.call"},
        {"event_id": "call_2", "customer_id": "cus_123", "event_name": "api.call"},
        {"event_id": "call_3", "customer_id": "cus_123", "event_name": "api.call"}
      ]
    }
    ```

    Kết quả: 3 cuộc gọi được tính phí cho khách hàng
  </Accordion>

  <Accordion title="Sum Aggregation - Data Transfer">
    Kịch bản: Tính phí dựa trên tổng số byte đã truyền

    Cấu hình đồng hồ đo:

    * Event Name: `data.transfer`
    * Aggregation Type: Sum
    * Over Property: `bytes`
    * Measurement Unit: `GB`

    **Sự kiện mẫu**:

    ```json theme={null}
    {
      "events": [
        {
          "event_id": "transfer_1",
          "customer_id": "cus_123", 
          "event_name": "data.transfer",
          "metadata": {"bytes": 1073741824}
        },
        {
          "event_id": "transfer_2",
          "customer_id": "cus_123",
          "event_name": "data.transfer", 
          "metadata": {"bytes": 536870912}
        }
      ]
    }
    ```

    Kết quả: 1.5 GB tổng dữ liệu sẽ được tính phí cho khách hàng
  </Accordion>

  <Accordion title="Max Aggregation - Peak Concurrent Users">
    Kịch bản: Tính phí dựa trên số lượng người dùng đồng thời cao nhất

    Cấu hình đồng hồ đo:

    * Event Name: `concurrent.users`
    * Aggregation Type: Max
    * Over Property: `count`
    * Measurement Unit: `users`

    **Sự kiện mẫu**:

    ```json theme={null}
    {
      "events": [
        {
          "event_id": "peak_1",
          "customer_id": "cus_123",
          "event_name": "concurrent.users", 
          "metadata": {"count": 15}
        },
        {
          "event_id": "peak_2",
          "customer_id": "cus_123",
          "event_name": "concurrent.users",
          "metadata": {"count": 23}
        },
        {
          "event_id": "peak_3",
          "customer_id": "cus_123",
          "event_name": "concurrent.users",
          "metadata": {"count": 18}
        }
      ]
    }
    ```

    Kết quả: 23 người dùng đồng thời đỉnh điểm được tính phí cho khách hàng
  </Accordion>
</AccordionGroup>

### Ví dụ về lọc sự kiện

<Tabs>
  <Tab title="Filter by API Endpoint">
    Chỉ đếm các cuộc gọi API đến các endpoint cụ thể:

    Cấu hình bộ lọc:

    * Property: `endpoint`
    * Comparator: `equals`
    * Value: `/v1/orders`

    Sự kiện mẫu:

    ```json theme={null}
    {
      "event_id": "call_1",
      "customer_id": "cus_123",
      "event_name": "api.call",
      "metadata": {
        "endpoint": "/v1/orders",
        "method": "POST"
      }
    }
    ```

    Kết quả: Các sự kiện khớp tiêu chí bộ lọc sẽ được tính. Các sự kiện với endpoint khác sẽ bị bỏ qua.
  </Tab>

  <Tab title="Filter by Value Range">
    Chỉ đếm các lần tải lên tệp lớn:

    Cấu hình bộ lọc:

    * Property: `file_size`
    * Comparator: `greater_than`
    * Value: `1048576` (1MB theo byte)

    Sự kiện mẫu:

    ```json theme={null}
    {
      "event_id": "upload_1",
      "customer_id": "cus_123", 
      "event_name": "file.upload",
      "metadata": {
        "file_size": 5242880,
        "file_type": "image"
      }
    }
    ```

    Kết quả: Các tệp lớn hơn 1MB sẽ được tính. Các tệp nhỏ hơn sẽ bị bỏ qua.
  </Tab>

  <Tab title="Complex Multi-Condition Filters">
    Đếm các cuộc gọi API cao cấp trong giờ hành chính:

    Cấu hình Bộ lọc (sử dụng logic AND):

    * Thuộc tính: `plan_type`, So sánh: `equals`, Giá trị: `premium`
    * Thuộc tính: `hour`, So sánh: `greater_than_or_equals`, Giá trị: `9`
    * Thuộc tính: `hour`, So sánh: `less_than`, Giá trị: `17`

    Sự kiện mẫu:

    ```json theme={null}
    {
      "event_id": "call_1",
      "customer_id": "cus_123",
      "event_name": "api.call",
      "metadata": {
        "plan_type": "premium",
        "hour": 14,
        "endpoint": "/v1/analytics"
      }
    }
    ```

    Kết quả: Các cuộc gọi API cao cấp trong giờ hành chính (9 giờ sáng - 5 giờ chiều) sẽ được tính.
  </Tab>
</Tabs>

## Khắc phục sự cố

Giải quyết các vấn đề phổ biến với việc triển khai thanh toán dựa trên mức sử dụng và đảm bảo theo dõi và thanh toán chính xác.

### Các vấn đề phổ biến

Hầu hết các vấn đề thanh toán dựa trên mức sử dụng rơi vào các loại sau:

* Vấn đề giao hàng và xử lý sự kiện
* Vấn đề cấu hình đồng hồ đo
* Lỗi kiểu dữ liệu và định dạng
* Vấn đề ID khách hàng và xác thực

### Các bước gỡ lỗi

Khi khắc phục sự cố thanh toán dựa trên mức sử dụng:

1. Xác minh giao hàng sự kiện trong tab phân tích Sự kiện
2. Kiểm tra cấu hình đồng hồ đo khớp với cấu trúc sự kiện của bạn
3. Xác thực ID khách hàng và xác thực API
4. Xem xét các điều kiện lọc và cài đặt tổng hợp

### Giải pháp và sửa chữa

<AccordionGroup>
  <Accordion title="Events not showing in meter">
    Nguyên nhân phổ biến:

    * Tên sự kiện không khớp chính xác với cấu hình đồng hồ đo
    * Điều kiện lọc sự kiện đang loại bỏ các sự kiện của bạn
    * ID khách hàng không tồn tại trong tài khoản Dodo Payments của bạn
    * Dấu thời gian sự kiện nằm ngoài chu kỳ thanh toán hiện tại

    Giải pháp:

    * Kiểm tra lại cách viết và phân biệt hoa thường của tên sự kiện
    * Xem lại và kiểm tra các điều kiện lọc của bạn
    * Xác nhận ID khách hàng hợp lệ và còn hoạt động
    * Kiểm tra dấu thời gian sự kiện là gần đây và được định dạng đúng
  </Accordion>

  <Accordion title="Aggregation not working as expected">
    Nguyên nhân phổ biến:

    * Tên thuộc tính Over Property không khớp với khóa siêu dữ liệu sự kiện
    * Giá trị siêu dữ liệu có kiểu dữ liệu sai (chuỗi so với số)
    * Thiếu các thuộc tính siêu dữ liệu bắt buộc

    Giải pháp:

    * Đảm bảo khóa siêu dữ liệu khớp chính xác với thiết lập Over Property
    * Chuyển chuỗi số sang số thực trong sự kiện của bạn
    * Bao gồm tất cả các thuộc tính bắt buộc trong mỗi sự kiện
  </Accordion>

  <Accordion title="Filtering not working">
    Nguyên nhân phổ biến:

    * Tên thuộc tính bộ lọc không khớp với siêu dữ liệu sự kiện
    * Toán tử sai cho kiểu dữ liệu (chuỗi so với số)
    * Phân biệt chữ hoa chữ thường khi so sánh chuỗi

    Giải pháp:

    * Kiểm tra kỹ tên thuộc tính để đảm bảo khớp chính xác
    * Sử dụng toán tử phù hợp với kiểu dữ liệu của bạn
    * Cân nhắc vấn đề phân biệt hoa thường khi lọc chuỗi
  </Accordion>
</AccordionGroup>

## Tham khảo API liên quan

<CardGroup cols={2}>
  <Card title="Create Meter" icon="gauge" href="/api-reference/meters/create-meter">
    Tham khảo API để tạo và cấu hình các đồng hồ đo sử dụng cho việc theo dõi tiêu thụ của khách hàng
  </Card>

  <Card title="Ingest Usage Events" icon="arrow-right" href="/api-reference/usage-events/ingest-events">
    Tham khảo API để gửi sự kiện sử dụng đến các đồng hồ đo đã cấu hình của bạn cho việc tính toán hóa đơn
  </Card>
</CardGroup>
