इवेंट बनाएं

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

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

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