고급 채팅 서비스

고급 채팅 서비스를 사용하면 Apps Script에서 Google Chat API를 사용할 수 있습니다. 이 API를 사용하면 스크립트에서 Chat 스페이스를 검색, 생성, 수정하고, 스페이스에 멤버를 추가하거나 삭제하며, 텍스트, 카드, 첨부파일, 반응과 함께 메시지를 읽거나 게시할 수 있습니다.

기본 요건

  • Google Cloud 콘솔의 Chat API 구성 페이지에 구성된 Apps Script Google Chat 앱 앱의 Apps Script 프로젝트는 Apps Script 프로젝트용으로 자동 생성된 기본 프로젝트 대신 표준 Google Cloud 프로젝트를 사용해야 합니다. 호환되는 Google Chat 앱을 만들려면 Apps Script로 Google Chat 앱 빌드를 참고하세요.
  • 채팅 앱에 구성된 인증. 사용자를 대신하여 작업을 수행하려면 사용자 인증이 필요합니다. 채팅 앱으로 작업을 수행하려면 서비스 계정을 사용한 앱 인증이 필요합니다. Chat API 메서드가 지원하는 인증 형식을 확인하려면 Google Chat API 호출에 필요한 인증 유형을 참조하세요.

참조

이 서비스에 대한 자세한 내용은 Chat API 참조 문서를 확인하세요. Apps Script의 모든 고급 서비스와 마찬가지로 Chat 서비스는 공개 API와 동일한 객체, 메서드, 매개변수를 사용합니다.

샘플 코드

이 샘플은 고급 서비스를 사용하여 일반적인 Google Chat API 작업을 수행하는 방법을 보여줍니다.

사용자 인증 정보가 포함된 메시지 게시

다음 예에서는 사용자를 대신하여 Chat 스페이스에 메시지를 게시하는 방법을 보여줍니다.

  1. Apps Script 프로젝트의 appsscript.json 파일에 chat.messages.create 승인 범위를 추가합니다.

    "oauthScopes": [
      "https://www.googleapis.com/auth/chat.messages.create"
    ]
    
  2. Apps Script 프로젝트의 코드에 다음과 같은 함수를 추가합니다.

    advanced/chat.gs
    /**
     * 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);
      }
    }

앱 사용자 인증 정보가 포함된 메시지 게시

다음 예에서는 앱을 대신하여 Chat 스페이스에 메시지를 게시하는 방법을 보여줍니다. 서비스 계정으로 고급 Chat 서비스를 사용하면 appsscript.json에서 승인 범위를 지정할 필요가 없습니다. 서비스 계정을 사용한 인증에 대한 자세한 내용은 Google Chat 앱으로 인증을 참조하세요.

advanced/chat.gs
/**
 * 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);
  }
}

스페이스 사용하기

다음 예는 Chat 스페이스에 관한 정보를 가져오는 방법을 보여줍니다.

  1. Apps Script 프로젝트의 appsscript.json 파일에 chat.spaces.readonly 승인 범위를 추가합니다.

    "oauthScopes": [
      "https://www.googleapis.com/auth/chat.spaces.readonly"
    ]
    
  2. Apps Script 프로젝트의 코드에 다음과 같은 함수를 추가합니다.

    advanced/chat.gs
    /**
     * 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);
      }
    }

스페이스 만들기

다음 예는 Chat 스페이스를 만드는 방법을 보여줍니다.

  1. Apps Script 프로젝트의 appsscript.json 파일에 chat.spaces.create 승인 범위를 추가합니다.

    "oauthScopes": [
      "https://www.googleapis.com/auth/chat.spaces.create"
    ]
    
  2. Apps Script 프로젝트의 코드에 다음과 같은 함수를 추가합니다.

    advanced/chat.gs
    /**
     * 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);
      }
    }

멤버십 나열

다음 예는 Chat 공간의 모든 구성원을 나열하는 방법을 보여줍니다.

  1. Apps Script 프로젝트의 appsscript.json 파일에 chat.memberships.readonly 승인 범위를 추가합니다.

    "oauthScopes": [
      "https://www.googleapis.com/auth/chat.memberships.readonly"
    ]
    
  2. Apps Script 프로젝트의 코드에 다음과 같은 함수를 추가합니다.

    advanced/chat.gs
    /**
     * 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;
      try {
        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((membership) => 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);
      }
    }

문제 해결

Error 400: invalid_scope 오류 메시지와 함께 Some requested scopes cannot be shown가 표시되면 Apps Script 프로젝트의 appsscript.json 파일에 승인 범위를 지정하지 않았음을 의미합니다. 대부분의 경우 Apps Script에서 스크립트에 필요한 범위를 자동으로 결정하지만 Chat 고급 서비스를 사용할 때는 스크립트에서 사용하는 승인 범위를 Apps Script 프로젝트의 매니페스트 파일에 수동으로 추가해야 합니다. 명시적 범위 설정을 참조하세요.

이 오류를 해결하려면 적절한 승인 범위를 Apps Script 프로젝트의 appsscript.json 파일에 oauthScopes 배열의 일부로 추가합니다. 예를 들어 spaces.messages.create 메서드를 호출하려면 다음을 추가합니다.

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

제한사항 및 고려사항

고급 채팅 서비스는 다음을 지원하지 않습니다.

메시지 첨부파일을 다운로드하거나 개발자 미리보기 메서드를 호출하려면 대신 UrlFetchApp를 사용하세요.