इवेंट बनाएं

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

अतिथि

आपका बनाया गया इवेंट, इसके सभी मुख्य Google 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 की फ़ाइल अटैच करने के दो हिस्से हैं:

  1. alternateLink फ़ाइल का यूआरएल, title, और mimeType को Drive API की फ़ाइलों के संसाधन से पाएं. आम तौर पर, इसका इस्तेमाल files.get() तरीके से किया जाता है.
  2. अनुरोध के मुख्य हिस्से में सेट किए गए attachments फ़ील्ड और true पर supportsAttachments पैरामीटर सेट करके, कोई इवेंट बनाएं या उसे अपडेट करें.

कोड के इस उदाहरण में, अटैचमेंट जोड़ने के लिए मौजूदा इवेंट को अपडेट करने का तरीका बताया गया है:

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);

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

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

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