এমন একটি অ্যাপ কল্পনা করুন যা ব্যবহারকারীদের সেরা হাইকিং রুট খুঁজে পেতে সাহায্য করে। একটি ক্যালেন্ডার ইভেন্ট হিসাবে হাইকিং প্ল্যান যোগ করার মাধ্যমে, ব্যবহারকারীরা স্বয়ংক্রিয়ভাবে সংগঠিত থাকার জন্য অনেক সাহায্য পান। Google ক্যালেন্ডার তাদের পরিকল্পনা ভাগাভাগি করতে সাহায্য করে এবং তাদের এটি সম্পর্কে মনে করিয়ে দেয় যাতে তারা কোনো চাপ ছাড়াই প্রস্তুত হতে পারে। এছাড়াও, Google পণ্যগুলির নির্বিঘ্ন সংহতকরণের জন্য ধন্যবাদ, Google Now তাদের চলে যাওয়ার সময় সম্পর্কে পিং করে এবং Google মানচিত্র তাদের সময়মতো মিটিং স্পটে নির্দেশ দেয়৷
এই নিবন্ধটি ব্যাখ্যা করে কিভাবে ক্যালেন্ডার ইভেন্ট তৈরি করতে হয় এবং সেগুলিকে আপনার ব্যবহারকারীদের ক্যালেন্ডারে যুক্ত করতে হয়।
একটি ইভেন্ট যোগ করুন
একটি ইভেন্ট তৈরি করতে, অন্তত এই প্যারামিটারগুলি প্রদান করে events.insert()
পদ্ধতিতে কল করুন:
-
calendarId
হল ক্যালেন্ডার শনাক্তকারী এবং হয় ক্যালেন্ডারের ইমেল ঠিকানা হতে পারে যার উপর ইভেন্ট তৈরি করা হবে বা একটি বিশেষ কীওয়ার্ড'primary'
যা লগ ইন করা ব্যবহারকারীর প্রাথমিক ক্যালেন্ডার ব্যবহার করবে। আপনি যে ক্যালেন্ডারটি ব্যবহার করতে চান তার ইমেল ঠিকানাটি যদি আপনি না জানেন তবে আপনি Google ক্যালেন্ডার ওয়েব UI এর ক্যালেন্ডারের সেটিংসে ("ক্যালেন্ডার ঠিকানা" বিভাগে) এটি পরীক্ষা করতে পারেন বা আপনি এটিতে এটি সন্ধান করতে পারেনcalendarList.list()
কলের ফলাফল। -
event
হল শুরু এবং শেষের মতো সমস্ত প্রয়োজনীয় বিবরণ দিয়ে তৈরি করা ইভেন্ট। শুধুমাত্র দুটি প্রয়োজনীয় ক্ষেত্র হলstart
এবংend
সময়। ইভেন্ট ক্ষেত্রের সম্পূর্ণ সেটের জন্যevent
রেফারেন্স দেখুন।
সফলভাবে ইভেন্ট তৈরি করার জন্য, আপনাকে এটি করতে হবে:
- আপনার OAuth স্কোপ
https://www.googleapis.com/auth/calendar
এ সেট করুন যাতে আপনি ব্যবহারকারীর ক্যালেন্ডারে সম্পাদনা অ্যাক্সেস করতে পারেন। - নিশ্চিত করুন যে প্রমাণীকৃত ব্যবহারকারীর ক্যালেন্ডারে আপনার দেওয়া
calendarId
দিয়ে লেখার অ্যাক্সেস রয়েছে (উদাহরণস্বরূপcalendarId
জন্যcalendarList.get()
কল করে এবংaccessRole
চেক করে)।
ইভেন্ট মেটাডেটা যোগ করুন
আপনি একটি ক্যালেন্ডার ইভেন্ট তৈরি করার সময় আপনি ঐচ্ছিকভাবে ইভেন্ট মেটাডেটা যোগ করতে পারেন। আপনি যদি তৈরি করার সময় মেটাডেটা যোগ না করা বেছে নেন, তাহলে আপনি events.update()
ব্যবহার করে অনেক ক্ষেত্র আপডেট করতে পারেন; যাইহোক, কিছু ক্ষেত্র, যেমন ইভেন্ট আইডি, শুধুমাত্র একটি events.insert()
অপারেশন চলাকালীন সেট করা যেতে পারে।
- অবস্থান
অবস্থান ক্ষেত্রে একটি ঠিকানা যোগ করা যেমন বৈশিষ্ট্য সক্ষম করে
"ত্যাগের সময়" বা দিকনির্দেশ সহ একটি মানচিত্র প্রদর্শন করা।
- ইভেন্ট আইডি
একটি ইভেন্ট তৈরি করার সময়, আপনি নিজের ইভেন্ট আইডি তৈরি করতে বেছে নিতে পারেন
যা আমাদের ফরম্যাটের প্রয়োজনীয়তার সাথে সঙ্গতিপূর্ণ। এটি আপনাকে Google ক্যালেন্ডারের ইভেন্টগুলির সাথে আপনার স্থানীয় ডাটাবেসের সত্তাগুলিকে সিঙ্কে রাখতে সক্ষম করে৷ এটি ক্যালেন্ডার ব্যাকএন্ডে সফলভাবে সম্পাদিত হওয়ার পরে কোনো সময়ে অপারেশনটি ব্যর্থ হলে এটি ডুপ্লিকেট ইভেন্ট তৈরিতে বাধা দেয়। যদি কোন ইভেন্ট আইডি প্রদান করা না হয়, সার্ভার আপনার জন্য একটি তৈরি করে। আরও তথ্যের জন্য ইভেন্ট আইডি রেফারেন্স দেখুন।
- উপস্থিতরা
আপনি যে ইভেন্টটি তৈরি করেন তা সমস্ত প্রাথমিক Google ক্যালেন্ডারে প্রদর্শিত হয়৷
একই ইভেন্ট আইডি দিয়ে আপনি যে অংশগ্রহণকারীদের অন্তর্ভুক্ত করেছেন। আপনার সন্নিবেশের অনুরোধে আপনি
sendNotifications
true
হিসাবে সেট করলে, অংশগ্রহণকারীরাও আপনার ইভেন্টের জন্য একটি ইমেল বিজ্ঞপ্তি পাবেন। আরও তথ্যের জন্য একাধিক অংশগ্রহণকারীদের নির্দেশিকা সহ ইভেন্টগুলি দেখুন।
নিম্নলিখিত উদাহরণগুলি একটি ইভেন্ট তৈরি করা এবং এর মেটাডেটা সেট করা দেখায়:
যাও
// Refer to the Go quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/go
// Change the scope to calendar.CalendarScope and delete any stored credentials.
event := &calendar.Event{
Summary: "Google I/O 2015",
Location: "800 Howard St., San Francisco, CA 94103",
Description: "A chance to hear more about Google's developer products.",
Start: &calendar.EventDateTime{
DateTime: "2015-05-28T09:00:00-07:00",
TimeZone: "America/Los_Angeles",
},
End: &calendar.EventDateTime{
DateTime: "2015-05-28T17:00:00-07:00",
TimeZone: "America/Los_Angeles",
},
Recurrence: []string{"RRULE:FREQ=DAILY;COUNT=2"},
Attendees: []*calendar.EventAttendee{
&calendar.EventAttendee{Email:"lpage@example.com"},
&calendar.EventAttendee{Email:"sbrin@example.com"},
},
}
calendarId := "primary"
event, err = srv.Events.Insert(calendarId, event).Do()
if err != nil {
log.Fatalf("Unable to create event. %v\n", err)
}
fmt.Printf("Event created: %s\n", event.HtmlLink)
জাভা
// Refer to the Java quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/java
// Change the scope to CalendarScopes.CALENDAR and delete any stored
// credentials.
Event event = new Event()
.setSummary("Google I/O 2015")
.setLocation("800 Howard St., San Francisco, CA 94103")
.setDescription("A chance to hear more about Google's developer products.");
DateTime startDateTime = new DateTime("2015-05-28T09:00:00-07:00");
EventDateTime start = new EventDateTime()
.setDateTime(startDateTime)
.setTimeZone("America/Los_Angeles");
event.setStart(start);
DateTime endDateTime = new DateTime("2015-05-28T17:00:00-07:00");
EventDateTime end = new EventDateTime()
.setDateTime(endDateTime)
.setTimeZone("America/Los_Angeles");
event.setEnd(end);
String[] recurrence = new String[] {"RRULE:FREQ=DAILY;COUNT=2"};
event.setRecurrence(Arrays.asList(recurrence));
EventAttendee[] attendees = new EventAttendee[] {
new EventAttendee().setEmail("lpage@example.com"),
new EventAttendee().setEmail("sbrin@example.com"),
};
event.setAttendees(Arrays.asList(attendees));
EventReminder[] reminderOverrides = new EventReminder[] {
new EventReminder().setMethod("email").setMinutes(24 * 60),
new EventReminder().setMethod("popup").setMinutes(10),
};
Event.Reminders reminders = new Event.Reminders()
.setUseDefault(false)
.setOverrides(Arrays.asList(reminderOverrides));
event.setReminders(reminders);
String calendarId = "primary";
event = service.events().insert(calendarId, event).execute();
System.out.printf("Event created: %s\n", event.getHtmlLink());
জাভাস্ক্রিপ্ট
// Refer to the JavaScript quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/js
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
// stored credentials.
const event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles'
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles'
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': 'lpage@example.com'},
{'email': 'sbrin@example.com'}
],
'reminders': {
'useDefault': false,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10}
]
}
};
const request = gapi.client.calendar.events.insert({
'calendarId': 'primary',
'resource': event
});
request.execute(function(event) {
appendPre('Event created: ' + event.htmlLink);
});
Node.js
// Refer to the Node.js quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/node
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
// stored credentials.
const event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': 'lpage@example.com'},
{'email': 'sbrin@example.com'},
],
'reminders': {
'useDefault': false,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10},
],
},
};
calendar.events.insert({
auth: auth,
calendarId: 'primary',
resource: event,
}, function(err, event) {
if (err) {
console.log('There was an error contacting the Calendar service: ' + err);
return;
}
console.log('Event created: %s', event.htmlLink);
});
পিএইচপি
$event = new Google_Service_Calendar_Event(array(
'summary' => 'Google I/O 2015',
'location' => '800 Howard St., San Francisco, CA 94103',
'description' => 'A chance to hear more about Google\'s developer products.',
'start' => array(
'dateTime' => '2015-05-28T09:00:00-07:00',
'timeZone' => 'America/Los_Angeles',
),
'end' => array(
'dateTime' => '2015-05-28T17:00:00-07:00',
'timeZone' => 'America/Los_Angeles',
),
'recurrence' => array(
'RRULE:FREQ=DAILY;COUNT=2'
),
'attendees' => array(
array('email' => 'lpage@example.com'),
array('email' => 'sbrin@example.com'),
),
'reminders' => array(
'useDefault' => FALSE,
'overrides' => array(
array('method' => 'email', 'minutes' => 24 * 60),
array('method' => 'popup', 'minutes' => 10),
),
),
));
$calendarId = 'primary';
$event = $service->events->insert($calendarId, $event);
printf('Event created: %s\n', $event->htmlLink);
পাইথন
# Refer to the Python quickstart on how to setup the environment:
# https://developers.google.com/calendar/quickstart/python
# Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
# stored credentials.
event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': '[email protected]'},
{'email': '[email protected]'},
],
'reminders': {
'useDefault': False,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10},
],
},
}
event = service.events().insert(calendarId='primary', body=event).execute()
print 'Event created: %s' % (event.get('htmlLink'))
রুবি
event = Google::Apis::CalendarV3::Event.new(
summary: 'Google I/O 2015',
location: '800 Howard St., San Francisco, CA 94103',
description: 'A chance to hear more about Google\'s developer products.',
start: Google::Apis::CalendarV3::EventDateTime.new(
date_time: '2015-05-28T09:00:00-07:00',
time_zone: 'America/Los_Angeles'
),
end: Google::Apis::CalendarV3::EventDateTime.new(
date_time: '2015-05-28T17:00:00-07:00',
time_zone: 'America/Los_Angeles'
),
recurrence: [
'RRULE:FREQ=DAILY;COUNT=2'
],
attendees: [
Google::Apis::CalendarV3::EventAttendee.new(
email: '[email protected]'
),
Google::Apis::CalendarV3::EventAttendee.new(
email: '[email protected]'
)
],
reminders: Google::Apis::CalendarV3::Event::Reminders.new(
use_default: false,
overrides: [
Google::Apis::CalendarV3::EventReminder.new(
reminder_method: 'email',
minutes: 24 * 60
),
Google::Apis::CalendarV3::EventReminder.new(
reminder_method: 'popup',
minutes: 10
)
]
)
)
result = client.insert_event('primary', event)
puts "Event created: #{result.html_link}"
ইভেন্টে ড্রাইভ সংযুক্তি যোগ করুন
আপনি Google ড্রাইভ ফাইলগুলি সংযুক্ত করতে পারেন যেমন ডক্সে মিটিং নোট, পত্রকের বাজেট, স্লাইডে উপস্থাপনা, বা আপনার ক্যালেন্ডার ইভেন্টগুলিতে অন্য কোনও প্রাসঙ্গিক Google ড্রাইভ ফাইল৷ আপনি যখন events.insert()
দিয়ে একটি ইভেন্ট তৈরি করেন বা পরবর্তীতে কোনো আপডেটের অংশ হিসাবে যেমন events.patch()
দিয়ে একটি ইভেন্ট তৈরি করেন তখন আপনি সংযুক্তি যোগ করতে পারেন
একটি ইভেন্টে একটি Google ড্রাইভ ফাইল সংযুক্ত করার দুটি অংশ হল:
- ড্রাইভ এপিআই ফাইল রিসোর্স থেকে ফাইলের
alternateLink
URL,title
এবংmimeType
পান, সাধারণতfiles.get()
পদ্ধতিতে। - অনুরোধের বডিতে সেট করা
attachments
ফিল্ড এবংsupportsAttachments
প্যারামিটারটিtrue
সেট করে একটি ইভেন্ট তৈরি বা আপডেট করুন।
নিম্নলিখিত কোড উদাহরণ দেখায় কিভাবে একটি সংযুক্তি যোগ করতে একটি বিদ্যমান ইভেন্ট আপডেট করতে হয়:
জাভা
public static void addAttachment(Calendar calendarService, Drive driveService, String calendarId,
String eventId, String fileId) throws IOException {
File file = driveService.files().get(fileId).execute();
Event event = calendarService.events().get(calendarId, eventId).execute();
List<EventAttachment> attachments = event.getAttachments();
if (attachments == null) {
attachments = new ArrayList<EventAttachment>();
}
attachments.add(new EventAttachment()
.setFileUrl(file.getAlternateLink())
.setMimeType(file.getMimeType())
.setTitle(file.getTitle()));
Event changes = new Event()
.setAttachments(attachments);
calendarService.events().patch(calendarId, eventId, changes)
.setSupportsAttachments(true)
.execute();
}
পিএইচপি
function addAttachment($calendarService, $driveService, $calendarId, $eventId, $fileId) {
$file = $driveService->files->get($fileId);
$event = $calendarService->events->get($calendarId, $eventId);
$attachments = $event->attachments;
$attachments[] = array(
'fileUrl' => $file->alternateLink,
'mimeType' => $file->mimeType,
'title' => $file->title
);
$changes = new Google_Service_Calendar_Event(array(
'attachments' => $attachments
));
$calendarService->events->patch($calendarId, $eventId, $changes, array(
'supportsAttachments' => TRUE
));
}
পাইথন
def add_attachment(calendarService, driveService, calendarId, eventId, fileId):
file = driveService.files().get(fileId=fileId).execute()
event = calendarService.events().get(calendarId=calendarId,
eventId=eventId).execute()
attachments = event.get('attachments', [])
attachments.append({
'fileUrl': file['alternateLink'],
'mimeType': file['mimeType'],
'title': file['title']
})
changes = {
'attachments': attachments
}
calendarService.events().patch(calendarId=calendarId, eventId=eventId,
body=changes,
supportsAttachments=True).execute()
ইভেন্টগুলিতে ভিডিও এবং ফোন সম্মেলন যোগ করুন
আপনার ব্যবহারকারীদের ফোন কল বা ভিডিও কলের মাধ্যমে দূর থেকে দেখা করার অনুমতি দেওয়ার জন্য আপনি Hangouts এবং Google Meet সম্মেলনের সাথে ইভেন্টগুলি সংযুক্ত করতে পারেন।
conferenceData
ফিল্ডটি বিদ্যমান কনফারেন্সের বিবরণ পড়তে, কপি করতে এবং সাফ করতে ব্যবহার করা যেতে পারে; এটি নতুন সম্মেলন তৈরির অনুরোধ করতেও ব্যবহার করা যেতে পারে। কনফারেন্সের বিশদ তৈরি এবং পরিবর্তনের অনুমতি দিতে, conferenceDataVersion
অনুরোধ প্যারামিটারটি 1
এ সেট করুন।
conferenceData.conferenceSolution.key.type
দ্বারা নির্দেশিত হিসাবে বর্তমানে তিন ধরনের conferenceData
সমর্থিত আছে:
- ভোক্তাদের জন্য Hangouts (
eventHangout
) - ক্লাসিক Hangouts এর জন্য Google Workspace ব্যবহারকারীরা (অপ্রচলিত;
eventNamedHangout
) - Google Meet (
hangoutsMeet
)
আপনি calendars
এবং calendarList
সংগ্রহের conferenceProperties.allowedConferenceSolutionTypes
টাইপগুলি দেখে একজন ব্যবহারকারীর প্রদত্ত ক্যালেন্ডারের জন্য কোন কনফারেন্স টাইপটি সমর্থিত তা জানতে পারেন৷ আপনি settings
সংগ্রহে autoAddHangouts
সেটিংস চেক করে ব্যবহারকারী তাদের নতুন তৈরি সমস্ত ইভেন্টের জন্য Hangouts তৈরি করা পছন্দ করেন কিনা তাও শিখতে পারেন৷
type
ছাড়াও, conferenceSolution
name
এবং iconUri
ক্ষেত্রগুলিও সরবরাহ করে যা আপনি নীচে দেখানো হিসাবে সম্মেলন সমাধান উপস্থাপন করতে ব্যবহার করতে পারেন:
জাভাস্ক্রিপ্ট
const solution = event.conferenceData.conferenceSolution;
const content = document.getElementById("content");
const text = document.createTextNode("Join " + solution.name);
const icon = document.createElement("img");
icon.src = solution.iconUri;
content.appendChild(icon);
content.appendChild(text);
আপনি একটি ইভেন্টের জন্য একটি নতুন কনফারেন্স তৈরি করতে পারেন একটি createRequest
প্রদান করে একটি নতুন জেনারেট করা requestId
যা একটি এলোমেলো string
হতে পারে। কনফারেন্সগুলি অ্যাসিঙ্ক্রোনাসভাবে তৈরি করা হয়, কিন্তু আপনার ব্যবহারকারীদের কী ঘটছে তা জানাতে আপনি সবসময় আপনার অনুরোধের স্থিতি পরীক্ষা করতে পারেন।
উদাহরণস্বরূপ, একটি বিদ্যমান ইভেন্টের জন্য সম্মেলন তৈরির অনুরোধ করতে:
জাভাস্ক্রিপ্ট
const eventPatch = {
conferenceData: {
createRequest: {requestId: "7qxalsvy0e"}
}
};
gapi.client.calendar.events.patch({
calendarId: "primary",
eventId: "7cbh8rpc10lrc0ckih9tafss99",
resource: eventPatch,
sendNotifications: true,
conferenceDataVersion: 1
}).execute(function(event) {
console.log("Conference created for event: %s", event.htmlLink);
});
এই কলের তাত্ক্ষণিক প্রতিক্রিয়াতে এখনও সম্পূর্ণ-জনসংখ্যাযুক্ত conferenceData
নাও থাকতে পারে; এটি স্ট্যাটাস ক্ষেত্রে pending
স্ট্যাটাস কোড দ্বারা নির্দেশিত হয়। কনফারেন্স তথ্য জনবহুল হওয়ার পরে স্থিতি কোড success
পরিবর্তিত হয়। entryPoints
ফিল্ডে আপনার ব্যবহারকারীদের ডায়াল করার জন্য কোন ভিডিও এবং ফোনের URI পাওয়া যায় সে সম্পর্কে তথ্য রয়েছে।
আপনি যদি একই কনফারেন্সের বিবরণ সহ একাধিক ক্যালেন্ডার ইভেন্টের সময়সূচী করতে চান তবে আপনি একটি ইভেন্ট থেকে অন্য ইভেন্টে সম্পূর্ণ conferenceData
অনুলিপি করতে পারেন।
অনুলিপি কিছু পরিস্থিতিতে দরকারী. উদাহরণস্বরূপ, ধরুন আপনি একটি নিয়োগের অ্যাপ্লিকেশন তৈরি করছেন যা প্রার্থী এবং সাক্ষাত্কারকারীর জন্য পৃথক ইভেন্ট সেট আপ করে — আপনি সাক্ষাত্কারকারীর পরিচয় রক্ষা করতে চান, তবে আপনি নিশ্চিত করতে চান যে সমস্ত অংশগ্রহণকারীরা একই কনফারেন্স কলে যোগদান করে।