একটি অ্যাড-অন অ্যাপ এবং এর কার্যকারিতা সম্পর্কিত নির্দিষ্ট বিবরণ কনফিগার করার জন্য একটি ম্যানিফেস্ট ফাইল ব্যবহার করে।
এই ডকুমেন্টেশনে একটি গুগল ওয়ার্কস্পেস অ্যাড-অনের জন্য ম্যানিফেস্ট কনফিগার করার বিস্তারিত বিবরণ রয়েছে।
গুগল ওয়ার্কস্পেস অ্যাড-অনগুলির জন্য ম্যানিফেস্ট কাঠামো
গুগল ওয়ার্কস্পেস অ্যাড-অনগুলো তাদের চেহারা ও আচরণের বিভিন্ন দিক নির্ধারণ করতে ম্যানিফেস্ট ফাইল ব্যবহার করে।
গুগল ওয়ার্কস্পেস অ্যাড-অনগুলির ম্যানিফেস্ট প্রোপার্টিগুলি addOns সেকশনের অধীনে সাজানো থাকে।
গুগল অ্যাপস স্ক্রিপ্ট ম্যানিফেস্ট ফাইল সম্পর্কে তথ্যের জন্য, ম্যানিফেস্ট কাঠামো দেখুন।
HTTP এন্ডপয়েন্ট ব্যবহার করে তৈরি অ্যাড-অনগুলির ম্যানিফেস্ট ফাইল সম্পর্কে তথ্যের জন্য
projects.deploymentsদেখুন।
গুগল চ্যাটের জন্য ম্যানিফেস্ট
আপনার Google Workspace অ্যাড-অন যদি Google Chat-কে প্রসারিত করে, তাহলে Google Cloud কনসোলে Google Chat API সক্রিয় ও কনফিগার করার মাধ্যমে একটি Google Chat অ্যাপ তৈরি করুন ।
চ্যাটে সাধারণ ম্যানিফেস্ট কনফিগারেশন সেটিংস ( addons.common সহ) উপেক্ষা করা হয়। নিম্নলিখিত চ্যাট সেটিংস কনফিগার করতে চ্যাট এপিআই ব্যবহার করুন:
- চ্যাট ইউআই-এর জন্য চ্যাট অ্যাপটির নাম, লোগো এবং বিবরণ।
- চ্যাট অ্যাপ ট্রিগার করে ।
যদি আপনি অ্যাপস স্ক্রিপ্টে অ্যাড-অনটি তৈরি করে থাকেন, তাহলে আপনার ম্যানিফেস্টে নিম্নলিখিত অবজেক্টগুলো যোগ বা আপডেট করুন:
-
addons.chat(আবশ্যক) -
oauthScopes(আপনার Google Chat অ্যাপ OAuth ব্যবহার করলে এটি আবশ্যক)
কোনো অ্যাড-অনের জন্য চ্যাট সেটিংস কনফিগার করতে, ‘একটি গুগল চ্যাট অ্যাপ কনফিগার করুন’ দেখুন।
গুগল ওয়ার্কস্পেস অ্যাড-অন ম্যানিফেস্ট কনফিগারেশনের নমুনা
নিম্নলিখিত নমুনাগুলিতে একটি ম্যানিফেস্টের সেই অংশটি দেখানো হয়েছে যা একটি গুগল ওয়ার্কস্পেস অ্যাড-অনকে সংজ্ঞায়িত করে, যার মধ্যে এই দিকগুলি অন্তর্ভুক্ত রয়েছে:
addOns.commonঅ্যাড-অনের নাম, লোগো, রং এবং অন্যান্য সাধারণ সেটিংস নির্ধারণ করে।ম্যানিফেস্টটি একটি সাধারণ হোমপেজ নির্ধারণ করার পাশাপাশি গুগল ক্যালেন্ডার, গুগল ড্রাইভ, গুগল ডক্স, গুগল শিটস এবং গুগল স্লাইডস-এর জন্য নির্দিষ্ট হোমপেজও নির্ধারণ করে। জিমেইল ডিফল্ট হোমপেজটি ব্যবহার করে।
নমুনা ম্যানিফেস্ট সেটিংস নিম্নলিখিত বিষয়গুলো সক্ষম করে:
ক্যালেন্ডারের
eventOpenএবংeventUpdatedট্রিগার।(শুধুমাত্র অ্যাপস স্ক্রিপ্টের জন্য) দুটি ক্যালেন্ডার কনফারেন্স সমাধান ।
দুটি সার্বজনীন ক্রিয়া।
একটি Drive
onItemsSelectedTrigger।জিমেইল কম্পোজ করার একটি অ্যাকশন এবং প্রাসঙ্গিক ট্রিগার।
একটি Docs
linkPreviewTriggersঅবজেক্ট। স্মার্ট চিপ দিয়ে লিঙ্ক প্রিভিউ দেখুন।একটি Docs
createActionTriggersঅবজেক্ট। @ মেনু থেকে তৃতীয় পক্ষের রিসোর্স তৈরি করা দেখুন।ডকস, শীটস এবং স্লাইডস-এর জন্য ফাইল-ভিত্তিক ইন্টারফেস।
গুগল মিটের একটি
sidePanelUriএবংaddOnOriginsঅপশন।(শুধুমাত্র HTTP-এর জন্য) অনুমোদন হেডার পাঠানো এবং সুনির্দিষ্ট সম্মতি সমর্থনের জন্য দুটি
HttpOptions।
oauthScopesফিল্ডটি প্রোজেক্টের অনুমোদনের পরিধি নির্ধারণ করে।(শুধুমাত্র অ্যাপস স্ক্রিপ্টের জন্য)
urlFetchWhitelistনিশ্চিত করে যে ফেচ করা এন্ডপয়েন্টগুলো নির্দিষ্ট HTTPS URL প্রিফিক্সের সাথে মেলে। Allowlist URLs দেখুন।
স্যাম্পলগুলিতে থাকা লিঙ্কগুলি অ্যাপস স্ক্রিপ্ট এবং এইচটিটিপি গুগল ওয়ার্কস্পেস অ্যাড-অনগুলির ম্যানিফেস্ট রেফারেন্সে থাকা ফিল্ডের বিবরণে রিডাইরেক্ট করে।
ম্যানিফেস্টে অন্যান্য উপাদান অন্তর্ভুক্ত থাকে। addOns এর অধীনস্থ ফিল্ডগুলো সরাসরি গুগল ওয়ার্কস্পেস অ্যাড-অনগুলোর সাথে সম্পর্কিত। এই উদাহরণটি একটি সম্পূর্ণ ম্যানিফেস্ট ফাইলের শুধুমাত্র একটি অংশ দেখাচ্ছে এবং এটি নিজে থেকে কার্যকরী নয়।
অ্যাপস স্ক্রিপ্ট
{
"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
আপনার স্ক্রিপ্ট বা অ্যাড-অনের অ্যাক্সেসের জন্য পূর্ব-অনুমোদিত নির্দিষ্ট ইউআরএল (URL) নির্ধারণ করতে আপনি অ্যালাওলিস্ট ব্যবহার করেন। অ্যালাওলিস্ট ব্যবহারকারীর ডেটা সুরক্ষিত রাখতে সাহায্য করে; যখন আপনি একটি অ্যালাওলিস্ট নির্ধারণ করেন, তখন স্ক্রিপ্ট প্রজেক্টগুলো সেই ইউআরএলগুলো অ্যাক্সেস করতে পারে না যা অ্যালাওলিস্টে যুক্ত করা হয়নি।
টেস্ট ডেপ্লয়মেন্ট ইনস্টল করার সময় এই ফিল্ডটি ঐচ্ছিক, কিন্তু ভার্সনযুক্ত ডেপ্লয়মেন্ট তৈরি করার সময় এটি আবশ্যক।
আপনার স্ক্রিপ্ট বা অ্যাড-অন যখন নিম্নলিখিত কাজগুলো সম্পাদন করে, তখন আপনি অ্যালাওলিস্ট ব্যবহার করেন:
- অ্যাপস স্ক্রিপ্ট
UrlFetchপরিষেবা ব্যবহার করে কোনো বাহ্যিক অবস্থান (যেমন HTTPS এন্ডপয়েন্ট) থেকে তথ্য পুনরুদ্ধার বা ফেচ করে। ফেচ করার জন্য URL-গুলিকে অনুমতি-তালিকাভুক্ত করতে, আপনার ম্যানিফেস্ট ফাইলেurlFetchWhitelistফিল্ডটি অন্তর্ভুক্ত করুন। - ব্যবহারকারীর কোনো কার্যকলাপের প্রতিক্রিয়ায় একটি URL খোলে বা প্রদর্শন করে (যেসব Google Workspace অ্যাড-অন Google-এর বাইরের URL খোলে বা প্রদর্শন করে, তাদের জন্য এটি আবশ্যক)। খোলার জন্য URL-গুলোকে অনুমতি-তালিকাভুক্ত করতে, আপনার ম্যানিফেস্ট ফাইলে
addOns.common.openLinkUrlPrefixesফিল্ডটি অন্তর্ভুক্ত করুন।
আপনার অনুমোদিত তালিকায় প্রিফিক্স যোগ করা
যখন আপনি আপনার ম্যানিফেস্ট ফাইলে অ্যালাওলিস্ট নির্দিষ্ট করেন ( addOns.common.openLinkUrlPrefixes অথবা urlFetchWhitelist ফিল্ড অন্তর্ভুক্ত করার মাধ্যমে), তখন আপনাকে অবশ্যই ইউআরএল প্রিফিক্সগুলোর একটি তালিকা অন্তর্ভুক্ত করতে হবে। ম্যানিফেস্টে আপনি যে প্রিফিক্সগুলো যোগ করবেন, সেগুলোকে অবশ্যই নিম্নলিখিত শর্তগুলো পূরণ করতে হবে:
- প্রতিটি প্রিফিক্স অবশ্যই একটি বৈধ URL হতে হবে।
- প্রতিটি প্রিফিক্সে অবশ্যই
https://ব্যবহার করতে হবে,http://নয়। - প্রতিটি প্রিফিক্সের একটি পূর্ণ ডোমেইন থাকতে হবে।
- প্রতিটি প্রিফিক্সের একটি অ-খালি পাথ থাকতে হবে। উদাহরণস্বরূপ,
https://www.google.com/বৈধ কিন্তুhttps://www.google.comবৈধ নয়। - আপনি ইউআরএল সাবডোমেইন প্রিফিক্স মেলানোর জন্য ওয়াইল্ডকার্ড ব্যবহার করতে পারেন।
-
addOns.common.openLinkUrlPrefixesফিল্ডে সমস্ত লিঙ্ক মেলানোর জন্য একটিমাত্র*ওয়াইল্ডকার্ড ব্যবহার করা যেতে পারে, কিন্তু এটি সুপারিশ করা হয় না কারণ এটি ব্যবহারকারীর ডেটাকে ঝুঁকির মুখে ফেলতে পারে এবং অ্যাড-অন পর্যালোচনার প্রক্রিয়াকে দীর্ঘায়িত করতে পারে। শুধুমাত্র তখনই ওয়াইল্ডকার্ড ব্যবহার করুন যখন আপনার অ্যাড-অনের কার্যকারিতার জন্য এটি প্রয়োজন হয়।
কোনো URL অনুমোদিত তালিকার (allowlist) কোনো প্রিফিক্সের সাথে মেলে কিনা তা নির্ধারণ করার ক্ষেত্রে নিম্নলিখিত নিয়মগুলি প্রযোজ্য:
- পাথ মেলানোর ক্ষেত্রে কেস-সেনসিটিভ হয়।
- যদি প্রিফিক্সটি URL-এর অনুরূপ হয়, তাহলে এটি মিলে গেছে।
- যদি ইউআরএলটি প্রিফিক্সের সমান বা তার অধীনস্থ হয়, তাহলে এটি মিলে গেছে বলে গণ্য হবে।
উদাহরণস্বরূপ, 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(অগ্রবর্তী উপসর্গ হিসেবে ওয়াইল্ডকার্ড অবশ্যই ব্যবহার করতে হবে)