구글클라우드는 모르지만 구글챗은 보내고싶어

Soo Im·2023년 7월 4일
0
post-thumbnail

파이썬으로 구글챗을 보내고 싶었을 뿐인데 구글클라우드의 벽은 나에게 너무 높았다...

파이썬 코드만 작성복붙할 줄 아는 초보자가 파이썬으로 구글챗 보내는 방법을 정리했다 🤗

중요 문서

  1. Google Chat API(메시지 작성)
  2. Google Chat 앱 빌드

1. 구글 클라우드 프로젝트 만들기

  1. 구글 클라우드 콘솔로 접속한 다음, '새 프로젝트 만들기'을 클릭해 프로젝트를 만든다. 구글 클라우드를 처음 접속했다면 어딘가 잘 보이는 데 있을 것이다...(아마)
  2. 프로젝트를 만들고 나면 상단 드롭다운에 프로젝트명이 보인다.

2. Google Chat API 허용

  1. 좌측 상단의 햄버거 버튼 을 클릭하고 'API 및 서비스'의 '라이브러리'에 들어간다.
  2. 검색란에 'Google Chat'을 검색하고, 검색 결과에서 'Google Chat API'를 클릭한다.
  3. Google Chat API 세부정보 창에서 '사용(아마도 이 비스무리한 단어)'를 클릭한다. 그렇게 하면 아래와 같이 'API 사용 설정됨' 문구가 나온다.

3. 서비스 계정 등록

  1. 좌상단 햄버거 버튼>'API 및 서비스'>'사용자 인증 정보'에 들어간다.
  2. 상단의 '+ 사용자 인증 정보 만들기'를 클릭하고 '서비스 계정'을 클릭한다.
  3. 이름 등등 간단한 정보를 입력하고(나는 선택사항은 따로 설정하지 않았다) 완료를 클릭한다.
  4. 자동으로 서비스 키(JSON 혹은 P12) 다운로드가 나온다면 그것을 받고, 만약 그런 화면이 나오지 않으면 'API 및 서비스'>'사용자 인증 정보' 화면의 '서비스 계정' 리스트에서 방금 만든 서비스 계정을 클릭한다. 그리고 '키' 탭으로 이동해 '키 추가'를 눌러 JSON을 선택하고 '만들기'를 눌러 파일을 다운로드 받는다.

4. Chat 앱 만들기

엉? 갑자기 무슨 앱이야? 싶지만 이게 있어야만 다음 단계로 갈 수 있다!! 안내에 따라 웹에서 쉽게 만들 수 있다.

  1. Chat 앱을 만드는 여러 방법은 이 문서에 있지만, 가장 쉬운 방법인 AppSheet를 사용했다.
  2. 위 안내에 따라 AppSheet 사이트에 접속해서 로그인한다. 이 때 구글 클라우드와 Google Chat을 사용하는 계정으로 로그인하는 걸 추천한다.
  3. 기존 앱을 복사해 새로운 앱을 만든다(Copy the Sample App 구간 참고).
  4. 1~3단계에서 Next를 계속 클릭해주면 마지막에 'Share' 구간이 나오는데 여기서 'Share app with individual users'를 클릭한다.
  5. 팝업 하단의 'Copy sharing links'를 클릭한 후 'Browser Link'를 복사한다.

5. Google Chat API 구성하기

  1. 다시 클라우드 콘솔로 돌아와서 'API 및 서비스'>'사용 설정된 API 및 서비스'를 클릭한다.
  2. 하단 리스트에서 'Google Chat API'를 클릭한다.
  3. '구성' 탭을 클릭한다.
  4. 앱 상태를 설정하는 란이 있다. 앱 이름과 이미지 URL, 설명에 적당한 값을 입력한다.
  5. (여기는 필요에 따라 설정하면 되는 듯 하다) 양방향 기능 사용 설정을 켜고, 1:1 메시지 수신과 스페이스 및 그룹 대화 참여 중 필요한 기능을 켠다.
  6. 연결 설정에서 '앱 URL'을 선택하고 4번 단계에서 AppSheet에서 복사한 'Browser Link'를 붙여넣는다.
  7. 필요한 경우 슬래시 명령어, 링크 미리보기, 공개 상태를 설정하고(만약 회사나 모임 등 그룹이 있으면 공개 상태를 true로 하는 것이 편할 듯하다) 하단의 저장을 클릭한다.

6. Google Chat 스페이스에 Chat 앱 추가하기

  1. 이제 Chat 앱을 내가 메시지를 보내고 싶은 스페이스에 추가하면 준비가 끝난다. 구글 챗에서 원하는 스페이스로 들어간다.
    ** 코드가 '스페이스' 기준으로 되어있기 때문에 '채팅'도 이렇게 설정할 수 있는지는 잘 모르겠다
  2. 스페이스 이름을 눌러 '앱 및 통합'을 클릭한다.
  3. 팝업 하단의 '+ 앱 추가'를 클릭한다.
  4. 4번 단계에서 만든 앱 이름을 검색하면 우리가 등록한 앱이 나온다! 이 때 상자 모양이 아니라 내 AppSheet를 만든 계정의 프로필 이미지로 된 앱(하단)을 선택하고 '추가'를 클릭한다.
    만약 상자 모양의 앱만 나오면 지금 구글챗을 접속한 계정과 AppSheet에 로그인한 계정이 달라서 그럴 수 있다. 그런 경우에는 AppSheet에 로그인한 계정으로 구글챗에 들어가서 다시 시도한다.
  5. 정상적으로 추가가 되었으면 'xxx님이 {My Chat App} 앱님을 추가했습니다.' 라는 안내 메시지가 나온다.
  6. 만약 4번에서 계정을 안 바꾸고 그냥 상자 모양 앱을 추가했으면 "To view this app, you need to sign in"이 나온다. 이건 우리가 원하는 앱을 넣은 게 아니니 다시 4번으로 돌아가서 올바른 앱을 추가한다.
  7. 만약 4번에서 계정은 동일하지만 상자 모양 앱을 추가했으면 내가 설정한 기억이 없는 안내 메시지가 나온다. (아마 복사해 온 앱 메시지가 그대로 뜨는 듯) 이 경우에도 잘못된 앱을 넣은 것이니 4번으로 돌아가서 올바른 앱을 추가한다.

7. Google Chat 메시지 보내는 Python 코드 작성

  1. 드디어 파이썬을 쓸 시간!! 공식 문서에 따라 google 클라이언트 라이브러리를 설치하고 코드를 작성한다. (나는 '앱 인증으로 문자 메시지 만들기' 코드를 사용했다)
# 출처: Google Chat API 공식 문서
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
from apiclient.discovery import build

# Specify required scopes.
SCOPES = ['https://www.googleapis.com/auth/chat.bot']

# Specify service account details.
CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
    'service_account.json', SCOPES) # <------- '~.json'에 3번 단계에서 받은 json 파일 경로 입력

# Build the URI and authenticate with the service account.
chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))

# Create a Chat message.
result = chat.spaces().messages().create(

    parent='spaces/SPACE', # <------- 'SPACE'에 스페이스 URL 맨 뒤의 문자열 입력

    # The message to create.
    body={'text': 'Hello, world!'}

).execute()

print(result)
  1. 'service_account.json'은 3번 단계에서 받은 json 파일을 말한다. 여기에 본인이 받은 json 파일 경로를 입력한다.
  2. 'SPACE'에 브라우저에서 구글챗 채팅방(스페이스)에 접속했을 때 URL 맨 끝에 붙는 문자열을 입력한다.

8. 실행!

우리 애가 말을 한다!

9. 403 오류

어지간한 오류는 챗지피티에게 물어보면 해결이 되지만, 유달리 해결방법을 찾기 힘든 메시지가 403 이었다.
<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{SPACE}/messages?alt=json returned "This Chat app is not a member of this space". Details: "This Chat app is not a member of this space">

이 에러가 났다면 Chat 앱을 안 만들었거나(4번 단계), Chat 앱의 링크를 Google Chat API의 구성에 올바르게 넣지 않았거나(5번 단계), Chat 앱을 스페이스에 넣지 않았을(6번 단계) 확률이 높다. 그러니 403을 만나면 4번 단계부터 다시 해보면 도움이 될지도 모른다 🙃

능히 할수잇다!

나같은 바보는 흔치 않겠지만... 누군가(와 미래의 나)에게 도움이 되길 바라며 이번 글 마무리!

3개의 댓글

comment-user-thumbnail
2023년 12월 7일

구글계정과 AppSheet 계정을 비즈니스 계정으로 해야할까요? 아니면 개인계정도 상관없을까요??

1개의 답글
comment-user-thumbnail
2024년 4월 14일

앱 등록 하는 부분이 구글 레퍼런스에도 자세히 나와 있지 않고, GPT도 동문서답하고, 해결을 못하고 있었는데 덕분에 쉽게 해결했습니다. 감사합니다.ㅎ

답글 달기