Google Chat ऐप्लिकेशन की तरह पुष्टि करना

इस गाइड में, Chat ऐप्लिकेशन की ओर से Google Chat API को ऐक्सेस करने के लिए, सेवा खाते को सेट अप और इस्तेमाल करने का तरीका बताया गया है. सबसे पहले, आपको सेवा खाता बनाने का तरीका बताया गया है. इसके बाद, यहां बताया जाता है कि स्क्रिप्ट लिखने का तरीका क्या है, जो Chat API से पुष्टि करने के लिए सेवा खाते का इस्तेमाल करता है और चैट स्पेस में मैसेज पोस्ट करता है.

जब Chat ऐप्लिकेशन, एसिंक्रोनस तरीके से Google Chat API को कॉल करते हैं, तो पुष्टि करने के लिए चैट ऐप्लिकेशन सेवा खातों का इस्तेमाल कर सकते हैं. इससे वे:

  • Google Chat में spaces.messages.create इनसे मैसेज भेजें:
    • लंबे समय से चल रहा बैकग्राउंड टास्क खत्म होने पर उपयोगकर्ताओं को सूचना दें.
    • उपयोगकर्ताओं को सूचना दें कि सर्वर ऑफ़लाइन हो गया है.
    • ग्राहक सहायता करने वाले व्यक्ति से कहें कि वह नए ग्राहकों से जुड़े मामले का इस्तेमाल करे.
  • spaces.messages.update के साथ पहले भेजे गए मैसेज को इनमें अपडेट करें:
    • चालू कार्रवाई की स्थिति बदलें.
    • जिस व्यक्ति को टास्क असाइन किया गया है या उसे पूरा करने की तारीख अपडेट की जा सकती है.
  • spaces.members.list वाले स्पेस के उपयोगकर्ताओं की सूची बनाएं, ताकि:
    • देखें कि स्पेस में कौन-कौन शामिल है.
    • पुष्टि करें कि स्पेस की सदस्यता में, टीम के सभी सदस्य शामिल हैं.

किसी सेवा खाते से पुष्टि करने के बाद, चैट स्पेस में उससे जुड़ी कार्रवाइयां करने या उसका डेटा पाने के लिए, चैट ऐप्लिकेशन के पास स्पेस की सदस्यता होनी चाहिए. जैसे, किसी स्पेस के सदस्यों को सूची में जोड़ने या स्पेस में मैसेज बनाने के लिए, Chat ऐप्लिकेशन का उस स्पेस का सदस्य होना ज़रूरी है.

अगर आपके Chat ऐप्लिकेशन को उपयोगकर्ता का डेटा ऐक्सेस करने या उसकी ओर से कार्रवाई करने की ज़रूरत है, तो इसके बजाय उपयोगकर्ता के तौर पर पुष्टि करें.

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

इस बारे में ज़्यादा जानने के लिए कि Chat ऐप्लिकेशन को कब पुष्टि करना ज़रूरी है और किस तरह की पुष्टि करनी चाहिए, Chat API के लिए पुष्टि करने और अनुमति देने से जुड़ी खास जानकारी में जाकर पुष्टि करने के ज़रूरी तरीके देखें.

ज़रूरी शर्तें

इस गाइड में दिए गए उदाहरण को चलाने के लिए, आपके पास नीचे दी गई शर्तें होनी चाहिए:

इसके अलावा, आपको किसी खास भाषा के लिए, यहां दी गई ज़रूरी शर्तें पूरी करनी होंगी:

Java

  • JDK 1.7 या उससे ज़्यादा
  • Maven पैकेज मैनेजमेंट टूल
  • एक इनिशलाइज़ किया गया Maven प्रोजेक्ट. नया प्रोजेक्ट शुरू करने के लिए, अपने कमांड-लाइन इंटरफ़ेस में नीचे दिए गए कमांड को चलाएं:

    mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    

Python

  • Python 3.6 या इसके बाद का वर्शन
  • पीआईपी पैकेज मैनेजमेंट टूल

Node.js

  • Node.js का इस्तेमाल करें
  • npm पैकेज मैनेजमेंट टूल
  • शुरू किया गया Node.js प्रोजेक्ट. नया प्रोजेक्ट शुरू करने के लिए, नया फ़ोल्डर बनाएं और उस पर स्विच करें. इसके बाद, अपने कमांड-लाइन इंटरफ़ेस में इस कमांड को चलाएं:

    npm init
    

Apps Script

पहला चरण: Google Cloud Console में सेवा खाता बनाना

ऐसा सेवा खाता बनाएं जिसका इस्तेमाल आपका Chat ऐप्लिकेशन, Google API को ऐक्सेस करने के लिए कर सके.

सेवा खाता बनाना

सेवा खाता बनाने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, मेन्यू > IAM और एडमिन > सेवा खाते पर जाएं.

    सेवा खातों पर जाएं

  2. सेवा खाता बनाएं पर क्लिक करें.
  3. सेवा खाते की जानकारी भरें. इसके बाद, बनाएं और जारी रखें पर क्लिक करें.
  4. ज़रूरी नहीं: अपने Google Cloud प्रोजेक्ट के संसाधनों का ऐक्सेस देने के लिए, अपने सेवा खाते में भूमिकाएं असाइन करें. ज़्यादा जानकारी के लिए, संसाधनों का ऐक्सेस देना, बदलना, और वापस लेना पर जाएं.
  5. जारी रखें पर क्लिक करें.
  6. ज़रूरी नहीं: ऐसे उपयोगकर्ताओं या ग्रुप के नाम डालें जो इस सेवा खाते से कार्रवाइयां कर सकते हैं. ज़्यादा जानकारी के लिए, सेवा खाते के डुप्लीकेट को मैनेज करना लेख पढ़ें.
  7. हो गया पर क्लिक करें. सेवा खाते के ईमेल पते को नोट कर लें.

सेवा खाता, सेवा खाते के पेज पर दिखता है. इसके बाद, सेवा खाते के लिए एक निजी कुंजी बनाएं.

निजी कुंजी बनाएं

सेवा खाते के लिए निजी कुंजी बनाने और डाउनलोड करने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, मेन्यू > IAM और एडमिन > सेवा खाते पर जाएं.

    सेवा खातों पर जाएं

  2. अपना सेवा खाता चुनें.
  3. कुंजियां > कुंजी जोड़ें > नई कुंजी बनाएं पर क्लिक करें.
  4. JSON चुनें. इसके बाद, बनाएं पर क्लिक करें.

    आपकी नई सार्वजनिक/निजी कुंजी का जोड़ा जनरेट होता है और आपकी मशीन पर नई फ़ाइल के तौर पर डाउनलोड होता है. डाउनलोड की गई JSON फ़ाइल को अपनी वर्क डायरेक्ट्री में credentials.json के तौर पर सेव करें. इस फ़ाइल के लिए, इस पासकोड की कोई कॉपी मौजूद नहीं है. अपनी कुंजी को सुरक्षित तरीके से सेव करने के तरीके के बारे में जानकारी के लिए, सेवा खाता कुंजियों को मैनेज करना देखें.

  5. बंद करें पर क्‍लिक करें.

सेवा खातों के बारे में ज़्यादा जानकारी के लिए, Google Cloud IAM दस्तावेज़ में सेवा खाते देखें.

दूसरा चरण: Google की क्लाइंट लाइब्रेरी और दूसरी डिपेंडेंसी इंस्टॉल करें

प्रोजेक्ट के लिए ज़रूरी Google क्लाइंट लाइब्रेरी और अन्य डिपेंडेंसी इंस्टॉल करें.

Java

अपने Maven प्रोजेक्ट में Google क्लाइंट लाइब्रेरी और दूसरी ज़रूरी डिपेंडेंसी जोड़ने के लिए, अपने प्रोजेक्ट की डायरेक्ट्री में pom.xml फ़ाइल में बदलाव करें और नीचे दी गई डिपेंडेंसी जोड़ें:

<dependencies>
  <!-- ... existing dependencies ... -->
  <dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-chat</artifactId>
    <version>v1-rev20230905-2.0.0</version>
  </dependency>
  <dependency>
    <groupId>com.google.auth</groupId>
    <artifactId>google-auth-library-oauth2-http</artifactId>
    <version>1.19.0</version>
  </dependency>
  <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.10.1</version>
  </dependency>
</dependencies>

Python

अगर आपने पहले से Python के लिए Google क्लाइंट लाइब्रेरी इंस्टॉल नहीं की है, तो अपने कमांड-लाइन इंटरफ़ेस में इस कमांड को चलाएं:

pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib oauth2client

Node.js

अपने Node.js प्रोजेक्ट में Google क्लाइंट लाइब्रेरी जोड़ने के लिए, अपने प्रोजेक्ट की डायरेक्ट्री में स्विच करें और अपने कमांड-लाइन इंटरफ़ेस में इस कमांड को चलाएं:

npm install "@googleapis/chat"

Apps Script

यह सैंपल, Apps Script लाइब्रेरी के लिए OAuth2 का इस्तेमाल करता है, ताकि सेवा खाते की पुष्टि करने के लिए, JWT टोकन जनरेट किया जा सके. लाइब्रेरी को अपने Apps Script प्रोजेक्ट में जोड़ने के लिए:

  1. बाईं ओर, एडिटर पर क्लिक करें.
  2. बाईं ओर, लाइब्रेरी के बगल में, लाइब्रेरी जोड़ें पर क्लिक करें.
  3. स्क्रिप्ट आईडी 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF डालें.
  4. लुक अप पर क्लिक करें. इसके बाद, जोड़ें पर क्लिक करें.

हमारी क्लाइंट लाइब्रेरी में काम करने वाली किसी भी भाषा का इस्तेमाल किया जा सकता है.

तीसरा चरण: कोई स्क्रिप्ट लिखें जो Chat API की मदद से पुष्टि करने के लिए, सेवा खाते का इस्तेमाल करती हो

नीचे दिया गया कोड, सेवा खाते का इस्तेमाल करके Chat API की पुष्टि करता है और चैट स्पेस में मैसेज पोस्ट करता है:

Java

  1. अपने प्रोजेक्ट की डायरेक्ट्री में, src/main/java/com/google/chat/app/authsample/App.java फ़ाइल खोलें.
  2. App.java में मौजूद कॉन्टेंट को इस कोड से बदलें:

    package com.google.chat.app.authsample;
    
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.HttpRequestInitializer;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.services.chat.v1.HangoutsChat;
    import com.google.api.services.chat.v1.model.Message;
    import com.google.auth.http.HttpCredentialsAdapter;
    import com.google.auth.oauth2.GoogleCredentials;
    
    /**
     * Authenticates with Chat API via service account credentials,
     * then creates a Chat message.
     */
    public class App {
        // Specify required scopes.
        private static final String CHAT_SCOPE = "https://www.googleapis.com/auth/chat.bot";
    
        // Specify service account details.
        private static final String PRIVATE_KEY_RESOURCE_URI = "/credentials.json";
    
        public static void main( String[] args ) {
            try {
                // Run app.
                Message response = App.createChatMessage();
                // Print details about the created message.
                System.out.println(response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private static Message createChatMessage() throws Exception {
            // Build the Chat API client and authenticate with the service account.
            GoogleCredentials credentials = GoogleCredentials.fromStream(
                App.class.getResourceAsStream(PRIVATE_KEY_RESOURCE_URI))
                .createScoped(CHAT_SCOPE);
            HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials);
            HangoutsChat chatService = new HangoutsChat.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                requestInitializer)
                .setApplicationName("auth-sample-app")
                .build();
    
            // The space to create the message in.
            //
            // Replace SPACE_NAME with a space name.
            // Obtain the space name from the spaces resource of Chat API,
            // or from a space's URL.
            String spaceName = "spaces/SPACE_NAME";
    
            // Create a Chat message.
            Message message = new Message().setText("Hello, world!");
            return chatService.spaces().messages().create(spaceName, message).execute();
        }
    }
    
  3. कोड में, SPACE_NAME की जगह स्पेस का नाम डालें. स्पेस का नाम पाने के लिए, Chat API में spaces.list तरीके का इस्तेमाल करें या स्पेस के यूआरएल का इस्तेमाल करें.

  4. अपने प्रोजेक्ट की डायरेक्ट्री में, resources नाम की नई सबडायरेक्ट्री बनाएं.

  5. पक्का करें कि आपके सेवा खाते की निजी कुंजी फ़ाइल का नाम credentials.json हो. साथ ही, उसे resources सबडायरेक्ट्री में कॉपी करें.

  6. निजी कुंजी फ़ाइल को प्रोजेक्ट पैकेज में शामिल करने के लिए Maven को कॉन्फ़िगर करने के लिए, अपने प्रोजेक्ट की डायरेक्ट्री में pom.xml फ़ाइल में बदलाव करें. इसके बाद, <build> सेक्शन में यह कॉन्फ़िगरेशन जोड़ें:

    <build>
      <!-- ... existing configurations ... -->
      <resources>
        <resource>
          <directory>resources</directory>
        </resource>
      </resources>
    </build>
    
  7. प्रोजेक्ट पैकेज में डिपेंडेंसी शामिल करने और अपने ऐप्लिकेशन की मेन क्लास को एक्ज़ीक्यूट करने के लिए, Maven को कॉन्फ़िगर करने के लिए, अपने प्रोजेक्ट की डायरेक्ट्री की pom.xml फ़ाइल में बदलाव करें. इसके बाद, यहां दिया गया कॉन्फ़िगरेशन <plugins> सेक्शन में जोड़ें:

    <plugins>
      <!-- ... existing configurations ... -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.google.chat.app.authsample.App</mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
    

Python

  1. अपनी वर्क डायरेक्ट्री में, chat_app_auth.py नाम की फ़ाइल बनाएं.
  2. chat_app_auth.py में यह कोड शामिल करें:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
        'credentials.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Create a Chat message.
    result = chat.spaces().messages().create(
    
        # The space to create the message in.
        #
        # Replace SPACE_NAME with a space name.
        # Obtain the space name from the spaces resource of Chat API,
        # or from a space's URL.
        parent='spaces/SPACE_NAME',
    
        # The message to create.
        body={'text': 'Hello, world!'}
    
    ).execute()
    
    # Prints details about the created message.
    print(result)
    
  3. कोड में, SPACE_NAME की जगह स्पेस का नाम डालें. स्पेस का नाम पाने के लिए, Chat API में spaces.list तरीके का इस्तेमाल करें या स्पेस के यूआरएल का इस्तेमाल करें. पक्का करें कि आपके सेवा खाते की निजी कुंजी फ़ाइल का नाम credentials.json हो.

Node.js

  1. अपने प्रोजेक्ट की डायरेक्ट्री में, chat_app_auth.js नाम की फ़ाइल बनाएं.
  2. chat_app_auth.js में यह कोड शामिल करें:

    const chat = require('@googleapis/chat');
    
    async function createMessage() {
      const auth = new chat.auth.GoogleAuth({
    
        // Specify service account details.
        keyFilename: 'credentials.json',
    
        // Specify required scopes.
        scopes: ['https://www.googleapis.com/auth/chat.bot']
    
      });
      const authClient = await auth.getClient();
    
      // Create the Chat API client and authenticate with the service account.
      const chatClient = await chat.chat({
        version: 'v1',
        auth: authClient
      });
    
      // Create a Chat message.
      const result = await chatClient.spaces.messages.create({
    
        // The space to create the message in.
        //
        // Replace SPACE_NAME with a space name.
        // Obtain the space name from the spaces resource of Chat API,
        // or from a space's URL.
        parent: 'spaces/SPACE_NAME',
    
        // The message to create.
        requestBody: { 'text': 'Hello, world!' }
    
      });
      return result;
    }
    
    // Execute function then print details about the created message.
    createMessage().then(console.log);
    
  3. कोड में, SPACE_NAME की जगह स्पेस का नाम डालें. स्पेस का नाम पाने के लिए, Chat API में spaces.list तरीके का इस्तेमाल करें या स्पेस के यूआरएल का इस्तेमाल करें. पक्का करें कि आपके सेवा खाते की निजी कुंजी फ़ाइल का नाम credentials.json हो.

Apps Script

  1. Apps Script एडिटर में, appsscript.json फ़ाइल में बदलाव करें और एपीआई को कॉल करने के लिए, ज़रूरी OAuth स्कोप जोड़ें:

      "oauthScopes": [
        "https://www.googleapis.com/auth/chat.messages.create",
        "https://www.googleapis.com/auth/script.external_request"
      ]
    
  2. नीचे दिए गए कोड को अपने Apps Script प्रोजेक्ट में ChatAppAuth.gs नाम की फ़ाइल में सेव करें:

    const CREDENTIALS = CREDENTIALS;
    
    const SCOPE = 'https://www.googleapis.com/auth/chat.bot';
    
    /**
     * Authenticates with Chat API via app credentials, then posts a message.
     */
    function createMessage() {
      const service = getService_();
      if (!service.hasAccess()) {
        console.error(service.getLastError());
        return;
      }
    
      // The space to create the message in.
      //
      // Replace SPACE_NAME with a space name.
      // Obtain the space name from the spaces resource of Chat API,
      // or from a space's URL.
      const parent = 'spaces/SPACE_NAME';
    
      // Call the Chat API to create a message.
      const result = UrlFetchApp.fetch(`https://chat.googleapis.com/v1/${parent}/messages`,
        {
          method: 'post',
          contentType: 'application/json',
          // Authenticate with the service account token.
          headers: { 'Authorization': 'Bearer ' + service.getAccessToken() },
          // The message to create.
          payload: JSON.stringify({ 'text': 'Hello, world!' })
        });
    
      // Log details about the created message.
      console.log(result.getContentText());
    }
    
    /**
     * Configures the OAuth library to authenticate with the service account.
     */
    function getService_() {
      return OAuth2.createService(CREDENTIALS.client_email)
          .setTokenUrl('https://oauth2.googleapis.com/token')
          .setPrivateKey(CREDENTIALS.private_key)
          .setIssuer(CREDENTIALS.client_email)
          .setSubject(CREDENTIALS.client_email)
          .setScope(SCOPE)
          .setPropertyStore(PropertiesService.getScriptProperties());
    }
    
  3. कोड में, CREDENTIALS को credentials.json फ़ाइल के कॉन्टेंट से बदलें.

  4. कोड में, SPACE_NAME की जगह स्पेस का नाम डालें. स्पेस का नाम पाने के लिए, Chat API में spaces.list तरीके का इस्तेमाल करें या स्पेस के यूआरएल का इस्तेमाल करें.

चौथा चरण: पूरा उदाहरण चलाएं

अपनी वर्क डायरेक्ट्री में, सैंपल बनाएं और चलाएं:

Java

mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar

Python

python3 chat_app_auth.py

Node.js

node chat_app_auth.js

Apps Script

ChatAppAuth.gs फ़ाइल को Apps Script एडिटर में खोलें और चलाएं पर क्लिक करें.

आपकी स्क्रिप्ट Chat API को पुष्टि किया गया एक अनुरोध भेजती है. इस अनुरोध का जवाब देने के लिए, चैट स्पेस में Chat ऐप्लिकेशन के तौर पर मैसेज पोस्ट किया जाता है.

उदाहरण से जुड़ी समस्या हल करना

इस सेक्शन में कुछ सामान्य समस्याओं के बारे में बताया गया है जो इस सैंपल को चलाने में आ सकती हैं.

आपको इस ऐप्लिकेशन का इस्तेमाल करने की अनुमति नहीं है

स्क्रिप्ट चलाते समय, आपको इस तरह की गड़बड़ी मिल सकती है:

<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}/messages?alt=json returned "You are not permitted to use this app". Details: "You are not permitted to use this app">

गड़बड़ी के इस मैसेज का मतलब है कि Chat ऐप्लिकेशन को किसी खास चैट स्पेस में चैट मैसेज बनाने की अनुमति नहीं है.

गड़बड़ी को ठीक करने के लिए, स्क्रिप्ट में दिए गए चैट स्पेस में Chat ऐप्लिकेशन जोड़ें.

Chat API और क्या-क्या कर सकता है, यह जानने के लिए Chat API रेफ़रंस दस्तावेज़ देखें.