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

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

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

ज़्यादा जानकारी के लिए, Google 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. उस Google Cloud प्रोजेक्ट का प्रोजेक्ट नंबर डालें जो Developer Preview Program में है और प्रोजेक्ट सेट करें पर क्लिक करें.
  4. कोड एडिटर पर वापस जाने के लिए, बाईं ओर मौजूद एडिटर चुनें.

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

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

  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. विंडो में सबसे नीचे दिखने वाले एक्ज़िक्यूशन लॉग में, स्क्रिप्ट की प्रोसेस के नतीजों की जांच की जा सकती है.