고급 채팅 서비스

고급 Chat 서비스를 사용하면 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 앱에 구성된 인증입니다. 사용자를 대신하여 작업을 실행하려면 사용자 인증이 필요합니다. Chat 앱으로 작업을 실행하려면 서비스 계정으로 앱 인증이 필요합니다. Chat API 메서드에서 지원하는 인증 형식을 확인하려면 Google Chat API 호출에 필요한 인증 유형을 참고하세요.

참조

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

샘플 코드

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

사용자 인증 정보로 메시지 게시

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

  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);
  }
}

스페이스 만들기

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

  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);
      }
    }

멤버십 나열

다음 예는 채팅 스페이스의 모든 구성원을 나열하는 방법을 보여줍니다.

  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);
      }
    }

문제 해결

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

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

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

제한사항 및 고려사항

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

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