इवेंट बनाएं

मान लें कि एक ऐसा ऐप्लिकेशन है जो लोगों को हाइकिंग के सबसे अच्छे रास्ते ढूंढने में मदद करता है. हाइकिंग के प्लान को कैलेंडर इवेंट के तौर पर जोड़ने से, उपयोगकर्ताओं को अपने-आप व्यवस्थित रहने में काफ़ी मदद मिलती है. 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 के बैकएंड में कार्रवाई पूरी होने के बाद, किसी वजह से इवेंट नहीं बन पाता है, तो यह डुप्लीकेट इवेंट बनने से भी रोकता है. अगर कोई इवेंट आईडी नहीं दिया जाता है, तो सर्वर आपके लिए एक इवेंट आईडी जनरेट करता है. ज़्यादा जानकारी के लिए, इवेंट आईडी का रेफ़रंस देखें.
अतिथि
आपने जिस इवेंट को बनाया है वह इवेंट आईडी का इस्तेमाल करके शामिल किए गए सभी मेहमानों के मुख्य Google Calendar पर दिखता है. अगर आपने अपने अनुरोध में sendUpdates को "all" या "externalOnly" पर सेट किया है, तो इवेंट में शामिल होने वाले लोगों को आपके इवेंट के बारे में ईमेल से सूचना मिलेगी. ज़्यादा जानने के लिए, एक से ज़्यादा मेहमानों वाले इवेंट लेख पढ़ें.

यहां दिए गए उदाहरणों में, इवेंट बनाने और उसका मेटाडेटा सेट करने का तरीका बताया गया है:

ऐप पर जाएं

// Refer to the Go quickstart on how to setup the environment:
// https://developers.google.com/workspace/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/workspace/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/workspace/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/workspace/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/workspace/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 की फ़ाइल अटैच करने के दो तरीके हैं:

  1. Drive API Files संसाधन से फ़ाइल का alternateLink यूआरएल, title, और mimeType पाएं. आम तौर पर, ऐसा files.get() तरीके से किया जाता है.
  2. अनुरोध के मुख्य हिस्से में सेट किए गए 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 से दिखाया गया है:

  1. उपयोगकर्ताओं के लिए Hangouts (eventHangout)
  2. Google Workspace के उपयोगकर्ताओं के लिए Hangouts का क्लासिक वर्शन (अब उपलब्ध नहीं है; eventNamedHangout)
  3. 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 देना होगा. यह requestId कोई रैंडम string हो सकता है. कॉन्फ़्रेंस एसिंक्रोनस तरीके से बनाई जाती हैं. हालांकि, अपने अनुरोध की स्थिति को हमेशा देखा जा सकता है, ताकि उपयोगकर्ताओं को यह बताया जा सके कि क्या हो रहा है.

उदाहरण के लिए, किसी मौजूदा इवेंट के लिए कॉन्फ़्रेंस जनरेट करने का अनुरोध करने के लिए:

JavaScript

const eventPatch = {
  conferenceData: {
    createRequest: {requestId: "7qxalsvy0e"}
  }
};

gapi.client.calendar.events.patch({
  calendarId: "primary",
  eventId: "7cbh8rpc10lrc0ckih9tafss99",
  resource: eventPatch,
  sendUpdates: "all",
  conferenceDataVersion: 1
}).execute(function(event) {
  console.log("Conference created for event: %s", event.htmlLink);
});

इस कॉल के तुरंत जवाब में, पूरी जानकारी वाला conferenceData शामिल नहीं हो सकता. इसकी जानकारी status फ़ील्ड में pending स्टेटस कोड से मिलती है. कॉन्फ़्रेंस की जानकारी भरने के बाद, स्टेटस कोड success में बदल जाता है. entryPoints फ़ील्ड में यह जानकारी होती है कि आपके उपयोगकर्ताओं के लिए, डायल इन करने के लिए कौनसे वीडियो और फ़ोन यूआरआई उपलब्ध हैं.

अगर आपको एक ही कॉन्फ़्रेंस की जानकारी के साथ कई Calendar इवेंट शेड्यूल करने हैं, तो एक इवेंट से दूसरे इवेंट में पूरा conferenceData कॉपी करें.

कॉपी करने की सुविधा कुछ स्थितियों में काम आती है. उदाहरण के लिए, मान लें कि आपको भर्ती करने वाला एक ऐसा ऐप्लिकेशन बनाना है जो उम्मीदवार और इंटरव्यू लेने वाले व्यक्ति के लिए अलग-अलग इवेंट सेट अप करता है. आपको इंटरव्यू लेने वाले व्यक्ति की पहचान को सुरक्षित रखना है. हालांकि, आपको यह भी पक्का करना है कि सभी लोग एक ही कॉन्फ़्रेंस कॉल में शामिल हों.