मान लें कि कोई ऐसा ऐप्लिकेशन है जो लोगों को हाइकिंग के लिए सबसे अच्छे रास्ते ढूंढने में मदद करता है. कैंपिंग के प्लान को कैलेंडर इवेंट के तौर पर जोड़ने से, उपयोगकर्ताओं को अपने-आप व्यवस्थित रहने में काफ़ी मदद मिलती है. Google Calendar की मदद से, वे प्लान शेयर कर पाते हैं और उन्हें इसके बारे में रिमाइंडर मिलता है, ताकि वे बिना किसी परेशानी के तैयारी कर सकें. साथ ही, Google के प्रॉडक्ट के साथ आसानी से इंटिग्रेट होने की वजह से, Google Now उन्हें घर से निकलने के समय के बारे में सूचना देता है और Google Maps उन्हें मीटिंग की जगह पर समय पर पहुंचाता है.
इस लेख में, कैलेंडर इवेंट बनाने और उन्हें उपयोगकर्ताओं के कैलेंडर में जोड़ने का तरीका बताया गया है.
इवेंट जोड़ें
इवेंट बनाने के लिए, कम से कम ये पैरामीटर उपलब्ध कराते हुए events.insert()
तरीके को कॉल करें:
calendarId
, कैलेंडर आइडेंटिफ़ायर है. यह उस कैलेंडर का ईमेल पता हो सकता है जिस पर इवेंट बनाना है या कोई खास कीवर्ड'primary'
हो सकता है. यह कीवर्ड, लॉग इन किए हुए उपयोगकर्ता के प्राइमरी कैलेंडर का इस्तेमाल करेगा. अगर आपको उस कैलेंडर का ईमेल पता नहीं पता जिसका इस्तेमाल करना है, तो इसे Google Calendar के वेब यूज़र इंटरफ़ेस (यूआई) की कैलेंडर सेटिंग में जाकर देखा जा सकता है. इसके लिए, "कैलेंडर पता" सेक्शन में जाएं. इसके अलावा,calendarList.list()
कॉल के नतीजे में भी यह पता देखा जा सकता है.event
वह इवेंट है जिसे शुरू और खत्म होने के समय जैसी सभी ज़रूरी जानकारी के साथ बनाया जाना है.start
औरend
टाइम, सिर्फ़ दो ज़रूरी फ़ील्ड हैं. इवेंट फ़ील्ड के पूरे सेट के लिए,event
रेफ़रंस देखें.
इवेंट बनाने के लिए, आपको:
- अपने OAuth स्कोप को
https://www.googleapis.com/auth/calendar
पर सेट करें, ताकि आपके पास उपयोगकर्ता के कैलेंडर में बदलाव करने का ऐक्सेस हो. - पक्का करें कि पुष्टि किए गए उपयोगकर्ता के पास आपके दिए गए
calendarId
के साथ, कैलेंडर में बदलाव करने का ऐक्सेस हो. उदाहरण के लिए,calendarId
के लिएcalendarList.get()
को कॉल करके औरaccessRole
की जांच करके.
इवेंट का मेटाडेटा जोड़ना
कैलेंडर इवेंट बनाते समय, आपके पास इवेंट का मेटाडेटा जोड़ने का विकल्प होता है. हालांकि, ऐसा करना ज़रूरी नहीं है. अगर आपने एलिमेंट बनाते समय मेटाडेटा जोड़ने का विकल्प नहीं चुना है, तो events.update()
का इस्तेमाल करके कई फ़ील्ड अपडेट किए जा सकते हैं. हालांकि, इवेंट आईडी जैसे कुछ फ़ील्ड सिर्फ़ events.insert()
ऑपरेशन के दौरान सेट किए जा सकते हैं.
- जगह
जगह की जानकारी वाले फ़ील्ड में पता जोड़ने पर, ये सुविधाएं चालू हो जाती हैं
"रवाना होने का समय" या निर्देशों के साथ मैप दिखाना.
- इवेंट आईडी
इवेंट बनाते समय, आपके पास अपना इवेंट आईडी जनरेट करने का विकल्प होता है
जो फ़ॉर्मैट से जुड़ी हमारी ज़रूरी शर्तों के मुताबिक हो. इससे, अपने लोकल डेटाबेस में मौजूद इकाइयों को Google Calendar के इवेंट के साथ सिंक किया जा सकता है. यह डुप्लीकेट इवेंट बनाने से भी रोकता है. ऐसा तब होता है, जब Calendar के बैकएंड में इवेंट बनाने की प्रोसेस पूरी होने के बाद, किसी भी समय यह प्रोसेस पूरी न हो पाए. अगर कोई इवेंट आईडी नहीं दिया जाता है, तो सर्वर आपके लिए एक आईडी जनरेट करता है. ज़्यादा जानकारी के लिए, इवेंट आईडी का रेफ़रंस देखें.
- अतिथि
आपका बनाया गया इवेंट,
उन लोगों को शामिल किया जा सकता है जिन्हें आपने एक ही इवेंट आईडी के साथ शामिल किया है. अगर आपने शामिल करने के अनुरोध में
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)
Java
// 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());
JavaScript
// 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);
});
PHP
$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);
Python
# 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': 'lpage@example.com'},
{'email': 'sbrin@example.com'},
],
'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'))
Ruby
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: 'lpage@example.com'
),
Google::Apis::CalendarV3::EventAttendee.new(
email: 'sbrin@example.com'
)
],
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}"
इवेंट में Drive के अटैचमेंट जोड़ना
अपने कैलेंडर इवेंट में Google Drive की फ़ाइलें अटैच की जा सकती हैं. जैसे, Docs में मौजूद मीटिंग के नोट, Sheets में मौजूद बजट, Slides में मौजूद प्रज़ेंटेशन या Google Drive की कोई भी काम की फ़ाइल. events.insert()
या इसके बाद के वर्शन में इवेंट बनाते समय, अटैचमेंट जोड़ा जा सकता है. इसके अलावा, events.patch()
जैसे अपडेट के दौरान भी अटैचमेंट जोड़ा जा सकता है
Google Drive की किसी फ़ाइल को इवेंट में अटैच करने के दो चरण हैं:
-
Drive API फ़ाइलों के संसाधन से फ़ाइल
alternateLink
का यूआरएल,title
, औरmimeType
पाएं. आम तौर पर,files.get()
तरीके का इस्तेमाल करके ऐसा किया जाता है. - अनुरोध के मुख्य हिस्से में सेट किए गए
attachments
फ़ील्ड औरsupportsAttachments
पैरामीटर कोtrue
पर सेट करके, कोई इवेंट बनाएं या अपडेट करें.
यहां दिए गए कोड के उदाहरण में, किसी मौजूदा इवेंट को अपडेट करके अटैचमेंट जोड़ने का तरीका बताया गया है:
Java
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();
}
PHP
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
));
}
Python
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
के तीन टाइप इस्तेमाल किए जा सकते हैं, जैसा कि conferenceData.conferenceSolution.key.type
से पता चलता है:
- Hangouts for consumers (
eventHangout
) - उपयोगकर्ताओं के लिए Hangouts का क्लासिक वर्शन
(अब काम नहीं करता;
eventNamedHangout
) - Google Meet (
hangoutsMeet
)
किसी उपयोगकर्ता के किसी भी कैलेंडर के लिए, कौनसा कॉन्फ़्रेंस टाइप काम करता है, यह जानने के लिए calendars
और calendarList
कलेक्शन में conferenceProperties.allowedConferenceSolutionTypes
देखें. settings
कलेक्शन में autoAddHangouts
सेटिंग की जांच करके, यह भी पता लगाया जा सकता है कि उपयोगकर्ता अपने सभी नए इवेंट के लिए Hangouts बनाना चाहता है या नहीं.
type
के अलावा, conferenceSolution
में name
और iconUri
फ़ील्ड भी होते हैं. इनका इस्तेमाल, कॉन्फ़्रेंस के समाधान को दिखाने के लिए किया जा सकता है. इसका उदाहरण यहां दिया गया है:
JavaScript
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
, कोई भी रैंडम string
हो सकता है. कॉन्फ़्रेंस, एक साथ नहीं बनते. हालांकि, अपने अनुरोध की स्थिति कभी भी देखी जा सकती है, ताकि आप अपने उपयोगकर्ताओं को बता सकें कि क्या हो रहा है.
उदाहरण के लिए, किसी मौजूदा इवेंट के लिए कॉन्फ़्रेंस जनरेट करने का अनुरोध करने के लिए:
JavaScript
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
फ़ील्ड में यह जानकारी होती है कि आपके उपयोगकर्ताओं के लिए, डायल इन करने के लिए कौनसे वीडियो और फ़ोन यूआरआई उपलब्ध हैं.
अगर आपको एक ही कॉन्फ़्रेंस की जानकारी के साथ कई Calendar इवेंट शेड्यूल करने हैं, तो पूरे conferenceData
को एक इवेंट से दूसरे इवेंट में कॉपी किया जा सकता है.
कॉपी करने की सुविधा कुछ स्थितियों में काम आती है. उदाहरण के लिए, मान लें कि आपने एक ऐसा भर्ती ऐप्लिकेशन डेवलप किया है जो उम्मीदवार और इंटरव्यूअर के लिए अलग-अलग इवेंट सेट अप करता है. आपको इंटरव्यूअर की पहचान को सुरक्षित रखना है, लेकिन यह भी पक्का करना है कि सभी लोग एक ही कॉन्फ़्रेंस कॉल में शामिल हों.