ड्रॉपडाउन चिप का इस्तेमाल करना

Google Docs API की मदद से, Google Docs के दस्तावेज़ों में ड्रॉपडाउन चिप प्रोग्राम के हिसाब से बनाए जा सकते हैं. साथ ही, उन्हें डाला, अपडेट किया, पढ़ा, और मैनेज किया जा सकता है.

ड्रॉपडाउन चिप क्या होते हैं?

Google Docs में मौजूद ड्रॉपडाउन चिप की मदद से, उपयोगकर्ता दस्तावेज़ के टेक्स्ट में ही इंटरैक्टिव और पसंद के मुताबिक बनाए जा सकने वाले सिलेक्शन मेन्यू का इस्तेमाल कर सकते हैं. उपयोगकर्ता, ड्रॉपडाउन चिप पर क्लिक करके विकल्पों की पहले से तय की गई सूची में से कोई विकल्प चुन सकते हैं. हर विकल्प का अपना डिसप्ले टेक्स्ट और कलर स्टाइलिंग होती है. ड्रॉपडाउन चिप का इस्तेमाल, प्रोजेक्ट को ट्रैक करने, स्टेटस अपडेट करने, समीक्षा के वर्कफ़्लो, और मंज़ूरी के चरणों के लिए किया जाता है.

Docs API की मदद से, ये काम किए जा सकते हैं:

  • फिर से इस्तेमाल किए जा सकने वाले ड्रॉपडाउन टेंप्लेट तय करें. इनमें पसंद के मुताबिक टाइटल, विकल्प के नाम, और रंग शामिल हों.
  • ड्रॉपडाउन चिप को मान्य वर्ण वाली जगह पर डालें.
  • ड्रॉपडाउन चिप के किसी इंस्टेंस के चुने गए विकल्प को अपडेट करें.
  • शेयर किए गए ड्रॉपडाउन की परिभाषाओं में बदलाव किया जा सकता है. साथ ही, एक साथ सभी रेफ़रंसिंग चिप अपडेट किए जा सकते हैं.
  • मौजूदा चिप में रेफ़रेंशियल इंटिग्रिटी बनाए रखते हुए, विकल्पों को सुरक्षित तरीके से बदलें या हटाएं.
  • इस्तेमाल नहीं किए गए ड्रॉपडाउन टेंप्लेट मिटाएं.

आर्किटेक्चर: परिभाषाएं और इंस्टेंस

Docs API में, ड्रॉपडाउन चिप की डेफ़िनिशन और इंस्टेंस होते हैं. डेफ़िनिशन, ड्रॉपडाउन इंस्टेंस के लिए विकल्प सेट करती है. ड्रॉपडाउन इंस्टेंस, एक ऐसा ड्रॉपडाउन होता है जिससे लोग इंटरैक्ट कर सकते हैं. साथ ही, यह चुने गए विकल्पों के बारे में जानकारी सेव करता है.

Docs API, ड्रॉपडाउन टेंप्लेट के कॉन्फ़िगरेशन को इनलाइन ड्रॉपडाउन चिप इंस्टेंस से अलग करता है:

  1. DropdownDefinition: यह टैब-लेवल का टेंप्लेट होता है. यह ड्रॉपडाउन के टाइटल और चुने जा सकने वाले विकल्पों (DropdownOption) के कलेक्शन को तय करता है. यह दस्तावेज़ में किसी खास कैरेक्टर ऑफ़सेट पर मौजूद नहीं होता. इसके बजाय, इसे टैब के डेफ़िनिशन मैप: document.tabs[].documentTab.dropdownDefinitions में सेव किया जाता है.
  2. ड्रॉपडाउन: यह एक ऐसा चिप इंस्टेंस होता है जिसे पैराग्राफ़ एलिमेंट (ParagraphElement.dropdown) में इनलाइन एम्बेड किया जाता है. हर ड्रॉपडाउन इंस्टेंस, dropdownDefinitionId को रेफ़रंस देता है और अपने चालू selectedOptionId को सेव करता है.

DropdownDefinition में बदलाव करने पर (जैसे, कोई विकल्प जोड़ना या टाइटल का नाम बदलना), टैब में मौजूद सभी रेफ़रंसिंग चिप अपडेट हो जाती हैं. इसके लिए, हर एलिमेंट को अपडेट करने की ज़रूरत नहीं होती.

हर Dropdown इंस्टेंस, अपने selectedOptionId को ट्रैक करता है. किसी चिप की चुनी गई वैल्यू में बदलाव करने से, सिर्फ़ उस इंस्टेंस पर असर पड़ता है.

आईडी का फ़ॉर्मैट और पुष्टि करने के नियम

उपयोगकर्ता के दिए गए आईडी, फ़ॉर्मैट, प्रीफ़िक्स, और लंबाई से जुड़ी खास बातों के मुताबिक होने चाहिए:

पहचानकर्ता प्रीफ़िक्स जोड़ना ज़रूरी है मान्य रेगुलर एक्सप्रेशन लंबाई की सीमा उदाहरण
ड्रॉपडाउन की परिभाषा का आईडी (dropdownDefinitionId) kix. ^kix\.[a-zA-Z0-9_-]{2,14}$ 6 से 18 वर्ण kix.review_status
ड्रॉपडाउन विकल्प का आईडी (optionId) dropdownItem. ^dropdownItem\.[a-zA-Z0-9_-]{2,14}$ 15–27 वर्ण dropdownItem.pending

उपयोगकर्ता के दिए गए आईडी जनरेट करना

ज़रूरी प्रीफ़िक्स और रेगुलर एक्सप्रेशन से जुड़ी शर्तों के मुताबिक आईडी जनरेट करने के लिए, यहां दिए गए हेल्पर फ़ंक्शन का इस्तेमाल करें. ये हेल्पर, छोटे अक्षरों वाले बेस-36 के अल्फ़ान्यूमेरिक सफ़िक्स जनरेट करते हैं. ये Google Docs के यूज़र इंटरफ़ेस (यूआई) से जनरेट किए गए फ़ॉर्मैट से मेल खाते हैं:

Python

import random
import string

def generate_dropdown_definition_id(suffix_len: int = 8) -> str:
    """Generates a valid user-provided DropdownDefinition ID (6-18 chars, starting with 'kix.')."""
    chars = string.ascii_lowercase + string.digits
    suffix = "".join(random.choices(chars, k=max(2, min(suffix_len, 14))))
    return f"kix.{suffix}"

def generate_dropdown_option_id(suffix_len: int = 8) -> str:
    """Generates a valid user-provided DropdownOption ID (15-27 chars, starting with 'dropdownItem.')."""
    chars = string.ascii_lowercase + string.digits
    suffix = "".join(random.choices(chars, k=max(2, min(suffix_len, 14))))
    return f"dropdownItem.{suffix}"

Java

import java.security.SecureRandom;

public final class DropdownIdGenerator {
  private static final String BASE36_CHARS =
      "abcdefghijklmnopqrstuvwxyz0123456789";
  private static final SecureRandom RANDOM = new SecureRandom();

  private DropdownIdGenerator() {}

  /** Generates a valid user-provided DropdownDefinition ID (6-18 chars, starting with "kix."). */
  public static String generateDefinitionId(int suffixLength) {
    int length = Math.max(2, Math.min(suffixLength, 14));
    StringBuilder sb = new StringBuilder("kix.");
    for (int i = 0; i < length; i++) {
      sb.append(BASE36_CHARS.charAt(RANDOM.nextInt(BASE36_CHARS.length())));
    }
    return sb.toString();
  }

  /** Generates a valid user-provided DropdownOption ID (15-27 chars, starting with "dropdownItem."). */
  public static String generateOptionId(int suffixLength) {
    int length = Math.max(2, Math.min(suffixLength, 14));
    StringBuilder sb = new StringBuilder("dropdownItem.");
    for (int i = 0; i < length; i++) {
      sb.append(BASE36_CHARS.charAt(RANDOM.nextInt(BASE36_CHARS.length())));
    }
    return sb.toString();
  }
}

ड्रॉपडाउन चिप बनाना और उन्हें शामिल करना

एक बैच बनाना (सुझाया गया)

सबसे असरदार पैटर्न में, एक documents.batchUpdate कॉल में CreateDropdownDefinitionRequest और InsertDropdownRequest को एक साथ इस्तेमाल किया जाता है.

यहां दिए गए कोड सैंपल में, उपयोगकर्ता से मिले आईडी का इस्तेमाल करके, "समीक्षा की स्थिति" ड्रॉपडाउन की परिभाषा बनाई गई है. इसमें रंग के हिसाब से कोड किए गए तीन विकल्प हैं. साथ ही, दस्तावेज़ के आखिर में एक इंस्टेंस डाला गया है:

Python

requests = [
    {
        "createDropdownDefinition": {
            "dropdownDefinition": {
                "dropdownDefinitionId": "kix.review_status",
                "dropdownDefinitionProperties": {
                    "title": "Review Status",
                    "options": [
                        {
                            "optionId": "dropdownItem.pending",
                            "displayValue": "Pending Review",
                            "textStyle": {
                                "backgroundColor": {
                                    "color": {"rgbColor": {"red": 0.99, "green": 0.90, "blue": 0.65}}
                                },
                                "foregroundColor": {
                                    "color": {"rgbColor": {"red": 0.45, "green": 0.30, "blue": 0.0}}
                                },
                            },
                        },
                        {
                            "optionId": "dropdownItem.approved",
                            "displayValue": "Approved",
                            "textStyle": {
                                "backgroundColor": {
                                    "color": {"rgbColor": {"red": 0.85, "green": 0.95, "blue": 0.85}}
                                },
                                "foregroundColor": {
                                    "color": {"rgbColor": {"red": 0.08, "green": 0.40, "blue": 0.15}}
                                },
                            },
                        },
                        {
                            "optionId": "dropdownItem.rejected",
                            "displayValue": "Needs Changes",
                            "textStyle": {
                                "backgroundColor": {
                                    "color": {"rgbColor": {"red": 0.98, "green": 0.84, "blue": 0.84}}
                                },
                                "foregroundColor": {
                                    "color": {"rgbColor": {"red": 0.65, "green": 0.10, "blue": 0.10}}
                                },
                            },
                        },
                    ],
                },
            }
        }
    },
    {
        "insertDropdown": {
            "endOfSegmentLocation": {},
            "dropdownDefinitionId": "kix.review_status",
            "selectedOptionId": "dropdownItem.pending",
        }
    },
]

result = service.documents().batchUpdate(
    documentId=DOCUMENT_ID,
    body={"requests": requests}
).execute()

Java

List<Request> requests = new ArrayList<>();

List<DropdownOption> options = Arrays.asList(
    new DropdownOption()
        .setOptionId("dropdownItem.pending")
        .setDisplayValue("Pending Review")
        .setTextStyle(new TextStyle()
            .setBackgroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.99f).setGreen(0.90f).setBlue(0.65f))))
            .setForegroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.45f).setGreen(0.30f).setBlue(0.0f))))),
    new DropdownOption()
        .setOptionId("dropdownItem.approved")
        .setDisplayValue("Approved")
        .setTextStyle(new TextStyle()
            .setBackgroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.85f).setGreen(0.95f).setBlue(0.85f))))
            .setForegroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.08f).setGreen(0.40f).setBlue(0.15f))))),
    new DropdownOption()
        .setOptionId("dropdownItem.rejected")
        .setDisplayValue("Needs Changes")
        .setTextStyle(new TextStyle()
            .setBackgroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.98f).setGreen(0.84f).setBlue(0.84f))))
            .setForegroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.65f).setGreen(0.10f).setBlue(0.10f))))));

DropdownDefinition definition = new DropdownDefinition()
    .setDropdownDefinitionId("kix.review_status")
    .setDropdownDefinitionProperties(new DropdownDefinitionProperties()
        .setTitle("Review Status")
        .setOptions(options));

requests.add(new Request().setCreateDropdownDefinition(
    new CreateDropdownDefinitionRequest().setDropdownDefinition(definition)));

requests.add(new Request().setInsertDropdown(
    new InsertDropdownRequest()
        .setEndOfSegmentLocation(new EndOfSegmentLocation())
        .setDropdownDefinitionId("kix.review_status")
        .setSelectedOptionId("dropdownItem.pending")));

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
    .batchUpdate(DOCUMENT_ID, body)
    .execute();

ड्रॉपडाउन की पुष्टि करने के नियम और सीमाएं

ड्रॉपडाउन की परिभाषाएं बनाते या उनमें बदलाव करते समय, ये पाबंदियां लागू होती हैं:

  • विकल्पों की संख्या: ड्रॉपडाउन की परिभाषा में 2 से 50 विकल्प होने चाहिए.
  • टाइटल की लंबाई: title की परिभाषा खाली नहीं होनी चाहिए. साथ ही, इसमें 200 से ज़्यादा वर्ण नहीं होने चाहिए.
  • डिसप्ले वैल्यू की लंबाई: हर विकल्प का displayValue खाली नहीं होना चाहिए. साथ ही, इसमें 200 से ज़्यादा वर्ण नहीं होने चाहिए.
  • विकल्पों की स्टाइल: DropdownOption.textStyle में सिर्फ़ foregroundColor और backgroundColor का इस्तेमाल किया जा सकता है. स्टाइल की अन्य प्रॉपर्टी सेट करने पर, 400 Bad Request गड़बड़ी का मैसेज दिखता है.
  • डिफ़ॉल्ट रूप से चुना गया विकल्प: InsertDropdownRequest में, अगर selectedOptionId को शामिल नहीं किया जाता है, तो चिप डिफ़ॉल्ट रूप से DropdownDefinition में तय किए गए पहले विकल्प पर सेट हो जाती है.

किसी ड्रॉपडाउन चिप को चुनने की सुविधा अपडेट करना

अगर आपको मौजूदा ड्रॉपडाउन चिप इंस्टेंस के चुने गए विकल्प को बदलना है, लेकिन उसके टेंप्लेट या अन्य चिप में बदलाव नहीं करना है, तो UpdateDropdownPropertiesRequest का इस्तेमाल करें:

  • dropdownId: (ज़रूरी है) अपडेट करने के लिए, ड्रॉपडाउन चिप के किसी इंस्टेंस का आईडी.
  • tabId: ड्रॉपडाउन वाले टैब का आईडी. अगर इसे शामिल नहीं किया जाता है, तो यह पहले टैब पर डिफ़ॉल्ट रूप से सेट होता है.
  • fields: इसे "selectedOptionId" पर सेट करें.

यहां दिया गया कोड सैंपल, ड्रॉपडाउन चिप के चालू किए गए विकल्प को "dropdownItem.approved" पर अपडेट करता है:

Python

requests = [
    {
        "updateDropdownProperties": {
            "dropdownId": "kix.chip_abc1",
            "tabId": "t.0",
            "dropdownProperties": {
                "selectedOptionId": "dropdownItem.approved",
            },
            "fields": "selectedOptionId",
        }
    }
]

result = service.documents().batchUpdate(
    documentId=DOCUMENT_ID,
    body={"requests": requests}
).execute()

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setUpdateDropdownProperties(
    new UpdateDropdownPropertiesRequest()
        .setDropdownId("kix.chip_abc1")
        .setTabId("t.0")
        .setDropdownProperties(new DropdownProperties()
            .setSelectedOptionId("dropdownItem.approved"))
        .setFields("selectedOptionId")));

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
    .batchUpdate(DOCUMENT_ID, body)
    .execute();

ड्रॉपडाउन की परिभाषाओं और विकल्पों को अपडेट करना

अगर आपको टेंप्लेट में बदलाव करना है (जैसे, टाइटल, विकल्पों की सूची, डिसप्ले लेबल या रंग), तो UpdateDropdownDefinitionPropertiesRequest का इस्तेमाल करें. किसी परिभाषा को अपडेट करने पर, टैब में मौजूद उससे जुड़े सभी ड्रॉपडाउन चिप अपने-आप अपडेट हो जाते हैं.

विकल्पों के लिए पूरी सूची को बदलना

अगर dropdownDefinitionProperties.options को fields मास्क में शामिल किया जाता है, तो अनुरोध पूरी सूची को बदल देता है. आपको चुने गए क्रम में विकल्पों की पूरी सूची देनी होगी. सर्वर, नई सूची की तुलना मौजूदा परिभाषा से करता है:

  • नया विकल्प: optionId के बिना (या उपयोगकर्ता के दिए गए नए optionId के साथ) कोई विकल्प शामिल करने पर, उसे परिभाषा में जोड़ दिया जाता है.
  • अपडेट किया गया विकल्प: मौजूदा optionId में बदलाव किए गए displayValue या textStyle अपडेट देने पर, उस विकल्प को अपडेट कर दिया जाता है.
  • विकल्पों का क्रम बदला गया: विकल्पों की सूची को उसी क्रम में सेव किया जाता है जिस क्रम में अनुरोध में दिया गया है.
  • मिटाया गया विकल्प: मौजूदा optionId को हटाने से, वह विकल्प परिभाषा से मिट जाता है.

रेफ़रेंशियल इंटिग्रिटी और विकल्प बदलना

अगर दस्तावेज़ में मौजूद किसी ड्रॉपडाउन चिप में, हटाए जा रहे विकल्प को चुना गया है, तो आपको selectedOptionIdReplacements (map<string, string>) में मैपिंग ज़रूर देनी होगी. कुंजियां, हटाए जा रहे विकल्पों के आईडी होती हैं. वहीं, वैल्यू, विकल्पों को बदलने के लिए इस्तेमाल किए जाने वाले आईडी होती हैं.

यहां दिए गए कोड सैंपल में, विकल्पों को बदलकर ड्रॉपडाउन की परिभाषा को अपडेट करने का तरीका बताया गया है:

Python

requests = [
    {
        "updateDropdownDefinitionProperties": {
            "dropdownDefinitionId": "kix.review_status",
            "tabId": "t.0",
            "dropdownDefinitionProperties": {
                "title": "Editorial Review Status",
                "options": [
                    {
                        "optionId": "dropdownItem.approved",
                        "displayValue": "Approved",
                        "textStyle": {
                            "backgroundColor": {
                                "color": {"rgbColor": {"red": 0.85, "green": 0.95, "blue": 0.85}}
                            },
                            "foregroundColor": {
                                "color": {"rgbColor": {"red": 0.08, "green": 0.40, "blue": 0.15}}
                            },
                        },
                    },
                    {
                        "optionId": "dropdownItem.rejected",
                        "displayValue": "Changes Requested",
                        "textStyle": {
                            "backgroundColor": {
                                "color": {"rgbColor": {"red": 0.98, "green": 0.84, "blue": 0.84}}
                            },
                            "foregroundColor": {
                                "color": {"rgbColor": {"red": 0.65, "green": 0.10, "blue": 0.10}}
                            },
                        },
                    },
                ],
            },
            "selectedOptionIdReplacements": {
                "dropdownItem.pending": "dropdownItem.rejected"
            },
            "fields": "title,options",
        }
    }
]

result = service.documents().batchUpdate(
    documentId=DOCUMENT_ID,
    body={"requests": requests}
).execute()

Java

List<DropdownOption> updatedOptions = Arrays.asList(
    new DropdownOption()
        .setOptionId("dropdownItem.approved")
        .setDisplayValue("Approved")
        .setTextStyle(new TextStyle()
            .setBackgroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.85f).setGreen(0.95f).setBlue(0.85f))))
            .setForegroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.08f).setGreen(0.40f).setBlue(0.15f))))),
    new DropdownOption()
        .setOptionId("dropdownItem.rejected")
        .setDisplayValue("Changes Requested")
        .setTextStyle(new TextStyle()
            .setBackgroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.98f).setGreen(0.84f).setBlue(0.84f))))
            .setForegroundColor(new OptionalColor().setColor(
                new Color().setRgbColor(new RgbColor().setRed(0.65f).setGreen(0.10f).setBlue(0.10f))))));

Map<String, String> replacements = new HashMap<>();
replacements.put("dropdownItem.pending", "dropdownItem.rejected");

List<Request> requests = new ArrayList<>();
requests.add(new Request().setUpdateDropdownDefinitionProperties(
    new UpdateDropdownDefinitionPropertiesRequest()
        .setDropdownDefinitionId("kix.review_status")
        .setTabId("t.0")
        .setDropdownDefinitionProperties(new DropdownDefinitionProperties()
            .setTitle("Editorial Review Status")
            .setOptions(updatedOptions))
        .setSelectedOptionIdReplacements(replacements)
        .setFields("title,options")));

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
    .batchUpdate(DOCUMENT_ID, body)
    .execute();

ड्रॉपडाउन की परिभाषा मिटाना

इस्तेमाल नहीं किए गए ड्रॉपडाउन टेंप्लेट को हटाने के लिए, DeleteDropdownDefinitionRequest का इस्तेमाल करें.

यहां दिए गए कोड सैंपल में, ड्रॉपडाउन की परिभाषा मिटाने का तरीका बताया गया है:

Python

requests = [
    {
        "deleteDropdownDefinition": {
            "dropdownDefinitionId": "kix.review_status",
            "tabId": "t.0",
        }
    }
]

result = service.documents().batchUpdate(
    documentId=DOCUMENT_ID,
    body={"requests": requests}
).execute()

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setDeleteDropdownDefinition(
    new DeleteDropdownDefinitionRequest()
        .setDropdownDefinitionId("kix.review_status")
        .setTabId("t.0")));

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
    .batchUpdate(DOCUMENT_ID, body)
    .execute();

गड़बड़ी ठीक करना और समस्या हल करना

गड़बड़ी की सामान्य स्थितियां और उन्हें ठीक करने के तरीके:

स्थिति कोड वजह रिज़ॉल्यूशन
400 INVALID_ARGUMENT आईडी प्रीफ़िक्स या रेगुलर एक्सप्रेशन का फ़ॉर्मैट अमान्य है. पक्का करें कि dropdownDefinitionId, kix. (6 से 18 वर्ण) से शुरू हो और optionId, dropdownItem. (15 से 27 वर्ण) से शुरू हो.
400 INVALID_ARGUMENT विकल्पों की संख्या, तय सीमा से ज़्यादा है. ड्रॉपडाउन की परिभाषा में, 2 से 50 विकल्प होने चाहिए.
400 INVALID_ARGUMENT टाइटल या डिसप्ले वैल्यू खाली है या इसमें 200 से ज़्यादा वर्ण हैं. 1 से 200 वर्णों के बीच की कोई ऐसी स्ट्रिंग डालें जिसमें कोई वर्ण मौजूद हो.
400 INVALID_ARGUMENT विकल्प में टेक्स्ट स्टाइल प्रॉपर्टी काम नहीं करती. ड्रॉपडाउन विकल्पों के लिए, सिर्फ़ foregroundColor और backgroundColor का इस्तेमाल किया जा सकता है. फ़ॉन्ट, साइज़ या अन्य एट्रिब्यूट हटाएं.
400 INVALID_ARGUMENT मिटाए गए विकल्प के बदले कोई और विकल्प जोड़ने की मैपिंग मौजूद नहीं है. अगर किसी चिप से चुना गया विकल्प मिटाया जा रहा है, तो selectedOptionIdReplacements में मान्य विकल्प डालें.
400 INVALID_ARGUMENT इस्तेमाल की जा रही किसी डेफ़िनिशन को मिटाने की कोशिश की गई. डिफ़िनिशन को मिटाने से पहले, ड्रॉपडाउन चिप के उन सभी इंस्टेंस को मिटाएं या फिर से टारगेट करें जो डिफ़िनिशन को रेफ़रंस करते हैं.
400 INVALID_ARGUMENT उपयोगकर्ता से मिले डुप्लीकेट आईडी. पक्का करें कि दस्तावेज़ टैब में, उपयोगकर्ता से मिले आईडी यूनीक हों.