১. ভূমিকা
এই কোডল্যাবে, আপনি একটি ইন্টারেক্টিভ সাপোর্ট কুইক পোর্টাল তৈরি করবেন যা সরাসরি গুগল ওয়ার্কস্পেস স্টুডিও-এর সাথে ইন্টারফেস করবে। আপনি শিখবেন কীভাবে একটি কাস্টম স্টার্টার স্টেপ এবং একটি কাস্টম অ্যাকশন স্টেপ তৈরি করতে হয়, যা কোনো থার্ড-পার্টি পরিকাঠামোর উপর নির্ভর না করেই তাৎক্ষণিকভাবে পরীক্ষা করা যাবে।
আমরা গুগল অ্যাপস স্ক্রিপ্ট ব্যবহার করে তৈরি করব:
- একটি ওয়েব অ্যাপ, যেখানে ব্যবহারকারীরা ম্যানুয়ালি সাপোর্ট টিকেট জমা দেওয়ার জন্য একটি আকর্ষণীয় ফর্ম রয়েছে।
- একটি কাস্টম স্টার্টার যা ওয়েব অ্যাপের সাবমিশনগুলো গ্রহণ করে এবং একটি ওয়ার্কস্পেস স্টুডিও ফ্লো চালু করে।
- একটি কাস্টম স্টেপ যা আগত টিকেটের বিবরণ বিশ্লেষণ করে জরুরি অবস্থার মাত্রা ("উচ্চ" বা "সাধারণ") শনাক্ত করে।
আপনি যা শিখবেন
- আপনার
appsscript.jsonম্যানিফেস্টে স্টার্টার এবং স্টেপগুলি কীভাবে কনফিগার করবেন - স্টার্টার রেজিস্ট্রেশন লাইফসাইকেল চলাকালীন
notifyUriকীভাবে তৈরি করতে হয়। -
UrlFetchAppব্যবহার করে এক্সটার্নাল কোড থেকে প্রোগ্রাম্যাটিকভাবে ওয়ার্কস্পেস স্টুডিও ফ্লো কীভাবে ট্রিগার করবেন। - আপনার কাস্টম স্টেপগুলিতে ডেটা ডাউনস্ট্রিমে পাঠানোর জন্য আউটপুট ভেরিয়েবল কীভাবে তৈরি করবেন।
পূর্বশর্ত
- গুগল ওয়ার্কস্পেস স্টুডিও সক্রিয় করা একটি গুগল ওয়ার্কস্পেস অ্যাকাউন্ট।
- আপনার ডোমেইনের অ্যাডমিন কনসোলে ( অ্যাপস > গুগল ওয়ার্কস্পেস > ওয়ার্কস্পেস স্টুডিও > কাস্টম স্টেপস সেটিংস-এর অধীনে) ‘ অপ্রকাশিত (পরীক্ষামূলক) কাস্টম স্টেপস-এর অনুমতি দিন’ সেটিংটি সক্রিয় করা আছে।
- গুগল অ্যাপস স্ক্রিপ্ট সম্পর্কে পরিচিতি।
২. অ্যাপস স্ক্রিপ্ট প্রজেক্টটি সেটআপ করুন
প্রথমে, আমাদের কোড রাখার জন্য একটি নতুন অ্যাপস স্ক্রিপ্ট প্রজেক্ট তৈরি করা যাক:
- script.google.com- এ যান এবং New project-এ ক্লিক করুন।
- প্রজেক্টটির নাম দিন সাপোর্ট কুইক পোর্টাল ।
- ক্লিক করুন
বাম সাইডবারে প্রজেক্ট সেটিংস ।
- এডিটরে appsscript.json ম্যানিফেস্ট ফাইলটি দেখানোর জন্য বক্সটিতে টিক দিন।
- ফিরে যান
সম্পাদকীয় দৃশ্য।
একটি স্ট্যান্ডার্ড গুগল ক্লাউড প্রজেক্ট লিঙ্ক করুন
ডিফল্টরূপে, অ্যাপস স্ক্রিপ্ট প্রজেক্টগুলো একটি লুকানো, ডিফল্ট গুগল ক্লাউড প্রজেক্টের সাথে যুক্ত থাকে। গুগল ওয়ার্কস্পেস স্টুডিও এপিআই কল করতে এবং PERMISSION_DENIED ত্রুটি এড়াতে, আপনাকে অবশ্যই আপনার স্ক্রিপ্টটিকে একটি স্ট্যান্ডার্ড ক্লাউড প্রজেক্টে পরিবর্তন করতে হবে, এপিআই সক্রিয় করতে হবে এবং গুগল অথ প্ল্যাটফর্মটি সঠিকভাবে কনফিগার করতে হবে।
- প্রজেক্ট নির্বাচন বা তৈরি করুন: Google Cloud Console- এ যান এবং পৃষ্ঠার শীর্ষে থাকা প্রজেক্ট ড্রপডাউন মেনু ব্যবহার করে একটি বিদ্যমান প্রজেক্ট বেছে নিন বা একটি নতুন প্রজেক্ট তৈরি করুন।
- এপিআই সক্রিয় করুন: টপ বারে আপনার নির্বাচিত প্রজেক্টটি সক্রিয় হয়ে গেলে, এপিআই এনাবলমেন্ট ফ্লো (API Enablement Flow) খুলুন এবং ওয়ার্কস্পেস স্টুডিও এপিআই (Workspace Studio API)- এর জন্য নেক্সট (Next ) ও এনাবল (Enable)- এ ক্লিক করুন।
- OAuth ব্র্যান্ডিং কনফিগার করুন: Google Auth Platform ব্র্যান্ডিং পৃষ্ঠাটি খুলুন।
- অনুরোধ করা হলে, ‘Get Started’-এ ক্লিক করুন। (যদি আগে থেকেই কনফিগার করা থাকে, তবে সরাসরি ধাপ ৪-এ চলে যান)।
- অ্যাপ ইনফরমেশন (App Information) অংশে একটি অ্যাপের নাম এবং ইউজার সাপোর্ট ইমেল লিখুন। নেক্সট (Next ) বাটনে ক্লিক করুন।
- Audience-এর অধীনে, Internal নির্বাচন করুন (যদি Internal উপলব্ধ না থাকে তবে External ) এবং Next-এ ক্লিক করুন।
- যোগাযোগের তথ্য প্রদান করুন, ডেটা নীতিতে সম্মতি দিন এবং তৈরি করুন-এ ক্লিক করুন।
- ডেটা অ্যাক্সেস কনফিগার করুন: ডেটা অ্যাক্সেস পৃষ্ঠাটি খুলুন এবং ‘Add or Remove Scopes’-এ ক্লিক করুন।
- ‘Manually add scopes’- এর অধীনে,
https://www.googleapis.com/auth/workspace.studio.triggerপেস্ট করুন। - প্রথমে ‘Add to Table’-এ ক্লিক করুন, তারপর ‘Update’-এ ক্লিক করুন এবং সবশেষে পেজের নিচে থাকা ‘Save’-এ ক্লিক করুন।
- ‘Manually add scopes’- এর অধীনে,
- IAM ও অ্যাডমিন > সেটিংস (অথবা ক্লাউড কনসোল ড্যাশবোর্ড)-এ যান এবং প্রজেক্ট নম্বরটি কপি করুন।
- আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টে ফিরে যান এবং ক্লিক করুন
বাম সাইডবারে প্রজেক্ট সেটিংস ।
- Google Cloud Platform (GCP) প্রজেক্ট সেকশনের অধীনে, Change project-এ ক্লিক করুন।
- আপনার কপি করা GCP প্রজেক্ট নম্বরটি প্রবেশ করান এবং 'সেট প্রজেক্ট'-এ ক্লিক করুন।
ম্যানিফেস্ট কনফিগার করুন
নতুন দৃশ্যমান appsscript.json ফাইলটি খুলুন। এর ভেতরের লেখাগুলো নিচের কোড দিয়ে প্রতিস্থাপন করুন। এই ম্যানিফেস্টটি আমাদের প্রয়োজনীয় OAuth স্কোপগুলো স্পষ্টভাবে তালিকাভুক্ত করে এবং studio.flows.workflowElements ব্লকের অধীনে আমাদের স্টার্টারকে workflowTrigger ও অ্যাকশনকে workflowAction হিসেবে সংজ্ঞায়িত করে।
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"webapp": {
"executeAs": "USER_ACCESSING",
"access": "MYSELF"
},
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/workspace.studio.trigger",
"https://www.googleapis.com/auth/script.storage",
"https://www.googleapis.com/auth/script.locale"
],
"urlFetchWhitelist": [
"https://workspacestudio.googleapis.com/"
],
"addOns": {
"common": {
"name": "Support Extension",
"logoUrl": "https://www.gstatic.com/images/branding/productlogos/buganizer/v1/192px.svg",
"useLocaleFromApp": true
},
"studio": {
"flows": {
"workflowElements": [
{
"id": "supportTicketTrigger",
"state": "ACTIVE",
"name": "New Support Ticket",
"description": "Fires when someone submits a ticket via the Web App.",
"workflowTrigger": {
"inputs": [],
"outputs": [
{
"id": "ticketTitle",
"description": "The title of the ticket",
"cardinality": "SINGLE",
"dataType": { "basicType": "STRING" }
},
{
"id": "ticketDescription",
"description": "The full description of the issue",
"cardinality": "SINGLE",
"dataType": { "basicType": "STRING" }
}
],
"onConfigFunction": "onConfigTrigger",
"onManageFunction": "onManageTrigger"
}
},
{
"id": "urgencyDetectorStep",
"state": "ACTIVE",
"name": "Detect Urgency",
"description": "Scans the ticket description to detect High or Normal urgency.",
"workflowAction": {
"inputs": [
{
"id": "ticketDescription",
"description": "The ticket description",
"cardinality": "SINGLE",
"dataType": { "basicType": "STRING" }
}
],
"outputs": [
{
"id": "urgencyLevel",
"description": "The urgency High/Normal",
"cardinality": "SINGLE",
"dataType": { "basicType": "STRING" }
}
],
"onConfigFunction": "onConfigUrgency",
"onExecuteFunction": "onExecuteUrgency"
}
}
]
}
}
}
}
৩. ওয়েব অ্যাপের UI তৈরি করুন
টার্মিনাল টুল বা থার্ড-পার্টি ওয়েবহুক ব্যবহার না করে আমাদের স্টার্টারটি চালু করার জন্য একটি দৃশ্যমান ও পরীক্ষাযোগ্য উপায় তৈরি করতে, আমরা একটি অ্যাপস স্ক্রিপ্ট ওয়েব অ্যাপ তৈরি করব।
অ্যাপস স্ক্রিপ্ট এডিটরে, ফাইলস- এর পাশে ক্লিক করুন। একটি ফাইল যোগ করুন এবং HTML নির্বাচন করুন। এটির নাম দিন
index.html ( .html এক্সটেনশনটি স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যাবে)।
নিম্নলিখিত সরলীকৃত UI কোডটি পেস্ট করুন:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<style>
body { font-family: Arial, sans-serif; padding: 20px; max-width: 500px; margin: auto; }
label { font-weight: bold; display: block; margin-top: 15px; }
input, textarea { width: 100%; margin-top: 5px; padding: 10px; box-sizing: border-box; }
button { background-color: #1a73e8; color: white; border: none; padding: 10px 15px; margin-top: 15px; font-weight: bold; cursor: pointer; border-radius: 4px; }
button:hover { background-color: #1557b0; }
#status { margin-top: 15px; color: green; font-weight: bold; }
</style>
</head>
<body>
<h2>Support Quick Portal</h2>
<p>Submit your issue below to trigger the Workspace Studio flow.</p>
<label for="title">Ticket Title</label>
<input type="text" id="title" placeholder="e.g. Broken monitor">
<label for="description">Issue Description</label>
<textarea id="description" rows="4" placeholder="Explain your issue (use words like 'urgent' to test the step!)..."></textarea>
<button onclick="submitTicket()">Submit Ticket</button>
<div id="status"></div>
<script>
function submitTicket() {
const title = document.getElementById('title').value;
const description = document.getElementById('description').value;
const statusEl = document.getElementById('status');
if (!title || !description) {
statusEl.style.color = "red";
statusEl.innerText = "Please fill out both fields.";
return;
}
statusEl.style.color = "green";
statusEl.innerText = "Submitting ticket...";
google.script.run
.withSuccessHandler(function(response) {
statusEl.innerText = response;
})
.withFailureHandler(function(error) {
statusEl.style.color = 'red';
statusEl.innerText = 'Error: ' + error.message;
})
.submitTicketToStudio(title, description);
}
</script>
</body>
</html>
৪. ব্যাকএন্ড স্ক্রিপ্টগুলো তৈরি করুন
এবার চলুন সবকিছু একসাথে যুক্ত করা যাক। কোডটি সহজে পাঠযোগ্য রাখার জন্য, আমরা ওয়েব অ্যাপ, স্টার্টার লজিক এবং অ্যাকশন স্টেপ লজিককে তিনটি ভিন্ন স্ক্রিপ্ট ফাইলে আলাদা করব।
WebApp.gs
এডিটরে থাকা ডিফল্ট Code.gs ফাইলটির নাম পরিবর্তন করে WebApp.gs রাখুন, বয়লারপ্লেট myFunction অংশটি মুছে ফেলুন এবং নিচের ব্লকটি কপি করে এর মধ্যে পেস্ট করুন। এই ফাইলটি ওয়েব অ্যাপ হোস্টিংয়ের কাজ করে:
/** --- WEB APP HOSTING --- **/
/**
* Serves the HTML UI when users visit the web app URL.
*/
function doGet() {
return HtmlService.createHtmlOutputFromFile('index')
.setTitle('Support Quick Portal')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
/**
* Called by the Web App form. It calls the Workspace Studio API.
*/
function submitTicketToStudio(title, description) {
const props = PropertiesService.getUserProperties();
const notifyUri = props.getProperty('notifyUri');
const triggerId = props.getProperty('triggerId');
if (!notifyUri || !triggerId) {
throw new Error('Trigger URL missing! Make sure the flow is enabled in Workspace Studio.');
}
// Use ScriptApp.getOAuthToken() (requires the workspace.studio.trigger scope in manifest)
const token = ScriptApp.getOAuthToken();
const requestId = Utilities.getUuid();
// Package our outputs mapped in appsscript.json
const payload = {
"name": "triggers/" + triggerId,
"outputs": {
"ticketTitle": { "stringValues": [title] },
"ticketDescription": { "stringValues": [description] }
},
"requestId": requestId
};
const options = {
"method": "POST",
"contentType": "application/json",
"headers": { "Authorization": "Bearer " + token },
"payload": JSON.stringify(payload),
"muteHttpExceptions": true
};
// Fire!
const response = UrlFetchApp.fetch(notifyUri, options);
if (response.getResponseCode() !== 200) {
console.error(response.getContentText());
throw new Error('Workspace Studio API Error: ' + response.getResponseCode());
}
return 'Ticket successfully routed to Workspace Studio!';
}
স্টার্টার.জিএস
এরপর, Files এর উপর মাউস রাখুন, ক্লিক করুন একটি ফাইল যোগ করুন , স্ক্রিপ্ট নির্বাচন করুন এবং এর নাম দিন
Starter.gs । নিচের ব্লকটি কপি করে এতে পেস্ট করুন। এই ফাইলটি স্টার্টার কনফিগারেশন এবং ওয়ার্কস্পেস স্টুডিও লাইফসাইকেল ম্যানেজমেন্ট পরিচালনা করে:
/** --- STARTER LOGIC --- **/
/**
* Workspace Studio calls this to display the config UI when the user adds the starter.
* We just return a static message since there are no properties to configure.
*/
function onConfigTrigger() {
const section = CardService.newCardSection()
.setHeader("Configure Web App Starter")
.addWidget(CardService.newTextParagraph().setText("Ready to go! Once you enable this flow, deploy your Apps Script project as a Web App to submit tickets."));
return CardService.newCardBuilder().addSection(section).build();
}
/**
* Workspace Studio posts data here to manage the lifecycle (enable/disable the trigger).
* Critically, we must construct or save the `notifyUri` and `triggerId` to call it later.
*/
function onManageTrigger(event) {
const triggerCreation = event.workflow.triggerCreation;
const triggerDeletion = event.workflow.triggerDeletion;
const props = PropertiesService.getUserProperties();
if (triggerCreation) {
// Save the unique URL and ID when the flow is enabled
// Note: notifyUri might be omitted, so fallback to constructing it dynamically
const notifyUri = triggerCreation.notifyUri || `https://workspacestudio.googleapis.com/v1/triggers/${triggerCreation.triggerId}:fire`;
props.setProperty('notifyUri', notifyUri);
props.setProperty('triggerId', triggerCreation.triggerId);
} else if (triggerDeletion) {
// Cleanup if the user deletes the flow
props.deleteProperty('notifyUri');
props.deleteProperty('triggerId');
}
}
অ্যাকশন.জিএস
এরপর, Files এর উপর মাউস রাখুন, ক্লিক করুন একটি ফাইল যোগ করুন , স্ক্রিপ্ট নির্বাচন করুন এবং এর নাম দিন
Action.gs । নিচের আর্জেন্সি স্টেপ লজিকটি কপি করে এতে পেস্ট করুন:
/** --- ACTION STEP LOGIC --- **/
/**
* Workspace Studio configuration card for the Step.
* We prompt the user to bind a variable to our "ticketDescription" input.
*/
function onConfigUrgency() {
const input = CardService.newTextInput()
.setFieldName("ticketDescription")
.setTitle("Source Description")
.setHint('Select the description variable outputted by the starter')
.setHostAppDataSource(
CardService.newHostAppDataSource().setWorkflowDataSource(CardService.newWorkflowDataSource().setIncludeVariables(true))
);
const section = CardService.newCardSection()
.setHeader("Urgency Detector Step")
.addWidget(input);
return CardService.newCardBuilder().addSection(section).build();
}
/**
* The synchronous logic executed during the Step.
*/
function onExecuteUrgency(event) {
// Read mapped inputs
let description = event.workflow.actionInvocation.inputs["ticketDescription"].stringValues[0];
if (!description) description = "";
const urgentKeywords = ['urgent', 'crash', 'broken', 'down', 'fire'];
let urgencyLevel = 'Normal';
if (urgentKeywords.some(keyword => description.toLowerCase().includes(keyword))) {
urgencyLevel = 'High';
}
// Package outputs correctly
const variableDataMap = {
"urgencyLevel": AddOnsResponseService.newVariableData().addStringValue(urgencyLevel)
};
return outputVariables(variableDataMap);
}
/**
* Helper strictly enforcing the expected Step object return type.
*/
function outputVariables(variableDataMap) {
const workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
.setVariableDataMap(variableDataMap);
const hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
return AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
}
৫. স্থাপন ও পরীক্ষা করুন
আমাদের কোড লেখা হয়ে গেলে, চলুন প্রজেক্টটি ডেপ্লয় ও কনফিগার করে নিই।
ধাপ ১: স্ক্রিপ্টটি পুনরায় অনুমোদন করুন
যেহেতু আপনি একটি নতুন স্ট্যান্ডার্ড গুগল ক্লাউড প্রজেক্ট লিঙ্ক করেছেন, তাই আপনাকে অবশ্যই নতুন প্রজেক্টটির বিপরীতে স্ক্রিপ্টটির স্কোপগুলোকে (যেমন UrlFetchApp দ্বারা ব্যবহৃত script.external_request ) স্পষ্টভাবে অনুমোদন করতে হবে।
- অ্যাপস স্ক্রিপ্ট এডিটরে, Files- এর অধীনে
WebApp.gsনির্বাচন করুন, তারপর উপরের টুলবার ড্রপডাউন থেকেdoGetফাংশনটি নির্বাচন করুন। - রান-এ ক্লিক করুন।
- 'অনুমোদন আবশ্যক' লেখা একটি বার্তা প্রদর্শিত হবে। 'অনুমতি পর্যালোচনা করুন'- এ ক্লিক করুন।
- আপনার অ্যাকাউন্ট বেছে নিন এবং স্ক্রিপ্টটি অনুমোদন করুন। যদি আপনি "Unverified app" সতর্কতা দেখতে পান, তবে এটিকে বাইপাস করতে Advanced -> Go to Support Quick Portal-এ ক্লিক করুন।
- এক্সিকিউশন লগে ' এক্সিকিউশন সম্পন্ন হয়েছে ' লেখাটি প্রদর্শিত হওয়া পর্যন্ত অপেক্ষা করুন, যা নিশ্চিত করে যে স্ক্রিপ্টটি এখন সম্পূর্ণরূপে অনুমোদিত।
ধাপ ২: এক্সটেনশন এবং ওয়েব অ্যাপটি পরীক্ষা করুন
যেহেতু আপনার appsscript.json একটি অ্যাড-অন এবং একটি ওয়েব অ্যাপ উভয়ই সংজ্ঞায়িত করা আছে, তাই আপনি উভয়কেই একযোগে কনফিগার করতে পারেন।
- অ্যাপস স্ক্রিপ্টের উপরের ডান কোণায় থাকা Deploy > Test deployments- এ ক্লিক করুন।
- টাইপ নির্বাচন করুন এর পাশে ক্লিক করুন
ডিপ্লয়মেন্ট টাইপগুলো সক্রিয় করুন এবং ‘Google Workspace Add-ons’ চেক করা আছে কিনা তা নিশ্চিত করুন, তারপর ‘Install’-এ ক্লিক করুন।
- ক্লিক করুন
ডিপ্লয়মেন্ট টাইপগুলো আবার সক্রিয় করুন , ‘ওয়েব অ্যাপ’ চেক করা আছে কিনা তা নিশ্চিত করুন এবং URL- টি কপি করুন (এটির শেষে
/devথাকবে)। এটি আপনার তৈরি করা সাপোর্ট কুইক পোর্টাল ওয়েব অ্যাপটির URL। - সম্পন্ন-এ ক্লিক করুন। ওয়ার্কস্পেস স্টুডিও অ্যাড-অনটি শনাক্ত করার আগে আপনাকে আপনার ব্রাউজার রিফ্রেশ করতে হতে পারে।
ধাপ ৩: স্টুডিও ফ্লো কনফিগার করুন
- studio.workspace.google.com- এ গুগল ওয়ার্কস্পেস স্টুডিও খুলুন।
- ক্লিক করুন
বাম দিকে টুল যোগ করুন এবং ফ্লো নির্বাচন করুন।
- স্টার্টারটি কনফিগার করতে, 'Choose a starter'- এ ক্লিক করুন, তারপর আপনার ইনস্টল করা 'Support Extension > New Support Ticket' নির্বাচন করুন। যদি "Permission required" বার্তা আসে, তাহলে অ্যাড-অনটিকে আপনার ডেটা অ্যাক্সেস করার অনুমতি দিতে 'Grant permission'- এ ক্লিক করুন।
- এরপর, Actions-এর অধীনে Choose a step-এ ক্লিক করুন, "Support Extension" পর্যন্ত স্ক্রোল করুন এবং Detect Urgency ধাপটি নির্বাচন করুন।
- উৎস বিবরণে ক্লিক করুন
ভেরিয়েবল থেকে ধাপ ১ নির্বাচন করুন: নতুন সাপোর্ট টিকেট > সমস্যাটির সম্পূর্ণ বিবরণ (
ticketDescription)। - আবার ‘Choose a step’-এ ক্লিক করুন এবং Gmail > Send an email অথবা Chat > Notify me in Chat-এর মতো একটি বিল্ট-ইন ধাপ নির্বাচন করুন।
- আপনি যদি Gmail বেছে নেন:
- প্রাপক: আপনার নিজের ইমেইল দিন।
- বিষয়: টিকিট
ticketTitleশিরোনাম অগ্রাধিকার হলurgencyLevel - বার্তা:
ticketDescription
- আপনি যদি চ্যাট বেছে নেন:
- বার্তা: টিকেট
ticketTitleঅগ্রাধিকার হলurgencyLevel।ticketDescription
- বার্তা: টিকেট
- আপনি যদি Gmail বেছে নেন:
- ওয়ার্কফ্লোটি চালু করুন । আপনার ফ্লো-এর নাম পরিবর্তন করতে বলা হলে,
Support Ticket Routerমতো একটি নাম লিখে সেভ করুন। এটিonManageTriggerলাইফসাইকেলটিকে ট্রিগার করে এবংnotifyUriটি সেভ করে রাখে।
ধাপ ৪: সিমুলেশনটি চালান
- এই পৃষ্ঠার ধাপ ২-এ আপনি আগে যে ওয়েব অ্যাপ URL-টি কপি করেছিলেন, সেটি একটি নতুন ব্রাউজার ট্যাবে খুলুন (এর শেষে /dev রয়েছে)।
- ফর্মটি পূরণ করুন। বিবরণে একটি ট্রিগার কীওয়ার্ড (যেমন 'জরুরি' বা 'ক্র্যাশ') অন্তর্ভুক্ত করতে ভুলবেন না।
- সাবমিট-এ ক্লিক করুন। "টিকেট সফলভাবে রাউট করা হয়েছে" বার্তাটির জন্য অপেক্ষা করুন।
- আপনার Workspace Studio Activity Log, আপনার Gmail ইনবক্স, অথবা Google Chat (আপনার নির্বাচিত পদক্ষেপের উপর নির্ভর করে) দেখুন। আপনি সেখানে "High" urgency হিসেবে ট্যাগ করা একটি মেসেজ বা ইমেল দেখতে পাবেন, যা আপনার কাস্টম অ্যাপস স্ক্রিপ্ট এলিমেন্ট ব্যবহার করে নেটিভভাবে ইন্টিগ্রেটেড করা হয়েছে।
৬. পরিষ্কার করা
আপনার ওয়ার্কস্পেস এবং গুগল ক্লাউড অ্যাকাউন্টকে জঞ্জালমুক্ত রাখতে, আপনি এই কোডল্যাব চলাকালীন তৈরি করা রিসোর্সগুলো পরিষ্কার করে নিতে পারেন।
- ওয়ার্কস্পেস স্টুডিও ফ্লোটি মুছে ফেলুন:
- studio.workspace.google.com খুলুন।
- আপনার
Support Ticket Routerফ্লো খুঁজুন। - এর পাশে থাকা তিন-বিন্দু মেনুতে ক্লিক করুন এবং ডিলিট নির্বাচন করুন।
- অ্যাপস স্ক্রিপ্ট প্রজেক্টটি মুছে ফেলুন:
- script.google.com- এ যান।
-
Support Quick Portalপ্রজেক্টটি খুঁজুন। - তিন-বিন্দু মেনুতে ক্লিক করুন এবং অপসারণ নির্বাচন করুন।
- গুগল ক্লাউড প্রজেক্ট বন্ধ করুন:
- গুগল ক্লাউড কনসোলে যান।
- উপরের ড্রপডাউন থেকে আপনার নতুন প্রজেক্টটি সিলেক্ট করা আছে কিনা, তা নিশ্চিত করুন।
- IAM ও অ্যাডমিন > সেটিংস- এ যান এবং শাট ডাউন-এ ক্লিক করুন।
৭. উপসংহার
আপনি কোনো বাহ্যিক তৃতীয় পক্ষের সাবস্ক্রিপশনের উপর নির্ভর না করে গুগল ওয়ার্কস্পেস স্টুডিও কাস্টম এক্সটেনশনের জন্য সফলভাবে একটি সম্পূর্ণ ইকোসিস্টেম তৈরি করেছেন।
আমরা যা আলোচনা করেছি:
- গুগলের লাইফসাইকেল ইভেন্টগুলো সঠিকভাবে ক্যাপচার ও হ্যান্ডেল করার জন্য
onManageFunctionপাশাপাশিworkflowTriggerব্যবহার করা। -
workspacestudio.googleapis.comএপিআই এন্ডপয়েন্টগুলোর বিপরীতেScriptApp.getOAuthToken()ব্যবহার করে ব্যাকএন্ড অনুরোধগুলোর প্রমাণীকরণ করা হচ্ছে। -
workflowActionব্যবহার করে ইনপুট ভেরিয়েবলগুলো সিনক্রোনাসভাবে প্রসেস করা এবং ডাউনস্ট্রিম আউটপুট তৈরি করা।
আপনার ওয়েব অ্যাপ (বা ইনকামিং ওয়েবহুক) কোথা থেকে ট্রিগার হবে তা পরিবর্তন করার মাধ্যমে, আপনি এখন এই নীতিগুলোকে কাজে লাগিয়ে জিরা, সেলসফোর্স বা জেনডেস্ক-এর মতো প্রকৃত SaaS প্ল্যাটফর্মের সাথে সংযোগ স্থাপন করতে পারেন।