Google Chat ऐप्लिकेशन के तौर पर पुष्टि करें

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

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

  • spaces.messages.create के साथ Google Chat में मैसेज भेजें:
    • लंबे समय तक चलने वाले बैकग्राउंड का काम खत्म होने पर उपयोगकर्ताओं को सूचना दें.
    • सर्वर ऑफ़लाइन हो जाने पर उपयोगकर्ताओं को सूचना दें.
    • ग्राहक सहायता करने वाले किसी व्यक्ति को, ग्राहकों के नए मामले देखने के लिए कहें.
  • 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 या इससे नया वर्शन
  • pip पैकेज मैनेजमेंट टूल

Node.js

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

    npm init
    

Apps Script

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

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

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

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

Google Cloud कंसोल

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

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

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

gcloud सीएलआई

  1. सेवा खाता बनाएं:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. ज़रूरी नहीं: अपने Google Cloud प्रोजेक्ट के संसाधनों का ऐक्सेस देने के लिए, अपने सेवा खाते के लिए भूमिकाएं असाइन करें. ज़्यादा जानकारी के लिए, संसाधनों का ऐक्सेस देना, बदलना, और रद्द करना देखें.

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

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

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

  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

Node.js

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

npm install "@googleapis/chat"

Apps Script

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

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

यह नमूना Google Chat API को कॉल करने के लिए बेहतर चैट सेवा का इस्तेमाल करता है. अपने Apps Script प्रोजेक्ट के लिए सेवा चालू करने के लिए:

  1. बाईं ओर मौजूद, एडिटर पर क्लिक करें.
  2. बाईं ओर, सेवाएं के बगल में, सेवा जोड़ें पर क्लिक करें .
  3. Google Chat API चुनें.
  4. वर्शन में, v1 चुनें.
  5. जोड़ें पर क्लिक करें.

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

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

यह कोड, सेवा खाते का इस्तेमाल करके 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 apiclient.discovery import build
    from google.oauth2 import service_account
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = service_account.Credentials.from_service_account_file(
        'credentials.json', scopes=SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', credentials=CREDENTIALS)
    
    # 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 टोकन पाने के बाहरी अनुरोध करने के लिए, ज़रूरी OAuth स्कोप जोड़ें:

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

    // Specify the contents of the file credentials.json.
    const CREDENTIALS = CREDENTIALS;
    
    const SCOPE = 'https://www.googleapis.com/auth/chat.bot';
    
    // 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'
    
    /**
     * Authenticates with Chat API via app credentials, then posts a message.
     */
    function createMessageWithAppCredentials() {
      try {
        const service = getService_();
        if (!service.hasAccess()) {
          console.error(service.getLastError());
          return;
        }
    
        // Specify the message to create.
        const message = {'text': 'Hello world!'};
    
        // Call Chat API with a service account to create a message.
        const result = Chat.Spaces.Messages.create(
            message,
            PARENT,
            {},
            // Authenticate with the service account token.
            {'Authorization': 'Bearer ' + service.getAccessToken()});
    
        // Log details about the created message.
        console.log(result);
    
      } catch (err) {
        // TODO (developer) - Handle exception.
        console.log('Failed to create message with error %s', err.message);
      }
    }
    
    /**
     * 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

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

आपकी स्क्रिप्ट 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 और क्या-क्या कर सकता है.