From 06aebd254904ea087a61675bfdb96723be2d2bb1 Mon Sep 17 00:00:00 2001 From: Daniel Heinrich <148484595+danielatgoogle@users.noreply.github.com> Date: Thu, 26 Oct 2023 12:11:01 -0700 Subject: [PATCH 1/6] Add files via upload Hello DevRel friends, Working with @gtondello, I'm uploading code samples for the upcoming Google Chat Advanced Service in Apps Script launch. These code samples pair with the following bugs and documentation changelists. --- advanced/chat.gs | 121 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 advanced/chat.gs diff --git a/advanced/chat.gs b/advanced/chat.gs new file mode 100644 index 000000000..ce36ef7c0 --- /dev/null +++ b/advanced/chat.gs @@ -0,0 +1,121 @@ +/** + * Copyright Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [START chat_post_message_with_user_credentials] +/** + * Posts a new message to the specified space on behalf of the user. + * @param {string} spaceName The resource name of the space. + */ +function postMessageWithUserCredentials(spaceName) { + try { + const message = { 'text': 'Hello world!' }; + Chat.Spaces.Messages.create(message, spaceName); + } catch (err) { + // TODO (developer) - Handle exception + console.log('Failed to create message with error %s', err.message); + } +} +// [END chat_post_message_with_user_credentials] + +// [START chat_post_message_with_app_credentials] +/** + * Posts a new message to the specified space on behalf of the app. + * @param {string} spaceName The resource name of the space. + */ +function postMessageWithAppCredentials(spaceName) { + try { + // See https://developers.google.com/chat/api/guides/auth/service-accounts + // for details on how to obtain a service account OAuth token. + const appToken = getToken_(); + const message = { 'text': 'Hello world!' }; + Chat.Spaces.Messages.create( + message, + spaceName, + {}, + // Authenticate with the service account token. + { 'Authorization': 'Bearer ' + appToken }); + } catch (err) { + // TODO (developer) - Handle exception + console.log('Failed to create message with error %s', err.message); + } +} +// [END chat_post_message_with_app_credentials] + +// [START chat_get_space] +/** + * Gets information about a Chat space. + * @param {string} spaceName The resource name of the space. + */ +function getSpace(spaceName) { + try { + const space = Chat.Spaces.get(spaceName); + console.log('Space display name: %s', space.displayName); + console.log('Space type: %s', space.spaceType); + } catch (err) { + // TODO (developer) - Handle exception + console.log('Failed to get space with error %s', err.message); + } +} +// [END chat_get_space] + +// [START chat_create_space] +/** + * Creates a new Chat space. + */ +function createSpace() { + try { + const space = { 'displayName': 'New Space', 'spaceType': 'SPACE' }; + Chat.Spaces.create(space); + } catch (err) { + // TODO (developer) - Handle exception + console.log('Failed to create space with error %s', err.message); + } +} +// [END chat_create_space] + +// [START chat_list_memberships] +/** + * Lists all the members of a Chat space. + * @param {string} spaceName The resource name of the space. + */ +function listMemberships(spaceName) { + let response; + let pageToken = null; + do { + try { + response = Chat.Spaces.Members.list(spaceName, { + pageSize: 10, + pageToken: pageToken + }); + if (!response.memberships || response.memberships.length === 0) { + console.log('No memberships found.'); + return; + } + for (let i = 0; i < response.memberships.length; i++) { + const membership = response.memberships[i]; + console.log( + 'Member resource name: %s (type: %s)', + membership.name, + membership.member.type); + } + pageToken = response.nextPageToken; + } catch (err) { + // TODO (developer) - Handle exception + console.log('Failed with error %s', err.message); + } + } while (pageToken); +} +// [END chat_list_memberships] From 7d7befa7f0766e5b56c1f1cda20b3c34c71c645f Mon Sep 17 00:00:00 2001 From: Daniel Heinrich <148484595+danielatgoogle@users.noreply.github.com> Date: Thu, 26 Oct 2023 13:56:19 -0700 Subject: [PATCH 2/6] Updating chat.gs with sqrrrl's feedback --- advanced/chat.gs | 53 ++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/advanced/chat.gs b/advanced/chat.gs index ce36ef7c0..7be19cccd 100644 --- a/advanced/chat.gs +++ b/advanced/chat.gs @@ -21,7 +21,7 @@ */ function postMessageWithUserCredentials(spaceName) { try { - const message = { 'text': 'Hello world!' }; + const message = {'text': 'Hello world!'}; Chat.Spaces.Messages.create(message, spaceName); } catch (err) { // TODO (developer) - Handle exception @@ -40,13 +40,13 @@ function postMessageWithAppCredentials(spaceName) { // See https://developers.google.com/chat/api/guides/auth/service-accounts // for details on how to obtain a service account OAuth token. const appToken = getToken_(); - const message = { 'text': 'Hello world!' }; + const message = {'text': 'Hello world!'}; Chat.Spaces.Messages.create( - message, - spaceName, - {}, - // Authenticate with the service account token. - { 'Authorization': 'Bearer ' + appToken }); + message, + spaceName, + {}, + // Authenticate with the service account token. + {'Authorization': 'Bearer ' + appToken}); } catch (err) { // TODO (developer) - Handle exception console.log('Failed to create message with error %s', err.message); @@ -77,7 +77,7 @@ function getSpace(spaceName) { */ function createSpace() { try { - const space = { 'displayName': 'New Space', 'spaceType': 'SPACE' }; + const space = {'displayName': 'New Space', 'spaceType': 'SPACE'}; Chat.Spaces.create(space); } catch (err) { // TODO (developer) - Handle exception @@ -94,28 +94,23 @@ function createSpace() { function listMemberships(spaceName) { let response; let pageToken = null; - do { - try { - response = Chat.Spaces.Members.list(spaceName, { - pageSize: 10, - pageToken: pageToken - }); - if (!response.memberships || response.memberships.length === 0) { - console.log('No memberships found.'); - return; - } - for (let i = 0; i < response.memberships.length; i++) { - const membership = response.memberships[i]; - console.log( - 'Member resource name: %s (type: %s)', - membership.name, - membership.member.type); - } + try { + response = Chat.Spaces.Members.list(spaceName, { + pageSize: 10, + pageToken: pageToken + }); + if (!response.memberships || response.memberships.length === 0) { pageToken = response.nextPageToken; - } catch (err) { - // TODO (developer) - Handle exception - console.log('Failed with error %s', err.message); + continue; } - } while (pageToken); + response.memberships.forEach(member => console.log( + 'Member resource name: %s (type: %s)', + membership.name, + membership.member.type); + pageToken = response.nextPageToken; + } catch (err) { + // TODO (developer) - Handle exception + console.log('Failed with error %s', err.message); + } } // [END chat_list_memberships] From a27b34188dcee65e312dd6f0adbb0100774d81b1 Mon Sep 17 00:00:00 2001 From: Daniel Heinrich <148484595+danielatgoogle@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:36:24 -0700 Subject: [PATCH 3/6] Update advanced/chat.gs Co-authored-by: Gustavo Tondello --- advanced/chat.gs | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/advanced/chat.gs b/advanced/chat.gs index 7be19cccd..90efb3fe3 100644 --- a/advanced/chat.gs +++ b/advanced/chat.gs @@ -95,19 +95,21 @@ function listMemberships(spaceName) { let response; let pageToken = null; try { - response = Chat.Spaces.Members.list(spaceName, { - pageSize: 10, - pageToken: pageToken - }); - if (!response.memberships || response.memberships.length === 0) { + do { + response = Chat.Spaces.Members.list(spaceName, { + pageSize: 10, + pageToken: pageToken + }); + if (!response.memberships || response.memberships.length === 0) { + pageToken = response.nextPageToken; + continue; + } + response.memberships.forEach(member => console.log( + 'Member resource name: %s (type: %s)', + membership.name, + membership.member.type); pageToken = response.nextPageToken; - continue; - } - response.memberships.forEach(member => console.log( - 'Member resource name: %s (type: %s)', - membership.name, - membership.member.type); - pageToken = response.nextPageToken; + } while (pageToken); } catch (err) { // TODO (developer) - Handle exception console.log('Failed with error %s', err.message); From 900fbfbc62a2b3870b16306b1169df383d97d32e Mon Sep 17 00:00:00 2001 From: Daniel Heinrich <148484595+danielatgoogle@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:43:57 -0700 Subject: [PATCH 4/6] Fixing member >>> membership in chat.gs Fixing member >>> membership per Gustavo's feedback in https://github.com/googleworkspace/apps-script-samples/pull/425#discussion_r1374625393. --- advanced/chat.gs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/chat.gs b/advanced/chat.gs index 90efb3fe3..a569548ba 100644 --- a/advanced/chat.gs +++ b/advanced/chat.gs @@ -104,7 +104,7 @@ function listMemberships(spaceName) { pageToken = response.nextPageToken; continue; } - response.memberships.forEach(member => console.log( + response.memberships.forEach(membership => console.log( 'Member resource name: %s (type: %s)', membership.name, membership.member.type); From 55355c4d36242188c7afc0f50b1bfa4eb6e395c5 Mon Sep 17 00:00:00 2001 From: Daniel Heinrich <148484595+danielatgoogle@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:59:23 -0700 Subject: [PATCH 5/6] Update advanced/chat.gs Co-authored-by: Gustavo Tondello --- advanced/chat.gs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/chat.gs b/advanced/chat.gs index a569548ba..54dcebbe5 100644 --- a/advanced/chat.gs +++ b/advanced/chat.gs @@ -107,7 +107,7 @@ function listMemberships(spaceName) { response.memberships.forEach(membership => console.log( 'Member resource name: %s (type: %s)', membership.name, - membership.member.type); + membership.member.type)); pageToken = response.nextPageToken; } while (pageToken); } catch (err) { From 00f7d1c0cbf51c7c1696e4ec904c7027a81358cf Mon Sep 17 00:00:00 2001 From: Daniel Heinrich <148484595+danielatgoogle@users.noreply.github.com> Date: Fri, 27 Oct 2023 11:16:18 -0700 Subject: [PATCH 6/6] Fixing linter errors in chat.gs Fixing the following linter errors: 1. On line 107, "Expected parentheses around arrow function argument". 2. On lines, 108, 109, and 110, " Expected indentation of 10 spaces but found 8". --- advanced/chat.gs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/advanced/chat.gs b/advanced/chat.gs index 54dcebbe5..9cb506934 100644 --- a/advanced/chat.gs +++ b/advanced/chat.gs @@ -104,10 +104,10 @@ function listMemberships(spaceName) { pageToken = response.nextPageToken; continue; } - response.memberships.forEach(membership => console.log( - 'Member resource name: %s (type: %s)', - membership.name, - membership.member.type)); + response.memberships.forEach((membership) => console.log( + 'Member resource name: %s (type: %s)', + membership.name, + membership.member.type)); pageToken = response.nextPageToken; } while (pageToken); } catch (err) {