# API Custom object

### Tạo/Cập nhật các mục tùy chỉnh cùng với liên hệ (Contact)

Plugin Custom object sử dụng dung URL API của liên hệ [Xem tại đây](https://abotvietnam.larksuite.com/docx/KQipdw0q2ovZe6xXKlYuD0Ucsdb#DWlidqlgloJ9Dkxixz9uUhdTsWf)

**`POST api/contacts/new`**

* [Tài liệu gốc](https://abotvietnam.larksuite.com/docx/KQipdw0q2ovZe6xXKlYuD0Ucsdb#A9SudzbPiootYJx6lDGuRGr4sGf)
* Tạo một liên hệ hoặc cập nhật liên hệ khớp với một trong các mã định danh.

**`POST api/contacts/batch/new`**

* Tạo nhiều liên hệ hoặc cập nhật liên hệ khớp với một trong các mã định danh. Sự khác biệt duy nhất giữa yêu cầu đơn và yêu cầu hàng loạt là yêu cầu hàng loạt gửi một mảng liên hệ qua một liên hệ duy nhất.

**`PATCH/PUT api/contacts/[contact_id]/edit`**

* [Tài liệu gốc](https://abotvietnam.larksuite.com/docx/KQipdw0q2ovZe6xXKlYuD0Ucsdb#D5RKdxOqioTGLIxqznWuSnVOsw6)
* Các mục tùy chỉnh sẽ được tạo/cập nhật tùy thuộc vào việc chúng có `id`hay không.

#### Ví dụ Payload

Ví dụ Payload bên dưới mong đợi rằng có một số Đối tượng tùy chỉnh (Custom Objects) được gọi là *Sản phẩm* (có bí danh `products`) có một số Trường tùy chỉnh (có bí danh là `website`, `in-stock`, `multi`, `sku`, `color`).

Định dạng của dữ liệu yêu cầu và phản hồi đơn giản.

**Request**

Một mục tùy chỉnh phải thuộc về một Đối tượng tùy chỉnh cụ thể để có thể biết rõ Trường tùy chỉnh và quyền nào áp dụng cho Mục tùy chỉnh. Đối tượng tùy chỉnh có thể được xác định bằng `id`hoặc `alias`.

Nếu bạn muốn thêm mới một Mục tùy chỉnh (Custom Items) thì không gửi`id`. Tuy nhiên, nếu bạn muốn cập nhật một Mục tùy chỉnh (Custom Items) thì bạn phải thêm id của Mục tùy chỉnh (Custom Items) đã có trước đó.

Đầu tiên, ABOT sẽ xác thực tất cả các Đối tượng tùy chỉnh, Mục tùy chỉnh và Trường tùy chỉnh. Sau đó, nó sẽ xác thực chính liên hệ. Nếu tất cả các xác thực đều vượt qua, nó sẽ lưu liên hệ, lưu các Mục tùy chỉnh cùng với các giá trị Trường tùy chỉnh và sau đó nó sẽ liên kết tất cả các mục tùy chỉnh với liên hệ.

```
{
    "email": "john@doe.email",
    "firstname": "John",
    "customObjects": {
        "data": [
            {
                "id": 1,
                "alias": "products",
                "data": [
                    {
                        "id": 23,
                        "name": "Hello From API2",
                        "attributes": {
                            "website": "https://abot.vn",
                            "in-stock": 45,
                            "multi": ["yellow", "blue"],
                            "sku": "2348720",
                            "color": "brown"
                        }
                    }
                ]
            }
        ]
    }
}
```

**Response**

Phản hồi sẽ chỉ chứa các đối tượng, mục và giá trị trường tùy chỉnh nếu `includeCustomObjects=true`tham số truy vấn được thêm vào để tránh làm chậm các yêu cầu không cần thiết có đối tượng tùy chỉnh.

Ví dụ: `POST api/contacts/new?includeCustomObjects=true`.

Tải trọng phản hồi thêm siêu dữ liệu vào phần tử cha Custom Object và Custom Item với các giới hạn của bộ sưu tập để có thể hiểu rõ giới hạn và thứ tự là gì. Giới hạn bộ sưu tập, trang và thứ tự không thể cấu hình được tại thời điểm này.

```
{
    "email": "john@doe.email",
    "firstname": "John",
    "customObjects": {
        "data": [
            {
                "id": 1,
                "alias": "products",
                "data": [
                    {
                        "id": 23,
                        "name": "Hello From API2",
                        "language": null,
                        "category": null,
                        "isPublished": true,
                        "dateAdded": "2019-06-07T11:52:01+00:00",
                        "dateModified": "2019-06-07T11:52:01+00:00",
                        "createdBy": 1,
                        "modifiedBy": 1,
                        "attributes": {
                            "website": "https://abot.vn",
                            "in-stock": 45,
                            "multi": ["yellow", "blue"],
                            "sku": "2348720",
                            "color": "brown"
                        }
                    }
                ],
                "meta": {
                  "page": {
                    "number": 1,
                    "size": 50,
                  },
                  "sort": "-dateAdded"
                }
            }
        ],
        "meta": {
          "page": {
            "number": 1,
            "size": 50,
           },
           "sort": "-dateAdded"
        }
    }
}
```

### Error Handling

Nếu Custom Object, Custom Item (nếu cung cấp ID) hoặc Custom Field được cung cấp trong yêu cầu không tồn tại, nó sẽ trả về trạng thái HTTP 400 (yêu cầu không hợp lệ) và không có Contact hay Custom Item nào được lưu. Mảng errors trong phản hồi sẽ chứa thông tin chi tiết về lỗi. Ví dụ:

```
{
  "errors": [
    {
      "code": 400,
      "message": "Custom Object with alias = invoice was not found",
      "details": []
    }
  ]
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.abot.vn/custom-object/api-custom-object.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
