אימות והרשאה כמשתמש ב-Google Chat

במדריך הזה מוסבר איך משתמשים ב-OAuth 2.0 עם פרטי הכניסה של המשתמשים ל-Google כדי לגשת ל-Chat API. אימות והרשאה באמצעות פרטי כניסה של משתמשים מאפשרים לאפליקציות צ'אט לגשת לנתוני המשתמשים ולבצע פעולות בשם המשתמש המאומת. כשמבצעים אימות מטעם משתמש, לאפליקציה יש את אותן ההרשאות שיש למשתמש הזה, והיא יכולה לבצע פעולות כאילו המשתמש הזה ביצע אותן.

אחרי אימות והרשאה של קריאת API באמצעות פרטי כניסה של משתמש, אפליקציות Chat יכולות לבצע את הפעולות הבאות:

כשאפליקציה מבצעת פעולה עם אימות משתמש (למשל, יצירת מרחב משותף), ב-Google Chat מוצגת הודעת שיוך שמציינת למשתמשים את שם האפליקציה שביצעה את הפעולה בשם המשתמש שהעניק לה הרשאה.

אפליקציית Google Chat יוצרת מרחב משותף למשתמש.
איור 1. הודעת השיוך שמוצגת ב-Google Chat כשאפליקציית Chat יוצרת מרחב משותף בשם משתמש.

למידע נוסף על המקרים שבהם נדרש אימות באפליקציות Chat ועל סוג האימות הנדרש, תוכלו לעיין בקטע סוגי האימות הנדרשים בסקירה הכללית על אימות והרשאה ב-Chat API.

אימות ומתן הרשאה כאדמינים ב-Google Workspace

בקטע הזה מוסבר איך אדמינים ב-Google Workspace Workspace יכולים לנהל אפליקציות ומרחבים ב-Google Chat בארגון שלהם באמצעות אימות משתמשים.

אימות והרשאה באמצעות הענקת גישה ברמת הדומיין

אם אתם אדמינים בדומיין, אתם יכולים להעניק הענקת גישה ברמת הדומיין כדי לאשר לחשבון השירות של האפליקציה לגשת לנתונים של המשתמשים שלכם בלי לדרוש מכל משתמש לתת הסכמה. אחרי שמגדירים הענקת גישה ברמת הדומיין, חשבון השירות יכול להתחזות לחשבון משתמש. אמנם חשבון השירות משמש לאימות, אבל הענקת גישה ברמת הדומיין היא התחזות למשתמש, ולכן היא נחשבת לאימות משתמש. אפשר להשתמש בהענקת גישה ברמת הדומיין בכל פונקציונליות שדורשת אימות משתמש.

אימות והרשאה באמצעות הרשאות אדמין

אם אתם אדמינים של דומיין או אדמינים שהוקצו לכם עם הרשאות אדמין, אתם יכולים לאמת ולאשר את הקריאות שלכם ל-Google Chat API באמצעות הרשאות אדמין. לשם כך, צריך להגדיר את השדה useAdminAccess בבקשות של השיטות הרלוונטיות. מידע נוסף זמין במאמרי העזרה של ה-API.

חשוב לדעת: כשאפליקציית Google Chat מבצעת פעולה עם הרשאות אדמין, מערכת Chat לא תודיע למשתמשים על שם אפליקציית Chat שביצעה את הפעולה או על שם האדמין שהעניק את ההרשאה, אלא רק על כך שהפעולה בוצעה על ידי האדמין של הארגון שלהם.

דרישות מוקדמות

Java

  • חשבון Google Workspace בתוכנית Business או Enterprise עם גישה ל-Google Chat.
  • יוצרים פרויקט ב-Google Cloud.
  • מפעילים ומגדירים את Google Chat API עם שם, סמל ותיאור לאפליקציית Chat.
  • 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

Node.js

Apps Script

שלב 1: מגדירים את מסך ההסכמה ל-OAuth, מציינים היקפי הרשאה ומרשמים את האפליקציה

כשמשתמשים ב-OAuth 2.0 לאישור, Google מציגה למשתמש מסך הסכמה שכולל סיכום של הפרויקט, המדיניות שלו והיקפי ההרשאה המבוקשים. הגדרת מסך ההסכמה ל-OAuth של האפליקציה מגדירה את התוכן ש-Google תציג למשתמשים ולבודקי האפליקציות, ומרשמת את האפליקציה כדי שתוכלו לפרסם אותה מאוחר יותר.

כל האפליקציות שמשתמשות ב-OAuth 2.0 מחייבות הגדרה של מסך הסכמה, אבל צריך לציין היקפים רק לאפליקציות שבהן משתמשים אנשים מחוץ לארגון שלכם ב-Google Workspace.

  1. במסוף Google Cloud, נכנסים לתפריט > APIs & Services > OAuth consent screen.

    מעבר למסך ההסכמה של OAuth

  2. בוחרים את סוג המשתמש באפליקציה ולוחצים על Create.

  3. ממלאים את טופס הרישום של האפליקציה ולוחצים על שמירה והמשך.

  4. לוחצים על הוספה או הסרה של היקפי הרשאות. מוסיפים ומאמתים את היקפי ההרשאה הנדרשים לאפליקציה, לוחצים על עדכון ואז על שמירה והמשך.

  5. מעיינים בסיכום של רישום האפליקציה. לוחצים על עריכה כדי לבצע שינויים, או על חזרה למרכז הבקרה.

שלב 2: יצירת פרטי כניסה של מזהה לקוח ב-OAuth במסוף Google Cloud

כדי לבצע אימות כמשתמש קצה ולגשת לנתוני משתמשים באפליקציה, צריך ליצור מזהה לקוח OAuth 2.0 אחד או יותר. מזהה לקוח משמש לזיהוי אפליקציה אחת בשרתי OAuth של Google. אם האפליקציה פועלת בכמה פלטפורמות – כמו Android, iOS ואינטרנט – צריך ליצור מזהה לקוח נפרד לכל פלטפורמה.

יצירת פרטי כניסה של מזהה לקוח ב-OAuth

בוחרים את סוג האפליקציה כדי לקבל הוראות ספציפיות ליצירת מזהה לקוח OAuth:

אפליקציית אינטרנט

  1. במסוף Google Cloud, נכנסים לתפריט > APIs & Services > Credentials.

    כניסה לדף Credentials

  2. לוחצים על Create Credentials (יצירת פרטי כניסה) > OAuth client ID (מזהה לקוח OAuth).
  3. לוחצים על Application type > Web application.
  4. בשדה Name, מקלידים שם לפרטי הכניסה. השם הזה מוצג רק במסוף Google Cloud.
  5. מוסיפים מזהי URI מורשים שקשורים לאפליקציה:
    • אפליקציות בצד הלקוח (JavaScript) – בקטע מאותרי JavaScript, לוחצים על הוספת URI. לאחר מכן, מזינים URI לשימוש בבקשות מהדפדפן. הנתון הזה מזהה את הדומיינים שמהם האפליקציה יכולה לשלוח בקשות API לשרת OAuth 2.0.
    • אפליקציות בצד השרת (Java,‏ Python ועוד) – בקטע URIs מורשים להפניה אוטומטית לכתובת אחרת, לוחצים על Add URI (הוספת URI). לאחר מכן, מזינים URI של נקודת קצה שאליה שרת OAuth 2.0 יכול לשלוח תשובות.
  6. לוחצים על יצירה. המסך 'לקוח OAuth נוצר' מופיע, שבו מוצגים מזהה הלקוח החדש וסוד הלקוח.

    שימו לב למזהה הלקוח. לא משתמשים בסודות לקוח באפליקציות אינטרנט.

  7. לוחצים על אישור. פרטי הכניסה שנוצרו מופיעים בקטע מזהי לקוח OAuth 2.0.

Android

  1. במסוף Google Cloud, נכנסים לתפריט > APIs & Services > Credentials.

    כניסה לדף Credentials

  2. לוחצים על Create Credentials (יצירת פרטי כניסה) > OAuth client ID (מזהה לקוח OAuth).
  3. לוחצים על Application type (סוג האפליקציה) > Android.
  4. בשדה 'שם', מקלידים שם לפרטי הכניסה. השם הזה מוצג רק במסוף Google Cloud.
  5. בשדה Package name מזינים את שם החבילה מקובץ AndroidManifest.xml.
  6. בשדה 'טביעת אצבע לאישור SHA-1' מזינים את טביעת האצבע לאישור SHA-1 שנוצרה.
  7. לוחצים על יצירה. יופיע המסך של לקוח ה-OAuth שנוצר, שבו מוצג מזהה הלקוח החדש.
  8. לוחצים על אישור. פרטי הכניסה שנוצרו מופיעים בקטע 'מזהי לקוח של OAuth 2.0'.

iOS

  1. במסוף Google Cloud, נכנסים לתפריט > APIs & Services > Credentials.

    כניסה לדף Credentials

  2. לוחצים על Create Credentials (יצירת פרטי כניסה) > OAuth client ID (מזהה לקוח OAuth).
  3. לוחצים על Application type (סוג אפליקציה) > iOS.
  4. בשדה 'שם', מקלידים שם לפרטי הכניסה. השם הזה מוצג רק במסוף Google Cloud.
  5. בשדה 'מזהה החבילה', מזינים את מזהה החבילה כפי שרשום בקובץ Info.plist של האפליקציה.
  6. אופציונלי: אם האפליקציה מופיעה ב-Apple App Store, מזינים את מזהה App Store.
  7. אופציונלי: בשדה 'מזהה צוות', מזינים את המחרוזת הייחודית בת 10 התווים, שנוצרה על ידי Apple והוקצתה לצוות שלכם.
  8. לוחצים על יצירה. יופיע המסך שנוצר על ידי לקוח OAuth ומוצג בו מזהה הלקוח החדש וסוד הלקוח שלכם.
  9. לוחצים על אישור. פרטי הכניסה שנוצרו מופיעים בקטע 'מזהי לקוח של OAuth 2.0'.

אפליקציית Chrome

  1. במסוף Google Cloud, נכנסים לתפריט > APIs & Services > Credentials.

    כניסה לדף Credentials

  2. לוחצים על Create Credentials > OAuth client ID.
  3. לוחצים על סוג אפליקציה > אפליקציית Chrome.
  4. בשדה 'שם', מקלידים שם לפרטי הכניסה. השם הזה מוצג רק במסוף Google Cloud.
  5. בשדה 'מזהה אפליקציה', מזינים את מחרוזת המזהה הייחודית של האפליקציה (32 תווים). אפשר למצוא את ערך המזהה הזה בכתובת ה-URL של האפליקציה בחנות האינטרנט של Chrome ובמרכז השליטה למפתחים של חנות האינטרנט של Chrome.
  6. לוחצים על יצירה. יופיע המסך שנוצר על ידי לקוח OAuth ומוצג בו מזהה הלקוח החדש וסוד הלקוח שלכם.
  7. לוחצים על אישור. פרטי הכניסה שנוצרו מופיעים בקטע 'מזהי לקוח של OAuth 2.0'.

אפליקציה לשולחן העבודה

  1. במסוף Google Cloud, נכנסים לתפריט > APIs & Services > Credentials.

    כניסה לדף Credentials

  2. לוחצים על Create Credentials (יצירת פרטי כניסה) > OAuth client ID (מזהה לקוח OAuth).
  3. לוחצים על סוג אפליקציה > אפליקציית מחשב.
  4. בשדה Name, מקלידים שם לפרטי הכניסה. השם הזה מוצג רק במסוף Google Cloud.
  5. לוחצים על יצירה. המסך 'לקוח OAuth נוצר' מופיע, שבו מוצגים מזהה הלקוח החדש וסוד הלקוח.
  6. לוחצים על אישור. פרטי הכניסה שנוצרו מופיעים בקטע מזהי לקוח OAuth 2.0.

טלוויזיות והתקני קלט עם הגבלות

  1. במסוף Google Cloud, נכנסים לתפריט > APIs & Services > Credentials.

    כניסה לדף Credentials

  2. לוחצים על Create Credentials > OAuth client ID.
  3. לוחצים על סוג האפליקציה > טלוויזיות ומכשירי קלט מוגבלים.
  4. בשדה 'שם', מקלידים שם לפרטי הכניסה. השם הזה מוצג רק במסוף Google Cloud.
  5. לוחצים על יצירה. המסך 'לקוח OAuth נוצר' מופיע, שבו מוצגים מזהה הלקוח החדש וסוד הלקוח.
  6. לוחצים על אישור. פרטי הכניסה שנוצרו מופיעים בקטע 'מזהי לקוח של OAuth 2.0'.

Universal Windows Platform (UWP)‎

  1. במסוף Google Cloud, נכנסים לתפריט > APIs & Services > Credentials.

    כניסה לדף Credentials

  2. לוחצים על Create Credentials > OAuth client ID.
  3. לוחצים על סוג האפליקציה > Universal Windows Platform‏ (UWP).
  4. בשדה 'שם', מקלידים שם לפרטי הכניסה. השם הזה מוצג רק במסוף Google Cloud.
  5. בשדה 'מזהה חנות', מזינים את הערך הייחודי של מזהה Microsoft Store של האפליקציה, שמכיל 12 תווים. המזהה הזה מופיע בכתובת ה-URL של האפליקציה ב-Microsoft Store וב-Partner Center.
  6. לוחצים על יצירה. יופיע המסך שנוצר על ידי לקוח OAuth ומוצג בו מזהה הלקוח החדש וסוד הלקוח שלכם.
  7. לוחצים על אישור. פרטי הכניסה שנוצרו מופיעים בקטע 'מזהי לקוח של OAuth 2.0'.

מורידים את קובץ ה-JSON של סוד הלקוח

קובץ סוד הלקוח הוא ייצוג JSON של פרטי הכניסה של מזהה הלקוח ב-OAuth, שאפליקציית Chat יכולה להפנות אליו כשהיא מספקת את פרטי הכניסה.

  1. במסוף Google Cloud, נכנסים לתפריט > APIs & Services > Credentials.

    כניסה לדף Credentials

  2. בקטע OAuth 2.0 Client IDs, לוחצים על מזהה הלקוח שיצרתם.

  3. לוחצים על הורדת קובץ JSON.

  4. שומרים את הקובץ בשם client_secrets.json.

שלב 3: מתקינים את ספריית הלקוח של Google ופריטים אחרים בקשרי תלות

מתקינים את ספריית הלקוח של Google ופריטים אחרים בקשרי תלות שנדרשים לפרויקט.

Java

כדי להוסיף את ספריות הלקוח של Google ואת יחסי התלות הנדרשים האחרים לפרויקט Maven, עורכים את הקובץ 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.oauth-client</groupId>
    <artifactId>google-oauth-client-jetty</artifactId>
    <version>1.34.1</version>
  </dependency>
  <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.10.1</version>
  </dependency>
</dependencies>

Python

אם עדיין לא התקנתם את ספריות הלקוח של Google ל-Python, מריצים את הפקודה הבאה בממשק שורת הפקודה:

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

Node.js

כדי להוסיף את ספריות הלקוח של Google ואת יחסי התלות הנדרשים האחרים לפרויקט Node.js, עוברים לתיקיית הפרויקט ומריצים את הפקודה הבאה בממשק שורת הפקודה:

npm install "@googleapis/chat" open server-destroy

Apps Script

בדוגמה הזו נעשה שימוש בשירות Chat מתקדם כדי לבצע קריאה ל-Google Chat API. כדי להפעיל את השירות לפרויקט Apps Script:

  1. בצד ימין, לוחצים על עריכה .
  2. בצד ימין, לצד Services, לוחצים על Add a service .
  3. בוחרים באפשרות Google Chat API.
  4. בקטע Version, בוחרים באפשרות v1.
  5. לוחצים על הוספה.

אפשר להשתמש בכל שפה שנתמכת בספריות הלקוח שלנו.

שלב 4: כתיבת סקריפט שקורא ל-Chat API

הקריאה ל-API עם הרשאת OAuth היא תהליך מרובה שלבים. באפליקציות אינטרנט או למחשב, התהליך בדרך כלל נראה כך:

  1. האפליקציה מפנה את המשתמש לדף הרשאה שבו מופיעה בקשה לגישה לנתוני המשתמש שצוינו בהיקפי ההרשאה. האפליקציה מזהה את עצמה באמצעות פרטי הכניסה של מזהה הלקוח.
  2. המשתמש בודק את ההרשאות שהאפליקציה ביקשה ומאשר את הבקשה.
  3. שרת האימות של Google מפנה את הדפדפן לנקודת הקצה של ה-HTTP של האפליקציה יחד עם קוד הרשאה.
  4. האפליקציה שולחת בקשה נוספת לשרת ההרשאות של Google כדי להמיר את קוד ההרשאה לאסימון גישה.
  5. האפליקציה משתמשת באסימון הגישה כדי לקרוא ל-API בשם המשתמש.

למידע נוסף על תהליך ההרשאה ל-OAuth, ראו שימוש ב-OAuth 2.0 לגישה למדריך Google APIs.

בדוגמאות הקוד הבאות ב-Java, ב-Python וב-Node.js נעשה שימוש בספריית לקוח כדי להריץ את תהליך ההרשאה של OAuth. הוא פותח שרת HTTP מקומי כדי לקבל את קוד ההרשאה חזרה משרת ההרשאות, ומחליף אותו באסימון גישה. בדוגמה לקוד של Apps Script, תהליך ההרשאה הזה מטופל על ידי Apps Script.

אחרי השלמת תהליך האימות, הסקריפט מבצע אימות באמצעות 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.auth.oauth2.Credential;
    import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
    import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.HttpTransport;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.chat.v1.HangoutsChat;
    import com.google.api.services.chat.v1.model.Space;
    
    import java.io.InputStreamReader;
    import java.util.Collection;
    import java.util.Collections;
    
    /**
     * Authenticates with Chat API via user credentials, then creates a Chat space.
     */
    public class App {
        // Application OAuth credentials.
        private static final String KEYS_RESOURCE_URI = "/client_secrets.json";
    
        // Define your app's authorization scopes.
        private static final Collection<String> SCOPES =
            Collections.singleton("https://www.googleapis.com/auth/chat.spaces.create");
    
        // Directory to store user credentials.
        private static final java.io.File DATA_STORE_DIR =
            new java.io.File(System.getProperty("user.home"), ".store/auth-sample-app");
    
        // Global instance of the JSON factory.
        private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
    
        // Global instance of the HTTP transport.
        private static HttpTransport httpTransport;
    
        // Global instance of the DataStoreFactory. The best practice is to make it a single
        // globally shared instance across your application.
        private static FileDataStoreFactory dataStoreFactory;
    
        public static void main( String[] args ) {
            try {
                // Run app.
                httpTransport = GoogleNetHttpTransport.newTrustedTransport();
                dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
                Credential userCredential = authorize();
                Space response = App.createChatSpace(userCredential);
                // Print details about the created space.
                System.out.println(response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * Authorizes the installed application to access user's protected data.
         */
        private static Credential authorize() throws Exception {
            // Load client secrets.
            GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
                new InputStreamReader(App.class.getResourceAsStream("/client_secrets.json")));
            // Set up authorization code flow.
            GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                httpTransport, JSON_FACTORY, clientSecrets, SCOPES)
                .setDataStoreFactory(dataStoreFactory)
                .build();
            // Authorize.
            return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
        }
    
        /**
         * Creates a Chat space.
         */
        private static Space createChatSpace(Credential userCredential) throws Exception {
            // Build the Chat API client and authenticate with the user account.
            HangoutsChat chatService = new HangoutsChat.Builder(
                httpTransport, JSON_FACTORY, userCredential)
                .setApplicationName("auth-sample-app")
                .build();
    
            // Create a Chat space.
            Space space = new Space()
                // To create a named space, set spaceType to SPACE.
                .setSpaceType("SPACE")
                // The user-visible name of the space.
                .setDisplayName("API-made");
            return chatService.spaces().create(space).execute();
        }
    }
    
  3. יוצרים ספריית משנה חדשה בשם resources בספריית הפרויקט.

  4. מעתיקים את הקובץ client_secrets.json לתיקיית המשנה resources.

  5. כדי להגדיר את Maven כך שיכלול את קובץ הסודות של הלקוח בחבילת הפרויקט, עורכים את הקובץ pom.xml בספריית הפרויקט ומוסיפים את ההגדרות הבאות לקטע <build>:

    <build>
      <!-- ... existing configurations ... -->
      <resources>
        <resource>
          <directory>resources</directory>
        </resource>
      </resources>
    </build>
    
  6. כדי להגדיר את 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_space_create_named.py, באותה ספרייה שבה נמצאים client_secrets.json:

    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    # Define your app's authorization scopes.
    # When modifying these scopes, delete the file token.json, if it exists.
    SCOPES = ["https://www.googleapis.com/auth/chat.spaces.create"]
    
    def main():
      '''
      Authenticates with Chat API via user credentials,
      then creates a Chat space.
      '''
    
      flow = InstalledAppFlow.from_client_secrets_file(
                        'client_secrets.json', SCOPES)
      creds = flow.run_local_server()
    
      # Build a service endpoint for Chat API.
      service = build('chat', 'v1', credentials=creds)
    
      # Use the service endpoint to call Chat API.
      result = service.spaces().create(
    
        # Details about the space to create.
        body = {
    
          # To create a named space, set spaceType to SPACE.
          'spaceType': 'SPACE',
    
          # The user-visible name of the space.
          'displayName': 'API-made'
    
        }
    
      ).execute()
    
      # Prints details about the created space.
      print(result)
    
    if __name__ == '__main__':
      main()
    

Node.js

  1. שומרים את הקוד הבא בקובץ בשם chat_space_create_named.js באותה ספרייה שבה נמצאים הפרויקט ב-Node.js ו-client_secrets.json:

    const fs = require('fs');
    const path = require('path');
    const http = require('http');
    const url = require('url');
    const destroyer = require('server-destroy');
    
    const chat = require('@googleapis/chat');
    
    // Application OAuth credentials.
    const keys = require('./client_secrets.json').installed;
    
    // Define your app's authorization scopes.
    // When modifying these scopes, delete the file token.json, if it exists.
    const scopes = ["https://www.googleapis.com/auth/chat.spaces.create"];
    
    // Create a new OAuth2 client with the configured keys.
    const oauth2Client = new chat.auth.OAuth2(
      keys.client_id,
      keys.client_secret,
      'http://localhost:3000'
    );
    
    /**
     * Opens an HTTP server to accept the OAuth callback.
     * In this simple example, the only request to our webserver is to /?code=<code>.
     */
    async function authenticate(scopes) {
      const opn = (await import('open')).default;
    
      return new Promise((resolve, reject) => {
        // Generate the URL for authorization.
        const authorizeUrl = oauth2Client.generateAuthUrl({
          access_type: 'offline',
          scope: scopes.join(' '),
        });
        // Start the HTTP server to listen for the callback.
        const server = http
          .createServer(async (req, res) => {
            try {
              const qs = new url.URL(req.url, 'http://localhost:3000').searchParams;
              res.end('Authentication successful! Please return to the console.');
              server.destroy();
              const { tokens } = await oauth2Client.getToken(qs.get('code'));
              oauth2Client.credentials = tokens;
              resolve(oauth2Client);
            } catch (e) {
              reject(e);
            }
          })
          .listen(3000, () => {
            // Open the browser to the authorize URL to start the workflow.
            opn(authorizeUrl, { wait: false }).then(cp => cp.unref());
          });
        destroyer(server);
      });
    }
    
    /**
     * Authenticates with Chat API via user credentials, then creates a Chat space.
     */
    async function createSpace() {
      // Create the Chat API client and authenticate with the authorized user.
      const chatClient = await chat.chat({
        version: 'v1',
        auth: oauth2Client
      });
    
      // Call the Chat API to create a space.
      const result = await chatClient.spaces.create({
    
        // Details about the space to create.
        requestBody: {
    
          // To create a named space, set spaceType to SPACE.
          'spaceType': 'SPACE',
    
          // The user-visible name of the space.
          'displayName': 'API-made'
    
        }
    
      });
      return result;
    }
    
    // Authenticate the user, execute the function,
    // then print details about the created space.
    authenticate(scopes)
      .then(createSpace)
      .then(console.log);
    

Apps Script

  1. עורכים את הקובץ appsscript.json בכלי לעריכת Apps Script ומוסיפים את היקף הרשאת OAuth הנדרש כדי לקרוא ל-API:

      "oauthScopes": [
        "https://www.googleapis.com/auth/chat.spaces.create"
      ]
    
  2. שומרים את הקוד הבא בקובץ בשם ChatSpaceCreateNamed.gs בפרויקט Apps Script:

    /**
     * Authenticates with Chat API via user credentials, then creates a
     * Chat space.
     */
    function createSpace() {
      try {
        // Details about the space to create.
        // To create a named space, set spaceType to SPACE.
        // The user-visible name of the space is displayName.
        const space = {'displayName': 'API-made', 'spaceType': 'SPACE'};
    
        // Call Chat API with user credentials to create the space.
        const result = Chat.Spaces.create(space);
    
        // Log details about the created space.
        console.log(result);
      } catch (err) {
        // TODO (developer) - Handle exception
        console.log('Failed to create space with error %s', err.message);
      }
    }
    

שלב 5: מריצים את סקריפט הדוגמה

כדי להריץ את הדוגמה, עוברים בשורת הפקודה לספרייה שבה נמצאים קובצי הפרויקט ומריצים את הפקודה הבאה:

Java

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

Python

python3 chat_space_create_named.py

Node.js

node chat_space_create_named.js

Apps Script

פותחים את הקובץ ChatSpaceCreateNamed.gs בעורך של Apps Script ולוחצים על הפעלה.

ייפתח בדפדפן שבו תתבקשו להיכנס לחשבון Google:

כניסה כדי לאשר אפליקציית Chat.

איור 2. מסך ההסכמה ל-OAuth שבו בוחרים את החשבון שבו יתבצע אימות האפליקציה.

אחרי הכניסה לחשבון, יופיע מסך ההסכמה של OAuth עם בקשה לתת הרשאה לאפליקציה.

אחרי שתתנו את ההרשאה, הסקריפט יקרא ל-Chat API, שישלח תגובה עם יצירת המרחב ב-Chat עם השם המוצג API-made. פרטי הקריאה ל-API מודפסים במסוף. כדי למצוא את המרחב המשותף, עוברים לחלונית מרחבים משותפים ב-Google Chat.

פתרון בעיות בדוגמה

כשמריצים את chat_space_create_named.py, יכול להיות שתופיע הודעת השגיאה הבאה:

Expected a JSON object with a single property for a "web" or "installed" application

הודעת השגיאה הזו מופיעה כאשר הקובץ client_secrets.json שהורדתם ממסוף Google Cloud לא מתחיל במאפיין "web" או "installed". אחרי האימות באמצעות הקובץ שהורדתם, אם הקוד לא שומר את אסימון הגישה בקובץ חדש כמו token.json, אסימון הגישה נכתב ב-client_secrets.json, דבר שעלול לגרום לשגיאה הזו בניסיונות האימות הבאים.

כדי לפתור את השגיאה, מורידים שוב את הקובץ של סוד הלקוח ממסוף Google Cloud ושומרים את הקובץ החדש במקום של הקובץ הנוכחי.

  • אם האפליקציה שלכם צריכה להמשיך להשתמש באסימוני המשתמשים מחוץ להיקף של תהליך יחיד, תוכלו לאחסן את האסימונים כדי להשתמש בהם שוב מאוחר יותר. במקרה כזה, האפליקציה צריכה לטפל באסימוני המשתמשים בצורה מאובטחת, לטפל בביטול ובתוקף של אסימוני הרענון. מידע נוסף זמין במאמר שימוש במדריך לשיטות מומלצות של OAuth 2.0.

  • במסמכי העזרה של Chat API תוכלו לקרוא על תכונות נוספות של Chat API.