Google Workspace ऐड-ऑन के मेनिफ़ेस्ट

ऐड-ऑन, ऐप्लिकेशन और उसके ऑपरेशन के बारे में कुछ जानकारी कॉन्फ़िगर करने के लिए, मेनिफ़ेस्ट फ़ाइल का इस्तेमाल करता है.

इस दस्तावेज़ में, Google Workspace ऐड-ऑन के लिए मेनिफ़ेस्ट कॉन्फ़िगर करने के बारे में जानकारी दी गई है.

Google Workspace ऐड-ऑन के लिए मेनिफ़ेस्ट का स्ट्रक्चर

Google Workspace ऐड-ऑन, मेनिफ़ेस्ट फ़ाइल का इस्तेमाल करके ऐड-ऑन के दिखने के तरीके और उसके व्यवहार के कई पहलुओं को तय करते हैं.

Google Workspace ऐड-ऑन के लिए मेनिफ़ेस्ट प्रॉपर्टी, मेनिफ़ेस्ट ऑब्जेक्ट स्ट्रक्चर के addOns सेक्शन में व्यवस्थित की जाती हैं.

  • Apps Script की मेनिफ़ेस्ट फ़ाइलों के बारे में जानकारी पाने के लिए, मेनिफ़ेस्ट का स्ट्रक्चर देखें.

  • एचटीटीपी एंडपॉइंट का इस्तेमाल करके बनाए गए ऐड-ऑन के लिए, मेनिफ़ेस्ट फ़ाइलों के बारे में जानकारी पाने के लिए, projects.deployments संसाधन देखें.

Google Chat के लिए मेनिफ़ेस्ट

अगर आपका Google Workspace ऐड-ऑन, Google Chat की सुविधाओं को बढ़ाता है, तो आपको Google Chat ऐप्लिकेशन कॉन्फ़िगर करना होगा. इसके लिए, Google Cloud Console में Google Chat API को चालू करें और उसे कॉन्फ़िगर करें.

Chat में, सामान्य मेनिफ़ेस्ट कॉन्फ़िगरेशन सेटिंग (इसमें addons.common भी शामिल है) को अनदेखा किया जाता है. ऐड-ऑन के मेनिफ़ेस्ट का इस्तेमाल करने के बजाय, Chat API का इस्तेमाल करके Chat की इन सेटिंग को कॉन्फ़िगर करें:

अगर आपने ऐड-ऑन को Apps Script में बनाया है, तो आपको अपने मेनिफ़ेस्ट में ये ऑब्जेक्ट भी जोड़ने या अपडेट करने होंगे:

  • addons.chat (ज़रूरी है)
  • oauthScopes (अगर आपका Google Chat ऐप्लिकेशन OAuth के दायरे का इस्तेमाल करता है, तो यह ज़रूरी है)

किसी ऐड-ऑन के लिए Chat की सेटिंग कॉन्फ़िगर करने का तरीका जानने के लिए, Google Chat ऐप्लिकेशन को कॉन्फ़िगर करना लेख पढ़ें.

Google Workspace ऐड-ऑन के मेनिफ़ेस्ट कॉन्फ़िगरेशन का सैंपल

यहां दिए गए मेनिफ़ेस्ट के उदाहरणों में, मेनिफ़ेस्ट फ़ाइल का वह सेक्शन दिखाया गया है जिसमें Google Workspace ऐड-ऑन के बारे में बताया गया है. इसमें ये पहलू शामिल हैं:

  • मेनिफ़ेस्ट के addOns.common सेक्शन में, ऐड-ऑन का नाम, लोगो का यूआरएल, रंग, और अन्य सामान्य सेटिंग तय की जाती हैं. ये सेटिंग, होस्ट से जुड़ी नहीं होती हैं.

  • मेनिफ़ेस्ट में एक सामान्य होम पेज के साथ-साथ Calendar, Drive, Docs, Sheets, और Slides के होम पेज भी तय किए जाते हैं. Gmail, डिफ़ॉल्ट होम पेज का इस्तेमाल करता है.

  • सैंपल मेनिफ़ेस्ट सेटिंग से ये काम किए जा सकते हैं:

    • Calendar eventOpen और eventUpdated ट्रिगर.

    • (सिर्फ़ Apps Script के लिए) Calendar के दो कॉन्फ़्रेंस समाधान.

    • दो यूनिवर्सल ऐक्शन.

    • Drive onItemsSelectedTrigger.

    • Gmail में ईमेल लिखने की सुविधा और कॉन्टेक्स्ट के हिसाब से ट्रिगर होने वाली सुविधा.

    • Docs का linkPreviewTriggersऑब्जेक्ट. इस ट्रिगर के बारे में जानने के लिए, स्मार्ट चिप की मदद से लिंक की झलक देखना लेख पढ़ें.

    • Docs का createActionTriggers ऑब्जेक्ट. इस ट्रिगर के बारे में जानने के लिए, @ मेन्यू से तीसरे पक्ष के संसाधन बनाना लेख पढ़ें.

    • Docs, Sheets, और Slides के लिए, फ़ाइल के हिसाब से इंटरफ़ेस.

    • (सिर्फ़ एचटीटीपी) अनुमति देने वाले हेडर को भेजने और सहमति के लिए ज़्यादा विकल्प देने के लिए, दो HttpOptions कुकी.

  • oauthScopes फ़ील्ड, प्रोजेक्ट के लिए अनुमति के स्कोप सेट करता है. आम तौर पर, यह ऐड-ऑन के लिए ज़रूरी होता है.

  • (सिर्फ़ Apps Script के लिए) urlFetchWhitelist फ़ील्ड एक ऐसा फ़ील्ड है जो यह पक्का करता है कि फ़ेच किए गए सभी एंडपॉइंट, एचटीटीपीएस यूआरएल प्रीफ़िक्स की तय की गई सूची से मेल खाते हों. ज़्यादा जानकारी के लिए, यूआरएल को अनुमति वाली सूची में जोड़ना लेख पढ़ें.

मेनिफ़ेस्ट के सैंपल में मौजूद लिंक, Apps Script और HTTP Google Workspace ऐड-ऑन के लिए, मेनिफ़ेस्ट के रेफ़रंस दस्तावेज़ में मौजूद उस फ़ील्ड की जानकारी पर रीडायरेक्ट करते हैं.

Apps Script

{
  "addOns": {
    "calendar": {
      "createSettingsUrlFunction": "getConferenceSettingsPageUrl",
      "conferenceSolution": [{
        "id": "my-video-conf",
        "logoUrl": "https://lh3.googleusercontent.com/...",
        "name": "My Video Conference",
        "onCreateFunction": "onCreateMyVideoConference"
      }, {
        "id": "my-streamed-conf",
        "logoUrl": "https://lh3.googleusercontent.com/...",
        "name": "My Streamed Conference",
        "onCreateFunction": "onCreateMyStreamedConference"
      }],
      "currentEventAccess": "READ_WRITE",
      "eventOpenTrigger": {
        "runFunction": "onCalendarEventOpen"
      },
      "eventUpdateTrigger": {
        "runFunction": "onCalendarEventUpdate"
      },
      "eventAttachmentTrigger": {
        "label": "My Event Attachment",
        "runFunction": "onCalendarEventAddAttachment"
      },
      "homepageTrigger": {
        "runFunction": "onCalendarHomePageOpen",
        "enabled": true
      }
    },
    "common": {
      "homepageTrigger": {
        "runFunction": "onDefaultHomePageOpen",
        "enabled": true
      },
      "layoutProperties": {
        "primaryColor": "#ff392b",
        "secondaryColor": "#d68617"
      },
      "logoUrl": "https://ssl.gstatic.com/docs/script/images/logo/script-64.png",
      "name": "Demo Google Workspace add-on",
      "openLinkUrlPrefixes": [
        "https://mail.google.com/",
        "https://script.google.com/a/google.com/d/",
        "https://drive.google.com/a/google.com/file/d/",
        "https://www.example.com/"
      ],
      "universalActions": [{
        "label": "Open settings",
        "runFunction": "getSettingsCard"
      }, {
        "label": "Open Help URL",
        "openLink": "https://www.example.com/help"
      }],
      "useLocaleFromApp": true
    },
    "drive": {
      "homepageTrigger": {
        "runFunction": "onDriveHomePageOpen",
        "enabled": true
      },
      "onItemsSelectedTrigger": {
        "runFunction": "onDriveItemsSelected"
      }
    },
    "gmail": {
      "composeTrigger": {
        "selectActions": [
          {
            "text": "Add images to email",
            "runFunction": "getInsertImageComposeCards"
          }
        ],
        "draftAccess": "METADATA"
      },
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "onGmailMessageOpen"
        }
      ]
    },
    "docs": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      },
      "linkPreviewTriggers": [
        {
        "runFunction": "onLinkPreview",
        "patterns": [
            {
              "hostPattern": "example.com",
              "pathPrefix": "example-path"
            }
        ],
        "labelText": "Link preview",
        "localizedLabelText": {
          "es": "Link preview localized in Spanish"
        },
        "logoUrl": "https://www.example.com/images/smart-chip-icon.png"
        }
      ],
      "createActionTriggers": [
        {
          "id": "exampleId",
          "labelText": "Example label text",
          "localizedLabelText": {
            "es": "Label text localized in Spanish"
          },
          "runFunction": "exampleFunction",
          "logoUrl": "https://www.example.com/images/case.png"
        }
      ]
    },
    "sheets": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      }
    },
    "slides": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      }
    }
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/calendar.addons.execute",
    "https://www.googleapis.com/auth/calendar.addons.current.event.read",
    "https://www.googleapis.com/auth/calendar.addons.current.event.write",
    "https://www.googleapis.com/auth/drive.addons.metadata.readonly",
    "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
    "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/script.locale",
    "https://www.googleapis.com/auth/script.scriptapp",
    "https://www.googleapis.com/auth/drive.file",
    "https://www.googleapis.com/auth/documents.currentonly",
    "https://www.googleapis.com/auth/spreadsheets.currentonly",
    "https://www.googleapis.com/auth/presentations.currentonly",
    "https://www.googleapis.com/auth/workspace.linkpreview"
  ],
  "urlFetchWhitelist": [
    "https://www.example.com/myendpoint/"
  ]
}

HTTP

{
  "addOns": {
    "calendar": {
      "currentEventAccess": "READ_WRITE",
      "eventOpenTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCalendarEventOpen"
      },
      "eventUpdateTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCalendarEventUpdate"
      },
      "eventAttachmentTrigger": {
        "label": "My Event Attachment",
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCalendarEventAddAttachment"
      },
      "homepageTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCalendarHomePageOpen",
        "enabled": true
      }
    },
    "common": {
      "homepageTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onDefaultHomePageOpen",
        "enabled": true
      },
      "layoutProperties": {
        "primaryColor": "#ff392b",
        "secondaryColor": "#d68617"
      },
      "logoUrl": "https://ssl.gstatic.com/docs/script/images/logo/script-64.png",
      "name": "Demo Google Workspace add-on",
      "openLinkUrlPrefixes": [
        "https://mail.google.com/",
        "https://script.google.com/a/google.com/d/",
        "https://drive.google.com/a/google.com/file/d/",
        "https://www.example.com/"
      ],
      "universalActions": [{
        "label": "Open settings",
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=getSettingsCard"
      }, {
        "label": "Open Help URL",
        "openLink": "https://www.example.com/help"
      }],
      "useLocaleFromApp": true
    },
    "drive": {
      "homepageTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onDriveHomePageOpen",
        "enabled": true
      },
      "onItemsSelectedTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onDriveItemsSelected"
      }
    },
    "gmail": {
      "composeTrigger": {
        "actions": [
          {
            "label": "Add images to email",
            "runFunction": "https://myownpersonaldomain.com/mypage?trigger=getInsertImageComposeCards"
          }
        ],
        "draftAccess": "METADATA"
      },
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "https://myownpersonaldomain.com/mypage?trigger=onGmailMessageOpen"
        }
      ]
    },
    "docs": {
      "homepageTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onFileScopeGrantedEditors"
      },
      "linkPreviewTriggers": [
        {
          "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onLinkPreview",
          "patterns": [
              {
                "hostPattern": "example.com",
                "pathPrefix": "example-path"
              }
          ],
          "labelText": "Link preview",
          "localizedLabelText": {
            "es": "Link preview localized in Spanish"
          },
          "logoUrl": "https://www.example.com/images/smart-chip-icon.png"
        }
      ],
      "createActionTriggers": [
        {
          "id": "exampleId",
          "labelText": "Example label text",
          "localizedLabelText": {
            "es": "Label text localized in Spanish"
          },
          "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCreateAction",
          "logoUrl": "https://www.example.com/images/case.png"
        }
      ]
    },
    "sheets": {
      "homepageTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onFileScopeGrantedEditors"
      }
    },
    "slides": {
      "homepageTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onFileScopeGrantedEditors"
      }
    }
    "httpOptions": {
      "authorizationHeader": "SYSTEM_ID_TOKEN",
      "granularOauthPermissionSupport": "OPT_IN"
    }
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/calendar.addons.execute",
    "https://www.googleapis.com/auth/calendar.addons.current.event.read",
    "https://www.googleapis.com/auth/calendar.addons.current.event.write",
    "https://www.googleapis.com/auth/drive.addons.metadata.readonly",
    "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
    "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/script.locale",
    "https://www.googleapis.com/auth/script.scriptapp",
    "https://www.googleapis.com/auth/drive.file",
    "https://www.googleapis.com/auth/documents.currentonly",
    "https://www.googleapis.com/auth/spreadsheets.currentonly",
    "https://www.googleapis.com/auth/presentations.currentonly",
    "https://www.googleapis.com/auth/workspace.linkpreview"
  ]
}

अनुमति वाले यूआरएल

अनुमति वाली सूचियों का इस्तेमाल, उन यूआरएल को तय करने के लिए किया जाता है जिन्हें आपकी स्क्रिप्ट या ऐड-ऑन ने पहले से ही ऐक्सेस करने की अनुमति दी है. अनुमति वाली सूचियों से, उपयोगकर्ता के डेटा को सुरक्षित रखने में मदद मिलती है. अनुमति वाली सूची तय करने पर, स्क्रिप्ट प्रोजेक्ट उन यूआरएल को ऐक्सेस नहीं कर सकते जिन्हें अनुमति वाली सूची में नहीं जोड़ा गया है.

टेस्ट डिप्लॉयमेंट इंस्टॉल करते समय, इस फ़ील्ड को भरना ज़रूरी नहीं है. हालांकि, वर्शन वाला डिप्लॉयमेंट बनाते समय, इसे भरना ज़रूरी है.

जब आपकी स्क्रिप्ट या ऐड-ऑन ये कार्रवाइयां करता है, तब आपको अनुमति वाली सूचियों का इस्तेमाल करना चाहिए:

  • यह Apps Script UrlFetch सेवा का इस्तेमाल करके, किसी बाहरी जगह (जैसे कि एचटीटीपीएस एंडपॉइंट) से जानकारी को वापस पाता है या उसे फ़ेच करता है. यूआरएल से डेटा फ़ेच करने के लिए, उन्हें अनुमति वाली सूची में शामिल करें. इसके लिए, अपनी मेनिफ़ेस्ट फ़ाइल में urlFetchWhitelist फ़ील्ड शामिल करें.
  • यह फ़ंक्शन, उपयोगकर्ता की कार्रवाई के जवाब में यूआरएल खोलता है या दिखाता है. यह Google Workspace के उन ऐड-ऑन के लिए ज़रूरी है जो Google से बाहर के यूआरएल खोलते या दिखाते हैं. यूआरएल खोलने की अनुमति वाली सूची में यूआरएल शामिल करने के लिए, अपनी मेनिफ़ेस्ट फ़ाइल में addOns.common.openLinkUrlPrefixes फ़ील्ड शामिल करें.

अनुमति वाली सूची में प्रीफ़िक्स जोड़ना

मेनिफ़ेस्ट फ़ाइल में अनुमति वाली सूचियां (addOns.common.openLinkUrlPrefixes या urlFetchWhitelist फ़ील्ड में से किसी एक को शामिल करके) तय करते समय, आपको यूआरएल प्रीफ़िक्स की सूची शामिल करनी होगी. मेनिफ़ेस्ट में जोड़े गए प्रीफ़िक्स को ये ज़रूरी शर्तें पूरी करनी होंगी:

  • हर प्रीफ़िक्स एक मान्य यूआरएल होना चाहिए.
  • हर प्रीफ़िक्स में https:// का इस्तेमाल होना चाहिए, न कि http:// का.
  • हर प्रीफ़िक्स में पूरा डोमेन होना चाहिए.
  • हर प्रीफ़िक्स का पाथ खाली नहीं होना चाहिए. उदाहरण के लिए, https://www.google.com/ मान्य है, लेकिन https://www.google.com मान्य नहीं है.
  • यूआरएल के सबडोमेन प्रीफ़िक्स से मैच करने के लिए, वाइल्डकार्ड का इस्तेमाल किया जा सकता है.
  • सभी लिंक से मैच करने के लिए, addOns.common.openLinkUrlPrefixes फ़ील्ड में एक * वाइल्डकार्ड का इस्तेमाल किया जा सकता है. हालांकि, ऐसा करने का सुझाव नहीं दिया जाता, क्योंकि इससे उपयोगकर्ता के डेटा को जोखिम हो सकता है. साथ ही, ऐड-ऑन की समीक्षा की प्रोसेस में ज़्यादा समय लग सकता है. वाइल्डकार्ड का इस्तेमाल सिर्फ़ तब करें, जब आपके ऐड-ऑन के फ़ंक्शन के लिए इसकी ज़रूरत हो.

यह तय करते समय कि कोई यूआरएल, अनुमति वाली सूची में मौजूद किसी प्रीफ़िक्स से मेल खाता है या नहीं, इन नियमों का पालन किया जाता है:

  • पाथ मैचिंग, केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) होती है.
  • अगर प्रीफ़िक्स, यूआरएल से पूरी तरह मेल खाता है, तो उसे मैच माना जाता है.
  • अगर यूआरएल, प्रीफ़िक्स के जैसा है या प्रीफ़िक्स का चाइल्ड है, तो उसे मैच माना जाता है.

उदाहरण के लिए, https://example.com/foo प्रीफ़िक्स, इन यूआरएल से मेल खाता है:

  • https://example.com/foo
  • https://example.com/foo/
  • https://example.com/foo/bar
  • https://example.com/foo?bar
  • https://example.com/foo#bar

वाइल्डकार्ड का इस्तेमाल करना

urlFetchWhitelist और addOns.common.openLinkUrlPrefixes, दोनों फ़ील्ड के लिए किसी सबडोमेन से मिलान करने के लिए, एक वाइल्डकार्ड वर्ण (*) का इस्तेमाल किया जा सकता है. एक से ज़्यादा सबडोमेन से मिलान करने के लिए, एक से ज़्यादा वाइल्डकार्ड का इस्तेमाल नहीं किया जा सकता. साथ ही, वाइल्डकार्ड को यूआरएल के शुरुआती प्रीफ़िक्स को दिखाना चाहिए.

उदाहरण के लिए, https://*.example.com/foo प्रीफ़िक्स इन यूआरएल से मेल खाता है:

  • https://subdomain.example.com/foo
  • https://any.number.of.subdomains.example.com/foo

https://*.example.com/foo प्रीफ़िक्स, इन यूआरएल से मेल नहीं खाता:

  • https://subdomain.example.com/bar (सफ़िक्स मैच नहीं हुआ)
  • https://example.com/foo (कम से कम एक सबडोमेन मौजूद होना चाहिए)

मेनिफ़ेस्ट सेव करते समय, प्रीफ़िक्स से जुड़े कुछ नियमों को लागू किया जाता है. उदाहरण के लिए, अगर सेव करते समय आपके मेनिफ़ेस्ट में ये प्रीफ़िक्स मौजूद हैं, तो गड़बड़ी होगी:

  • https://*.*.example.com/foo (एक से ज़्यादा वाइल्डकार्ड इस्तेमाल करने की अनुमति नहीं है)
  • https://subdomain.*.example.com/foo (वाइल्डकार्ड का इस्तेमाल, लीडिंग प्रीफ़िक्स के तौर पर किया जाना चाहिए)