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

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

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

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

Calendar में मौजूद स्थिति वाले इवेंट पढ़ना और उनकी सूची बनाना

Calendar API के Events रिसॉर्स में, Calendar के स्टेटस इवेंट पढ़े और उनकी सूची बनाई जा सकती है.

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

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

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

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

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

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

events.watch तरीके का इस्तेमाल करके, सदस्यता लेने के लिए कैलेंडर का 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 प्रोजेक्ट का प्रोजेक्ट नंबर डालें और प्रोजेक्ट सेट करें पर क्लिक करें.
  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. कोड एडिटर के ऊपर, ड्रॉप-डाउन मेन्यू से वह फ़ंक्शन चुनें जिसे चलाना है. इसके बाद, चालू करें पर क्लिक करें.
  2. पहली बार इस्तेमाल करने पर, यह आपको ऐक्सेस की अनुमति देने के लिए कहता है. Apps Script को अपना कैलेंडर ऐक्सेस करने की अनुमति दें.
  3. स्क्रिप्ट के एक्ज़ीक्यूशन के नतीजों की जांच, विंडो के सबसे नीचे दिखने वाले एक्ज़ीक्यूशन लॉग में की जा सकती है.