फ़ोकस टाइम, अभी मैं छुट्टी पर हूं, और काम करने की जगह से जुड़े इवेंट मैनेज करना

इस पेज पर बताया गया है कि Google Calendar API का इस्तेमाल करके, ऐसे इवेंट कैसे बनाए जा सकते हैं जो Google Calendar के उपयोगकर्ताओं की स्थिति दिखाते हैं. स्टेटस इवेंट से पता चलता है कि उपयोगकर्ता कहां या क्या कर रहे हैं. इनमें यह जानकारी भी शामिल होती है कि वे फ़ोकस टाइम में हैं, छुट्टी पर हैं या किसी खास जगह से काम कर रहे हैं.

Google Calendar में उपयोगकर्ता, फ़ोकस टाइम, छुट्टी पर हैं, और काम करने की जगह वाले इवेंट बना सकते हैं. इन इवेंट की मदद से, वे अपने हिसाब से स्टेटस और जगह की जानकारी दे सकते हैं. ये सुविधाएं सिर्फ़ मुख्य कैलेंडर और Google Calendar का इस्तेमाल करने वाले कुछ लोगों के लिए उपलब्ध हैं.

ज़्यादा जानकारी के लिए, Google Calendar में फ़ोकस टाइम इस्तेमाल करना और काम करने की जगह की जानकारी की सेटिंग को चालू या बंद करना पर जाएं.

Calendar पर सेट की गई स्थिति के इवेंट पढ़ें और उनकी सूची बनाएं

Calendar API के Events संसाधन में, Calendar की स्थिति वाले इवेंट देखे जा सकते हैं और उनकी सूची बनाई जा सकती है.

स्टेटस इवेंट को पढ़ने के लिए, events.get तरीके का इस्तेमाल करें. इसमें इवेंट के eventId के बारे में जानकारी दें.

स्टेटस इवेंट की सूची बनाने के लिए, events.list तरीके का इस्तेमाल करें. इसके लिए, eventTypes फ़ील्ड में इनमें से एक या एक से ज़्यादा वैल्यू डालें:

  • 'focusTime'
  • 'outOfOffice'
  • 'workingLocation'

इसके बाद, दिखाए गए Event ऑब्जेक्ट में, यह जांच करें कि eventType फ़ील्ड में अनुरोध की गई वैल्यू है या नहीं. साथ ही, उपयोगकर्ता ने Google Calendar में जो स्थिति बनाई है उसकी जानकारी के लिए, उससे जुड़े फ़ील्ड पर जाएं:

स्टेटस इवेंट में हुए बदलावों के लिए सदस्यता लेना

Calendar API के Events संसाधन में, स्थिति वाले इवेंट में होने वाले बदलावों की सदस्यता ली जा सकती है.

events.watch तरीके का इस्तेमाल करें. इसके लिए, आपको Calendar के calendarId विकल्प के बारे में जानकारी देनी होगी. साथ ही, eventTypes फ़ील्ड में इनमें से एक या एक से ज़्यादा वैल्यू डालनी होगी:

  • 'focusTime'
  • 'outOfOffice'
  • 'workingLocation'

Calendar पर सेट की गई स्थिति वाले इवेंट बनाना और उन्हें अपडेट करना

स्टेटस इवेंट बनाने के लिए, आपको events.insert तरीके का इस्तेमाल करके Events रिसॉर्स का इंस्टेंस बनाना होता है, जिसमें इवेंट टाइप के लिए ज़रूरी फ़ील्ड सेट होते हैं.

अगर events.update तरीके का इस्तेमाल करके स्टेटस इवेंट को अपडेट किया जाता है, तो इवेंट में ज़रूरी फ़ील्ड मौजूद होने चाहिए.

फ़ोकस टाइम सेट करें

फ़ोकस टाइम इवेंट बनाने के लिए:

  • eventType को 'focusTime' पर सेट करें.
  • focusTimeProperties फ़ील्ड को शामिल करें.
  • transparency फ़ील्ड को 'opaque' पर सेट करें.
  • इवेंट के start और end फ़ील्ड को, तय समय वाले इवेंट के तौर पर सेट करें (शुरू और खत्म होने के समय के साथ).
    फ़ोकस टाइम, पूरे दिन वाले इवेंट नहीं हो सकते.

सुविधा की जानकारी के लिए, Google Calendar में फ़ोकस टाइम इस्तेमाल करना पर जाएं

'अभी मैं छुट्टी पर हूं' सेट करें

'अभी मैं छुट्टी पर हूं' इवेंट बनाने के लिए:

  • eventType को 'outOfOffice' पर सेट करें.
  • outOfOfficeProperties फ़ील्ड को शामिल करें.
  • transparency फ़ील्ड को 'opaque' पर सेट करें.
  • इवेंट के start और end फ़ील्ड को, तय समय वाले इवेंट के तौर पर सेट करें (शुरू और खत्म होने के समय के साथ).
    'अभी मैं छुट्टी पर हूं' इवेंट, पूरे दिन के इवेंट नहीं हो सकते.

सुविधा की जानकारी के लिए, दिखाएं कि आप छुट्टी पर हैं पर जाएं

काम करने की जगह सेट करें

काम करने की जगह का इवेंट बनाने के लिए:

  • eventType को 'workingLocation' पर सेट करें.
  • workingLocationProperties फ़ील्ड को शामिल करें.
  • visibility फ़ील्ड को 'public' पर सेट करें.
  • transparency फ़ील्ड को 'transparent' पर सेट करें.
  • इवेंट के start और end फ़ील्ड को, इनमें से किसी एक पर सेट करें:

    • तय समय पर होने वाला इवेंट (शुरू और खत्म होने के समय के साथ);
    • पूरे दिन का इवेंट (शुरू और खत्म होने की तारीखों के साथ), जो ठीक एक दिन के लिए है.

    काम करने की पूरे दिन की जगह के इवेंट, एक से ज़्यादा दिनों के नहीं हो सकते. हालांकि, तय समय वाले इवेंट के लिए बनाए जा सकते हैं.

नीचे दिए गए फ़ील्ड का इस्तेमाल करना ज़रूरी नहीं है. हालांकि, officeLocation को शामिल करते समय, सबसे अच्छे उपयोगकर्ता अनुभव के लिए इनका सुझाव दिया जाता है:

  • workingLocationProperties.officeLocation.buildingId: यह संगठन के संसाधन डेटाबेस में मौजूद buildingId से मेल खाना चाहिए. इससे उपयोगकर्ताओं को Calendar की सभी सुविधाओं का फ़ायदा मिलता है, जैसे कि मीटिंग रूम के सुझाव.
  • workingLocationProperties.officeLocation.label: यह लेबल, Calendar के वेब और मोबाइल क्लाइंट पर दिखता है. resources.buildings.list तरीके का इस्तेमाल करके, बिल्डिंग आईडी और बिल्डिंग लेबल को फ़ेच किया जा सकता है.

बैच एंडपॉइंट से, काम करने की जगह से जुड़े इवेंट नहीं बनाए जा सकते और न ही उन्हें अपडेट किया जा सकता है.

सुविधा की जानकारी के लिए, अपने काम के घंटे और जगह की जानकारी सेट करना पर जाएं और काम करने की जगह की जानकारी को उपयोगकर्ताओं के लिए चालू या बंद करना लेख पढ़ें

काम करने की जगह के ओवरलैप होने वाले इवेंट दिखाने का तरीका

उपयोगकर्ता के कैलेंडर में, काम करने की जगह से जुड़े एक से ज़्यादा इवेंट एक ही समय पर हो सकते हैं. इसका मतलब है कि किसी खास समय के लिए, काम करने की कई जगहें सेट की जा सकती हैं. ऐसी स्थितियों में, जब उपयोगकर्ता को सिर्फ़ एक जगह दिखाई जा सकती है, तो कई ऐप्लिकेशन में वह जगह एक जैसी दिखनी चाहिए. ऐसा करते समय, नीचे दिए गए दिशा-निर्देशों का पालन करके चुनें कि कौनसा इवेंट दिखाना है:

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

Google Apps Script में स्टेटस इवेंट बनाएं

Google Apps Script, JavaScript पर आधारित क्लाउड स्क्रिप्टिंग भाषा है. इसकी मदद से, ऐसे बिज़नेस ऐप्लिकेशन बनाए जा सकते हैं जो Google Workspace के साथ इंटिग्रेट किए जा सकते हैं. स्क्रिप्ट, ब्राउज़र-आधारित कोड एडिटर में बनाई जाती हैं और उन्हें Google के सर्वर पर सेव करके चलाया जाता है. Google Calendar API को अनुरोध भेजने के लिए Apps Script का इस्तेमाल शुरू करने के लिए, Google Apps Script का क्विकस्टार्ट भी देखें.

नीचे दिए गए निर्देशों में Google Apps Script में Google Calendar API को बेहतर सेवा के तौर पर इस्तेमाल करके, स्टेटस इवेंट मैनेज करने का तरीका बताया गया है. Google Calendar API के संसाधनों और तरीकों की पूरी सूची के लिए, रेफ़रंस दस्तावेज़ देखें.

स्क्रिप्ट बनाना और सेट अप करना

  1. script.google.com/create पर जाकर स्क्रिप्ट बनाएं.
  2. बाएं पैनल में सेवाएं के बगल में, सेवा जोड़ें पर क्लिक करें .
  3. Google Calendar API चुनें और जोड़ें पर क्लिक करें.
  4. चालू करने के बाद, एपीआई बाएं पैनल में दिखता है. एपीआई में उपलब्ध तरीकों और क्लास को एडिटर में Calendar कीवर्ड का इस्तेमाल करके शामिल किया जा सकता है.

(ज़रूरी नहीं) Google Cloud प्रोजेक्ट अपडेट करना

हर Google Apps Script प्रोजेक्ट में, उससे जुड़ा एक Google Cloud प्रोजेक्ट होता है. आपकी स्क्रिप्ट उस डिफ़ॉल्ट प्रोजेक्ट का इस्तेमाल कर सकती है जिसे Google Apps Script अपने-आप बनाता है. अगर आपको कोई कस्टम Google Cloud प्रोजेक्ट इस्तेमाल करना है, तो अपनी स्क्रिप्ट से जुड़े प्रोजेक्ट को अपडेट करने के लिए यह तरीका अपनाएं.

  1. एडिटर की बाईं ओर, प्रोजेक्ट सेटिंग पर क्लिक करें.
  2. Google Cloud Platform (GCP) प्रोजेक्ट में जाकर, प्रोजेक्ट बदलें पर क्लिक करें.
  3. Developer Preview Program में मौजूद Google Cloud प्रोजेक्ट का प्रोजेक्ट नंबर डालें और प्रोजेक्ट सेट करें पर क्लिक करें.
  4. कोड एडिटर पर वापस जाने के लिए, बाईं ओर मौजूद Editor चुनें.

स्क्रिप्ट में कोड जोड़ें

नीचे दिए गए कोड सैंपल में बताया गया है कि आपके मुख्य कैलेंडर पर कैसे स्टेटस इवेंट बनाए जाते हैं, उन्हें कैसे पढ़ा जाता है, और उनकी सूची कैसे बनाई जाती है.

  1. इसे कोड एडिटर में चिपकाएं.

    /** Creates a focus time event. */
    function createFocusTime() {
      const event = {
        start: { dateTime: '2023-11-14T10:00:00+01:00' },
        end: { dateTime: '2023-11-14T12:00:00+01:00' },
        eventType: 'focusTime',
        focusTimeProperties: {
          chatStatus: 'doNotDisturb',
          autoDeclineMode: 'declineOnlyNewConflictingInvitations',
          declineMessage: 'Declined because I am in focus time.',
        }
      }
      createEvent(event);
    }
    
    /** Creates an out of office event. */
    function createOutOfOffice() {
      const event = {
        start: { dateTime: '2023-11-15T10:00:00+01:00' },
        end: { dateTime: '2023-11-15T18:00:00+01:00' },
        eventType: 'outOfOffice',
        outOfOfficeProperties: {
          autoDeclineMode: 'declineOnlyNewConflictingInvitations',
          declineMessage: 'Declined because I am on vacation.',
        }
      }
      createEvent(event);
    }
    
    /** Creates a working location event. */
    function createWorkingLocation() {
      const event = {
        start: { date: "2023-06-01" },
        end: { date: "2023-06-02" },
        eventType: "workingLocation",
        visibility: "public",
        transparency: "transparent",
        workingLocationProperties: {
          type: 'customLocation',
          customLocation: { label: "a custom location" },
        }
      }
      createEvent(event);
    }
    
    /**
      * Creates a Calendar event.
      * See https://developers.google.com/calendar/api/v3/reference/events/insert
      */
    function createEvent(event) {
      const calendarId = 'primary';
    
      try {
        var response = Calendar.Events.insert(event, calendarId);
        var event = (response.eventType === 'workingLocation') ? parseWorkingLocation(response) : response;
        console.log(event);
      } catch (exception) {
        console.log(exception.message);
      }
    }
    
    /**
      * Reads the event with the given eventId.
      * See https://developers.google.com/calendar/api/v3/reference/events/get
      */
    function readEvent() {
      const calendarId = 'primary';
    
      // Replace with a valid eventId.
      const eventId = "sample-event-id";
    
      try {
        var response = Calendar.Events.get(calendarId, eventId);
        var event = (response.eventType === 'workingLocation') ? parseWorkingLocation(response) : response;
        console.log(event);
      } catch (exception) {
        console.log(exception.message);
      }
    }
    
    /** Lists focus time events. */
    function listFocusTimes() {
      listEvents('focusTime');
    }
    
    /** Lists out of office events. */
    function listOutOfOffices() {
      listEvents('outOfOffice');
    }
    
    /** Lists working location events. */
    function listWorkingLocations() {
      listEvents('workingLocation');
    }
    
    /**
      * Lists events with the given event type.
      * See https://developers.google.com/calendar/api/v3/reference/events/list
      */
    function listEvents(eventType = 'default') {
      const calendarId = 'primary'
    
      // Query parameters for the list request.
      const optionalArgs = {
        eventTypes: [eventType],
        showDeleted: false,
        singleEvents: true,
        timeMax: '2023-04-01T00:00:00+01:00',
        timeMin: '2023-03-27T00:00:00+01:00',
      }
      try {
        var response = Calendar.Events.list(calendarId, optionalArgs);
        response.items.forEach(event =>
          console.log(eventType === 'workingLocation' ? parseWorkingLocation(event) : event));
      } catch (exception) {
        console.log(exception.message);
      }
    }
    
    /**
      * Parses working location properties of an event into a string.
      * See https://developers.google.com/calendar/api/v3/reference/events#resource
      */
    function parseWorkingLocation(event) {
      if (event.eventType != "workingLocation") {
        throw new Error("'" + event.summary + "' is not a working location event.");
      }
    
      var location = 'No Location';
      const workingLocation = event.workingLocationProperties;
      if (workingLocation) {
        if (workingLocation.type === 'homeOffice') {
          location = 'Home';
        }
        if (workingLocation.type === 'officeLocation') {
          location = workingLocation.officeLocation.label;
        }
        if (workingLocation.type === 'customLocation') {
          location = workingLocation.customLocation.label;
        }
      }
      return `${event.start.date}: ${location}`;
    }
    

कोड सैंपल चलाएं

  1. कोड एडिटर के ऊपर, ड्रॉप-डाउन मेन्यू से चलाने के लिए फ़ंक्शन चुनें और Run पर क्लिक करें.
  2. पहली बार एक्ज़ीक्यूट करने पर, आपसे ऐक्सेस की अनुमति देने के लिए कहा जाता है. देखें और Apps Script को अपना कैलेंडर ऐक्सेस करने की अनुमति दें.
  3. विंडो के नीचे दिखने वाले एक्ज़ीक्यूशन लॉग में, स्क्रिप्ट चलाने के नतीजों की जांच की जा सकती है.