88API88API
User GuideAI ApplicationsAPI ReferenceHelp & Support

Mô-đun quản lý kênh

Mô tả chức năng

Tiền tố API thống nhất là http(s)://<your-domain>

Nên sử dụng HTTPS trong môi trường sản xuất để bảo mật mã thông báo xác thực. HTTP chỉ được khuyến nghị cho môi trường phát triển.

Một hệ thống quản lý hoàn chỉnh cho các kênh cung cấp dịch vụ AI. Hỗ trợ các hoạt động CRUD cho các kênh, hoạt động hàng loạt, kiểm tra kết nối, truy vấn số dư và quản lý thẻ. Bao gồm các tính năng nâng cao như đồng bộ hóa khả năng mô hình và sao chép kênh.

🔐 Xác thực quản trị viên

Lấy danh sách kênh

  • Tên giao diện: Lấy danh sách kênh
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Phân trang và truy xuất thông tin danh sách tất cả các kênh trong hệ thống, hỗ trợ lọc theo loại, trạng thái, chế độ tag

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/?p=1&page_size=20&id_sort=false&tag_mode=false&type=1&status=enabled', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "items": [
      {
        "id": 1,
        "name": "OpenAIchannel",
        "type": 1,
        "status": 1,
        "priority": 10,
        "weight": 100,
        "models": "gpt-3.5-turbo,gpt-4",
        "group": "default",
        "response_time": 1500,
        "test_time": 1640995200
      }
    ],
    "total": 50,
    "type_counts": {
      "1": 20,
      "2": 15,
      "all": 35
    }
  }
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Failed to obtain channel list"
}

🧾 Mô tả trường:

  • p (Number): Số trang, mặc định là 1
  • page_size (Number): Mục trên mỗi trang, mặc định là 20
  • id_sort (Boolean): Có phân loại theo ID hay không, mặc định là sắp xếp theo mức độ ưu tiên
  • tag_mode (Boolean): Có bật chế độ gắn thẻ hay không
  • type (Number): Bộ lọc loại kênh
  • status (String): Bộ lọc trạng thái, giá trị tùy chọn: “enabled”, “disabled”, “all”

Tìm kiếm kênh

  • Tên giao diện: Tìm kiếm kênh
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/search
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Tìm kiếm kênh dựa trên từ khóa, nhóm, mô hình và các điều kiện khác

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/search?keyword=openai&group=default&model=gpt-4&id_sort=false&tag_mode=false&p=1&page_size=20&type=1&status=enabled', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "items": [
      {
        "id": 1,
        "name": "OpenAIofficial channels",
        "type": 1,
        "status": 1,
        "models": "gpt-3.5-turbo,gpt-4",
        "group": "default"
      }
    ],
    "total": 1,
    "type_counts": {
      "1": 1,
      "all": 1
    }
  }
}

❗ Ví dụ phản hồi không thành công:

{    "success": false,    "message": "Search channel failed"  }

🧾 Mô tả trường:

  • keyword (String): Từ khóa tìm kiếm, có thể trùng với tên kênh
  • group (String): Điều kiện lọc nhóm
  • model (String): Điều kiện lọc mô hình
  • Các thông số khác giống như giao diện Get Channel List

Khả năng của mô hình kênh truy vấn

  • Tên giao diện: Khả năng của mô hình kênh truy vấn
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/models
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Truy xuất danh sách model được hỗ trợ bởi tất cả các kênh trong hệ thống

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/models', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": [
    {
      "id": "gpt-3.5-turbo",
      "name": "GPT-3.5 Turbo"
    },
    {
      "id": "gpt-4",
      "name": "GPT-4"
    },
    {
      "id": "claude-3-sonnet",
      "name": "Claude 3 Sonnet"
    }
  ]
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Failed to get model list"
}

🧾 Mô tả trường:

data (Array): Danh sách thông tin model

  • id (Chuỗi): ID mẫu
  • name (String): Tên hiển thị của model

Khả năng của mô hình kích hoạt truy vấn

  • Tên giao diện: Khả năng của mô hình kích hoạt truy vấn
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/models_enabled
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Truy xuất danh sách các model được hỗ trợ bởi các kênh hiện đang bật

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/models_enabled', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": [
    "gpt-3.5-turbo",
    "gpt-4",
    "claude-3-sonnet"
  ]
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Failed to get enabled model"
}

🧾 Mô tả trường:

data (Array): Danh sách ID model được kích hoạt

Nhận kênh đơn

  • Tên giao diện: Nhận kênh đơn
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/:id
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Truy xuất thông tin chi tiết cho kênh được chỉ định, ngoại trừ thông tin khóa nhạy cảm

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/123', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "id": 123,
    "name": "OpenAIchannel",
    "type": 1,
    "status": 1,
    "priority": 10,
    "weight": 100,
    "models": "gpt-3.5-turbo,gpt-4",
    "group": "default",
    "base_url": "https://api.openai.com",
    "model_mapping": "{}",
    "channel_info": {
      "is_multi_key": false,
      "multi_key_mode": "random"
    }
  }
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Channel does not exist"
}

🧾 Mô tả trường:

  • id (Number): ID kênh, được truyền qua đường dẫn URL
  • Trả về thông tin kênh đầy đủ, nhưng loại trừ các trường chính

Kết nối kênh thử nghiệm hàng loạt

  • Tên giao diện: Kết nối kênh thử nghiệm hàng loạt
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/test
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Kiểm tra hàng loạt khả năng kết nối và thời gian phản hồi của tất cả hoặc các kênh được chỉ định

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/test?model=gpt-3.5-turbo', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "Batch testing completed",
  "data": {
    "total": 10,
    "success": 8,
    "failed": 2,
    "results": [
      {
        "channel_id": 1,
        "channel_name": "OpenAIchannel",
        "success": true,
        "time": 1.25,
        "message": ""
      },
      {
        "channel_id": 2,
        "channel_name": "Claudechannel",
        "success": false,
        "time": 0,
        "message": "Connection timeout"
      }
    ]
  }
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Batch test failed"
}

🧾 Mô tả trường:

  • model (String): Tùy chọn, chỉ định model test
  • results (Array): Danh sách kết quả kiểm tra
  • success (Boolean): Kiểm thử có thành công hay không
  • time (Số): Thời gian đáp ứng (giây)

Kiểm tra một kênh

  • Tên giao diện: Kiểm tra một kênh
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/test/:id
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Kiểm tra khả năng kết nối của kênh được chỉ định, hỗ trợ mô hình kiểm tra được chỉ định

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/test/123?model=gpt-4', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "time": 1.25
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "APIInvalid key",
  "time": 0.5
}

🧾 Mô tả trường:

  • id (Number): ID kênh, được truyền qua đường dẫn URL
  • model (String): Tùy chọn, ghi rõ tên model thử nghiệm
  • time (Số): Thời gian đáp ứng (giây)

Số dư làm mới hàng loạt

  • Tên giao diện: Số dư làm mới hàng loạt
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/update_balance
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Cập nhật hàng loạt thông tin số dư cho tất cả các kênh đã bật

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/update_balance', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "Batch update balance completed"
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Batch update balance failed"
}

🧾 Mô tả trường:

Không có thông số yêu cầu, hệ thống tự động cập nhật số dư tất cả các kênh đã kích hoạt

Số dư làm mới một lần

  • Tên giao diện: Cập nhật số dư kênh được chỉ định
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/update_balance/:id
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Cập nhật thông tin số dư cho kênh được chỉ định. Truy vấn số dư không được hỗ trợ cho các kênh đa khóa.

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/update_balance/123', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "balance": 25.50
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Multi-key channels do not support balance inquiries"
}

🧾 Mô tả trường:

  • id (Number): ID kênh, được truyền qua đường dẫn URL
  • balance (Số): Cập nhật cân bằng kênh

Thêm kênh

  • Tên giao diện: Thêm kênh
  • Phương thức HTTP: POST
  • Đường dẫn: /api/channel/
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Tạo kênh dịch vụ AI mới, hỗ trợ các chế độ đơn, hàng loạt và đa phím

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    mode: "single",
    channel: {
      name: "OpenAIchannel",
      type: 1,
      key: "`<YOUR_API_KEY>`",
      base_url: "https://api.openai.com",
      models: "gpt-3.5-turbo,gpt-4,claude-3-sonnet",
      groups: ["default"],
      priority: 10,
      weight: 100
    }
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Unsupported add mode"
}

🧾 Mô tả trường:

  • mode (String): Chế độ cộng, giá trị tùy chọn: “single”, “batch”, “multi_to_single”
  • multi_key_mode (String): Chế độ đa phím, bắt buộc khi chế độ là "multi_to_single"
  • channel (Object): Thông tin cấu hình kênh
  • name (String): Tên kênh
  • type (Số): Loại kênh
  • key (Chuỗi): API Key
  • base_url (Chuỗi): URL cơ sở
  • models (String): Danh sách model được hỗ trợ, phân tách bằng dấu phẩy, tùy chọn
  • groups (Array): Danh sách các nhóm có sẵn
  • priority (Số): Ưu tiên
  • weight (Số): Trọng lượng

Cập nhật kênh

  • Tên giao diện: Cập nhật kênh
  • Phương thức HTTP: PUT
  • Đường dẫn: /api/channel/
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Cập nhật thông tin cấu hình của kênh hiện có

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    id: 123,
    name: "updatedOpenAIchannel",
    status: 1,
    priority: 15,
    weight: 120
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Channel does not exist"
}

🧾 Mô tả trường:

  • id (Số): ID kênh, bắt buộc
  • Các trường khác giống giao diện Add Channel và là tùy chọn

Xóa các kênh bị vô hiệu hóa

  • Tên giao diện: Xóa các kênh bị vô hiệu hóa
  • Phương thức HTTP: XÓA
  • Đường dẫn: /api/channel/disabled
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Xóa hàng loạt tất cả các kênh bị vô hiệu hóa

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/disabled', {
  method: 'DELETE',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": 5
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Delete failed"
}

🧾 Mô tả trường:

  • Không có tham số yêu cầu
  • data (Number): Số lượng kênh đã xóa

Vô hiệu hóa hàng loạt các kênh được gắn thẻ

  • Tên giao diện: Vô hiệu hóa hàng loạt các kênh được gắn thẻ
  • Phương thức HTTP: POST
  • Đường dẫn: /api/channel/tag/disabled
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Vô hiệu hóa hàng loạt kênh dựa trên thẻ

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/tag/disabled', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    tag: "test-tag"
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Parameter error"
}

🧾 Mô tả trường:

tag (Chuỗi): Thẻ kênh bị vô hiệu hóa, bắt buộc

Kích hoạt hàng loạt các kênh được gắn thẻ

  • Tên giao diện: Kích hoạt hàng loạt các kênh được gắn thẻ
  • Phương thức HTTP: POST
  • Đường dẫn: /api/channel/tag/enabled
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Kích hoạt hàng loạt kênh dựa trên thẻ

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/tag/enabled', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    tag: "production-tag"
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Parameter error"
}

🧾 Mô tả trường:

tag (Chuỗi): Thẻ kênh được bật, bắt buộc

Chỉnh sửa thẻ kênh

  • Tên giao diện: Chỉnh sửa thẻ kênh
  • Phương thức HTTP: PUT
  • Đường dẫn: /api/channel/tag
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Chỉnh sửa hàng loạt thuộc tính kênh cho các thẻ được chỉ định

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/tag', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    tag: "old-tag",
    new_tag: "new-tag",
    priority: 20,
    weight: 150,
    models: "gpt-3.5-turbo,gpt-4,claude-3-sonnet",
    groups: "default,vip"
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "tagcannot be empty"
}

🧾 Mô tả trường:

  • tag (String): Tên tag cần chỉnh sửa, bắt buộc
  • new_tag (String): Tên thẻ mới, tùy chọn
  • priority (Số): Ưu tiên mới, tùy chọn
  • weight (Số): Trọng lượng mới, tùy chọn
  • model_mapping (String): Cấu hình ánh xạ mô hình, tùy chọn
  • models (String): Danh sách model được hỗ trợ, phân tách bằng dấu phẩy, tùy chọn
  • groups (String): Danh sách các nhóm có sẵn, phân cách bằng dấu phẩy, tùy chọn

Xóa kênh

  • Tên giao diện: Xóa kênh
  • Phương thức HTTP: XÓA
  • Đường dẫn: /api/channel/:id
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Xóa cứng kênh đã chỉ định. Bộ đệm kênh sẽ được làm mới sau khi xóa.

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/123', {
  method: 'DELETE',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Channel does not exist"
}

🧾 Mô tả trường:

id (Số): ID kênh, được truyền qua đường dẫn URL

Xóa kênh hàng loạt

  • Tên giao diện: Xóa kênh hàng loạt
  • Phương thức HTTP: POST
  • Đường dẫn: /api/channel/batch
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Xóa kênh hàng loạt dựa trên danh sách ID

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/batch', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    ids: [1, 2, 3, 4, 5]
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": 5
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Parameter error"
}

🧾 Mô tả trường:

  • ids (Array): Danh sách ID kênh cần xóa, bắt buộc và không được để trống
  • data (Number): Số kênh đã xóa thành công

Sửa bảng khả năng kênh

  • Tên giao diện: Sửa bảng khả năng kênh
  • Phương thức HTTP: POST
  • Đường dẫn: /api/channel/fix
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Sửa dữ liệu bảng khả năng kênh và xây dựng lại mối quan hệ ánh xạ giữa các kênh và mô hình

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/fix', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "success": 45,
    "fails": 2
  }
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Failed to repair ability table"
}

🧾 Mô tả trường:

  • Không có tham số yêu cầu
  • data.success (Number): Số kênh đã sửa thành công
  • data.fails (Number): Số kênh chưa sửa được

Tìm nạp các mô hình kênh đơn

  • Tên giao diện: Tìm nạp các mô hình kênh đơn
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/fetch_models/:id
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Truy xuất danh sách các mẫu có sẵn từ API ngược dòng của kênh được chỉ định

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/fetch_models/123', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": [
    "gpt-3.5-turbo",
    "gpt-4",
    "gpt-4-turbo-preview"
  ]
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Failed to parse response: invalid character 'H' looking for beginning of value"
}

🧾 Mô tả trường:

  • id (Number): ID kênh, được truyền qua đường dẫn URL
  • data (Array): Danh sách ID model được lấy từ upstream

Tìm nạp tất cả các mô hình kênh

  • Tên giao diện: Tìm nạp tất cả các mô hình kênh
  • Phương thức HTTP: POST
  • Đường dẫn: /api/channel/fetch_models
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Truy xuất danh sách các mô hình từ API ngược dòng bằng thông tin cấu hình được cung cấp, dùng để xem trước khi tạo kênh mới

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/fetch_models', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    base_url: "https://api.openai.com",
    type: 1,
    key: "`<YOUR_API_KEY>`"
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "data": [
    "gpt-3.5-turbo",
    "gpt-4",
    "text-davinci-003"
  ]
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Failed to fetch models"
}

🧾 Mô tả trường:

  • base_url (String): URL cơ sở, tùy chọn, sử dụng URL mặc định nếu trống
  • type (Số): Loại kênh, bắt buộc
  • key (Chuỗi): API Key, bắt buộc
  • data (Array): Danh sách model được lấy ra

Thẻ kênh được đặt hàng loạt

  • Tên giao diện: Thẻ kênh được đặt hàng loạt
  • Phương thức HTTP: POST
  • Đường dẫn: /api/channel/batch/tag
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Đặt thẻ hàng loạt cho danh sách kênh được chỉ định

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/batch/tag', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    ids: [1, 2, 3],
    tag: "production"
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": 3
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "Parameter error"
}

🧾 Mô tả trường:

  • ids (Array): Danh sách ID kênh cần đặt thẻ, bắt buộc và không được để trống
  • tag (String): Tên của tag cần đặt. Truyền null sẽ xóa thẻ.
  • data (Number): Số lượng kênh được gắn thẻ thành công

Nhận mô hình theo thẻ

  • Tên giao diện: Nhận mô hình theo thẻ
  • Phương thức HTTP: NHẬN
  • Đường dẫn: /api/channel/tag/models
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Truy xuất danh sách model có số lượng model cao nhất trong số tất cả các kênh theo thẻ được chỉ định

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/tag/models?tag=production', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": "gpt-3.5-turbo,gpt-4,claude-3-sonnet"
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "tagcannot be empty"
}

🧾 Mô tả trường:

  • tag (String): Tên thẻ, bắt buộc
  • data (String): Danh sách model của kênh có nhiều model nhất theo thẻ này, được phân cách bằng dấu phẩy

Sao chép kênh

  • Tên giao diện: Sao chép kênh
  • Phương thức HTTP: POST
  • Đường dẫn: /api/channel/copy/:id
  • Yêu cầu xác thực: Quản trị viên
  • Mô tả chức năng: Sao chép kênh hiện có để tạo kênh mới, hỗ trợ hậu tố tùy chỉnh và tùy chọn đặt lại số dư

💡 Yêu cầu Ví dụ:

const response = await fetch('/api/channel/copy/123?suffix=_backup&reset_balance=true', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "id": 124
  }
}

❗ Ví dụ phản hồi không thành công:

{
  "success": false,
  "message": "invalid id"
}

🧾 Mô tả trường:

  • id (Number): ID kênh cần sao chép, truyền qua đường dẫn URL
  • suffix (String): Tùy chọn, thêm hậu tố vào tên gốc, mặc định là “_copy”
  • reset_balance (Boolean): Tùy chọn, có reset số dư và hạn ngạch đã sử dụng về 0 hay không, mặc định là true
  • data.id (Number): ID của kênh mới tạo