একটি অ্যাড-অন একটি ম্যানিফেস্ট ফাইল ব্যবহার করে অ্যাপ এবং এর ক্রিয়াকলাপ সম্পর্কে নির্দিষ্ট বিবরণ কনফিগার করতে।
এই ডকুমেন্টেশনে Google Workspace অ্যাড-অনের জন্য ম্যানিফেস্ট কনফিগার করার বিশদ বিবরণ রয়েছে।
Google Workspace অ্যাড-অনগুলির জন্য ম্যানিফেস্ট কাঠামো
Google Workspace অ্যাড-অন ম্যানিফেস্ট ফাইল ব্যবহার করে অ্যাড-অনের চেহারা এবং আচরণের বিভিন্ন দিক নির্ধারণ করে।
 ম্যানিফেস্ট অবজেক্ট স্ট্রাকচারের addOns বিভাগের অধীনে Google Workspace অ্যাড-অনগুলির ম্যানিফেস্ট প্রপার্টিগুলি সংগঠিত হয়।
- অ্যাপস স্ক্রিপ্ট ম্যানিফেস্ট ফাইল সম্পর্কে তথ্যের জন্য, ম্যানিফেস্ট কাঠামো পড়ুন। 
- HTTP এন্ডপয়েন্টের সাথে তৈরি অ্যাড-অনগুলির জন্য ম্যানিফেস্ট ফাইল সম্পর্কে তথ্যের জন্য, - projects.deploymentsরিসোর্স পড়ুন।
Google চ্যাটের জন্য ম্যানিফেস্ট
আপনার Google Workspace অ্যাড-অন যদি Google Chat-কে বাড়িয়ে দেয়, তাহলে আপনাকে Google Cloud কনসোলে Google Chat API চালু ও কনফিগার করে একটি Google Chat অ্যাপ কনফিগার করতে হবে।
 সাধারণ ম্যানিফেস্ট কনফিগারেশন সেটিংস ( addons.common সহ) চ্যাটে উপেক্ষা করা হয়। অ্যাড-অন ম্যানিফেস্ট ব্যবহার করার পরিবর্তে, আপনি নিম্নলিখিত চ্যাট সেটিংস কনফিগার করতে Chat API ব্যবহার করেন:
- চ্যাট অ্যাপের নাম, লোগো এবং বিবরণ, যা শুধুমাত্র চ্যাট UI-তে দেখা যায়।
- চ্যাট অ্যাপ ট্রিগার করে ।
আপনি যদি অ্যাপস স্ক্রিপ্টে অ্যাড-অন তৈরি করে থাকেন, তাহলে আপনাকে অবশ্যই আপনার ম্যানিফেস্টে নিম্নলিখিত অবজেক্টগুলি যোগ বা আপডেট করতে হবে:
-  addons.chat(প্রয়োজনীয়)
-  oauthScopes(আপনার Google Chat অ্যাপ যদি OAuth স্কোপ ব্যবহার করে তাহলে প্রয়োজন)
অ্যাড-অনের জন্য চ্যাট সেটিংস কনফিগার করার ধাপগুলির জন্য, একটি Google চ্যাট অ্যাপ কনফিগার করুন দেখুন।
Google Workspace অ্যাড-অন ম্যানিফেস্ট কনফিগারেশনের নমুনা
নিম্নলিখিত ম্যানিফেস্ট নমুনাগুলি একটি ম্যানিফেস্ট ফাইলের বিভাগ দেখায় যা নিম্নলিখিত দিকগুলি সহ Google Workspace অ্যাড-অনকে সংজ্ঞায়িত করে:
- ম্যানিফেস্টের - addOns.commonবিভাগটি অ্যাড-অনের জন্য নাম, লোগো URL, রং এবং অন্যান্য সাধারণ, হোস্ট-স্বাধীন সেটিংস সংজ্ঞায়িত করে।
- ম্যানিফেস্ট একটি সাধারণ হোমপেজ সংজ্ঞায়িত করে, তবে Google ক্যালেন্ডার, Google ড্রাইভ, Google ডক্স, পত্রক এবং স্লাইড-নির্দিষ্ট হোমপেজগুলিকেও সংজ্ঞায়িত করে৷ Gmail ডিফল্ট হোমপেজ ব্যবহার করে। 
- নমুনা ম্যানিফেস্ট সেটিংস নিম্নলিখিত সক্ষম করে: - ক্যালেন্ডার - eventOpenএবং- eventUpdatedট্রিগার।
- (শুধুমাত্র অ্যাপস স্ক্রিপ্ট) দুটি ক্যালেন্ডার সম্মেলন সমাধান । 
- দুটি সার্বজনীন কর্ম। 
- onItemsSelectedTriggerএকটি ড্রাইভ।
- একটি Gmail রচনা কর্ম এবং প্রাসঙ্গিক ট্রিগার। 
- একটি ডক্স - linkPreviewTriggersঅবজেক্ট। এই ট্রিগার সম্পর্কে জানতে, স্মার্ট চিপগুলির সাথে প্রিভিউ লিঙ্কগুলি দেখুন।
- একটি ডক্স - createActionTriggersঅবজেক্ট। এই ট্রিগার সম্পর্কে জানতে, @ মেনু থেকে তৃতীয় পক্ষের সংস্থান তৈরি করুন দেখুন।
- ডক্স, শীট এবং স্লাইডের জন্য ফাইল-নির্দিষ্ট ইন্টারফেস। 
- একটি Meet - sidePanelUriএবং- addOnOriginsবিকল্প।
- (শুধুমাত্র HTTP) একটি অনুমোদনের শিরোনাম পাঠানো এবং দানাদার সম্মতি সমর্থন করার জন্য দুটি - HttpOptions।
 
- oauthScopesক্ষেত্রটি প্রকল্পের জন্য অনুমোদনের সুযোগ নির্ধারণ করে (সাধারণত অ্যাড-অনগুলির জন্য প্রয়োজনীয়)।
- (শুধুমাত্র অ্যাপস স্ক্রিপ্ট) - urlFetchWhitelistক্ষেত্র হল এমন একটি ক্ষেত্র যা নিশ্চিত করে যে কোনও আনা শেষ পয়েন্ট HTTPS URL উপসর্গগুলির একটি নির্দিষ্ট তালিকার সাথে মেলে। আরও তথ্যের জন্য, অনুমোদনের তালিকা দেখুন।
ম্যানিফেস্ট নমুনার লিঙ্কগুলি অ্যাপ স্ক্রিপ্ট এবং HTTP Google Workspace অ্যাড-অনগুলির জন্য সংশ্লিষ্ট ম্যানিফেস্ট রেফারেন্স ডকুমেন্টেশনে সেই ফিল্ডের বিবরণে রিডাইরেক্ট করে।
অ্যাপস স্ক্রিপ্ট
{
  "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"
      }
    },
    "meet": {
      "homepageTrigger",
      "Web": [
        {
          "sidePanelUrl": "https://myownpersonaldomain.com/sidePanelUrl",
          "supportsScreenSharing": true,
          "addOnOrigins": [
            "https://www.myownpersonaldomain.com",
            "https://www.myownpersonaldomain.com:443"
          ],
          "logoUrl": "https://myownpersonaldomain.com/logoUrl",
          "darkModeLogoUrl": "https://myownpersonaldomain.com/darkModeLogoUrl"
        }
    },
  },
  "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" } }, "meet": { "homepageTrigger", "Web": [ { "sidePanelUrl": "https://myownpersonaldomain.com/sidePanelUrl", "supportsScreenSharing": true, "addOnOrigins": [ "https://www.myownpersonaldomain.com", "https://www.myownpersonaldomain.com:443" ], "logoUrl": "https://myownpersonaldomain.com/meetWebLogoUrl", "darkModeLogoUrl": "https://myownpersonaldomain.com/darkModeLogoUrl" } ] }, "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" ] }
অনুমোদিত ইউআরএল
আপনার স্ক্রিপ্ট বা অ্যাড-অন দ্বারা অ্যাক্সেসের জন্য পূর্ব-অনুমোদিত নির্দিষ্ট ইউআরএলগুলিকে মনোনীত করতে আপনি অনুমতি তালিকা ব্যবহার করেন। অনুমোদিত তালিকাগুলি ব্যবহারকারীর ডেটা সুরক্ষিত করতে সহায়তা করে; আপনি যখন একটি অনুমোদিত তালিকা সংজ্ঞায়িত করেন, তখন স্ক্রিপ্ট প্রকল্পগুলি এমন URLগুলি অ্যাক্সেস করতে পারে না যেগুলি অনুমোদন তালিকায় যোগ করা হয়নি৷
আপনি যখন একটি পরীক্ষা স্থাপনা ইনস্টল করেন তখন এই ক্ষেত্রটি al চ্ছিক, তবে আপনি যখন সংস্করণযুক্ত স্থাপনা তৈরি করেন তখন প্রয়োজনীয়।
আপনার স্ক্রিপ্ট বা অ্যাড-অন নিম্নলিখিত ক্রিয়াগুলি সম্পাদন করার সময় আপনি অনুমতিপত্রগুলি ব্যবহার করেন:
-  Apps Script UrlFetchপরিষেবা ব্যবহার করে একটি বাহ্যিক অবস্থান (যেমন HTTPS এন্ডপয়েন্ট) থেকে তথ্য পুনরুদ্ধার বা আনয়ন করে। আনার জন্য ইউআরএলগুলিকে অনুমতি দিতে, আপনার ম্যানিফেস্ট ফাইলেurlFetchWhitelistক্ষেত্রটি অন্তর্ভুক্ত করুন।
-  ব্যবহারকারীর ক্রিয়াকলাপের প্রতিক্রিয়া হিসাবে একটি URL খোলে বা প্রদর্শন করে (Google Workspace অ্যাড-অনগুলির জন্য প্রয়োজনীয় যা Google-এর বাইরের ইউআরএলগুলি খোলে বা প্রদর্শন করে)। ইউআরএল খোলার অনুমতি দিতে, আপনার ম্যানিফেস্ট ফাইলে addOns.common.openLinkUrlPrefixesফিল্ড অন্তর্ভুক্ত করুন।
আপনার অনুমোদিত তালিকায় উপসর্গ যোগ করা হচ্ছে
 যখন আপনি আপনার ম্যানিফেস্ট ফাইলে ( addOns.common.openLinkUrlPrefixes বা urlFetchWhitelist ফিল্ড অন্তর্ভুক্ত করে) অনুমতি তালিকা নির্দিষ্ট করেন, তখন আপনাকে অবশ্যই URL প্রিফিক্সের একটি তালিকা অন্তর্ভুক্ত করতে হবে। আপনি ম্যানিফেস্টে যে উপসর্গগুলি যোগ করবেন সেগুলি অবশ্যই নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করবে:
- প্রতিটি উপসর্গ একটি বৈধ URL হতে হবে।
-  প্রতিটি উপসর্গ অবশ্যই https://ব্যবহার করবে,http://নয়।
- প্রতিটি উপসর্গের একটি সম্পূর্ণ ডোমেন থাকতে হবে।
-  প্রতিটি উপসর্গের একটি অ-খালি পথ থাকতে হবে। উদাহরণস্বরূপ, https://www.google.com/বৈধ তবেhttps://www.google.comনয়।
- ইউআরএল সাবডোমেন প্রিফিক্সের সাথে মেলে আপনি ওয়াইল্ডকার্ড ব্যবহার করতে পারেন।
-  একটি একক *ওয়াইল্ডকার্ড ব্যবহার করা যেতে পারেaddOns.common.openLinkUrlPrefixesফিল্ডে সমস্ত লিঙ্কের সাথে মেলে, কিন্তু এটি সুপারিশ করা হয় না কারণ এটি একটি ব্যবহারকারীর ডেটাকে ঝুঁকিতে ফেলতে পারে এবং অ্যাড-অন পর্যালোচনা প্রক্রিয়াকে দীর্ঘায়িত করতে পারে। আপনার অ্যাড-অন কার্যকারিতা প্রয়োজন হলে শুধুমাত্র একটি ওয়াইল্ডকার্ড ব্যবহার করুন।
কোনও ইউআরএল অনুমতি দেয়ালিস্টে কোনও উপসর্গের সাথে মেলে কিনা তা নির্ধারণ করার সময়, নিম্নলিখিত বিধিগুলি প্রযোজ্য:
- পাথ ম্যাচিং কেস-সংবেদনশীল।
- উপসর্গটি যদি ইউআরএল এর মতো হয় তবে এটি একটি ম্যাচ।
- ইউআরএল একই বা উপসর্গের একটি শিশু হলে, এটি একটি মিল।
 উদাহরণস্বরূপ, https://example.com/foo উপসর্গ নিম্নলিখিত URLগুলির সাথে মেলে:
-  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 উভয় ক্ষেত্রের জন্য একটি সাবডোমেনের সাথে মেলে একটি একক ওয়াইল্ডকার্ড অক্ষর ( * ) ব্যবহার করতে পারেন৷ আপনি একাধিক সাবডোমেনের সাথে মেলে একাধিক ওয়াইল্ডকার্ড ব্যবহার করতে পারবেন না এবং ওয়াইল্ডকার্ডটি অবশ্যই URL-এর অগ্রণী উপসর্গের প্রতিনিধিত্ব করবে৷
 উদাহরণস্বরূপ, উপসর্গ https://*.example.com/foo নিম্নলিখিত URLগুলির সাথে মেলে:
-  https://subdomain.example.com/foo
-  https://any.number.of.subdomains.example.com/foo
 https://*.example.com/foo উপসর্গটি নিম্নলিখিত URLগুলির সাথে মেলে না :
-  https://subdomain.example.com/bar(প্রত্যয় অমিল)
-  https://example.com/foo(অন্তত একটি সাবডোমেন উপস্থিত থাকতে হবে)
আপনি যখন আপনার ম্যানিফেস্ট সংরক্ষণ করার চেষ্টা করেন তখন কিছু প্রিফিক্স নিয়ম প্রয়োগ করা হয়। উদাহরণস্বরূপ, আপনি সংরক্ষণ করার চেষ্টা করার সময় নিম্নলিখিত উপসর্গগুলি আপনার ম্যানিফেস্টে উপস্থিত থাকলে একটি ত্রুটি সৃষ্টি করে:
-  https://*.*.example.com/foo(একাধিক ওয়াইল্ডকার্ড নিষিদ্ধ)
-  https://subdomain.*.example.com/foo(ওয়াইল্ডকার্ড একটি অগ্রণী উপসর্গ হিসাবে ব্যবহার করা আবশ্যক)