파이썬으로 구글챗을 보내고 싶었을 뿐인데 구글클라우드의 벽은 나에게 너무 높았다...
파이썬 코드만 작성복붙할 줄 아는 초보자가 파이썬으로 구글챗 보내는 방법을 정리했다 🤗
중요 문서
- Google Chat API(메시지 작성)
- Google Chat 앱 빌드
1. 구글 클라우드 프로젝트 만들기
- 구글 클라우드 콘솔로 접속한 다음, '새 프로젝트 만들기'을 클릭해 프로젝트를 만든다. 구글 클라우드를 처음 접속했다면 어딘가 잘 보이는 데 있을 것이다...(아마)
- 프로젝트를 만들고 나면 상단 드롭다운에 프로젝트명이 보인다.
2. Google Chat API 허용
- 좌측 상단의 햄버거 버튼
≡
을 클릭하고 'API 및 서비스'의 '라이브러리'에 들어간다.
- 검색란에 'Google Chat'을 검색하고, 검색 결과에서 'Google Chat API'를 클릭한다.
- Google Chat API 세부정보 창에서 '사용(아마도 이 비스무리한 단어)'를 클릭한다. 그렇게 하면 아래와 같이 'API 사용 설정됨' 문구가 나온다.
3. 서비스 계정 등록
- 좌상단 햄버거 버튼>'API 및 서비스'>'사용자 인증 정보'에 들어간다.
- 상단의 '+ 사용자 인증 정보 만들기'를 클릭하고 '서비스 계정'을 클릭한다.
- 이름 등등 간단한 정보를 입력하고(나는 선택사항은 따로 설정하지 않았다) 완료를 클릭한다.
- 자동으로 서비스 키(JSON 혹은 P12) 다운로드가 나온다면 그것을 받고, 만약 그런 화면이 나오지 않으면 'API 및 서비스'>'사용자 인증 정보' 화면의 '서비스 계정' 리스트에서 방금 만든 서비스 계정을 클릭한다. 그리고 '키' 탭으로 이동해 '키 추가'를 눌러 JSON을 선택하고 '만들기'를 눌러 파일을 다운로드 받는다.
4. Chat 앱 만들기
엉? 갑자기 무슨 앱이야? 싶지만 이게 있어야만 다음 단계로 갈 수 있다!! 안내에 따라 웹에서 쉽게 만들 수 있다.
- Chat 앱을 만드는 여러 방법은 이 문서에 있지만, 가장 쉬운 방법인 AppSheet를 사용했다.
- 위 안내에 따라 AppSheet 사이트에 접속해서 로그인한다. 이 때 구글 클라우드와 Google Chat을 사용하는 계정으로 로그인하는 걸 추천한다.
- 기존 앱을 복사해 새로운 앱을 만든다(Copy the Sample App 구간 참고).
- 1~3단계에서 Next를 계속 클릭해주면 마지막에 'Share' 구간이 나오는데 여기서 'Share app with individual users'를 클릭한다.
- 팝업 하단의 'Copy sharing links'를 클릭한 후 'Browser Link'를 복사한다.
5. Google Chat API 구성하기
- 다시 클라우드 콘솔로 돌아와서 'API 및 서비스'>'사용 설정된 API 및 서비스'를 클릭한다.
- 하단 리스트에서 'Google Chat API'를 클릭한다.
- '구성' 탭을 클릭한다.
- 앱 상태를 설정하는 란이 있다. 앱 이름과 이미지 URL, 설명에 적당한 값을 입력한다.
- (여기는 필요에 따라 설정하면 되는 듯 하다) 양방향 기능 사용 설정을 켜고, 1:1 메시지 수신과 스페이스 및 그룹 대화 참여 중 필요한 기능을 켠다.
- 연결 설정에서 '앱 URL'을 선택하고 4번 단계에서 AppSheet에서 복사한 'Browser Link'를 붙여넣는다.
- 필요한 경우 슬래시 명령어, 링크 미리보기, 공개 상태를 설정하고(만약 회사나 모임 등 그룹이 있으면 공개 상태를 true로 하는 것이 편할 듯하다) 하단의 저장을 클릭한다.
6. Google Chat 스페이스에 Chat 앱 추가하기
- 이제 Chat 앱을 내가 메시지를 보내고 싶은 스페이스에 추가하면 준비가 끝난다. 구글 챗에서 원하는 스페이스로 들어간다.
** 코드가 '스페이스' 기준으로 되어있기 때문에 '채팅'도 이렇게 설정할 수 있는지는 잘 모르겠다
- 스페이스 이름을 눌러 '앱 및 통합'을 클릭한다.
- 팝업 하단의 '+ 앱 추가'를 클릭한다.
- 4번 단계에서 만든 앱 이름을 검색하면 우리가 등록한 앱이 나온다! 이 때 상자 모양이 아니라 내 AppSheet를 만든 계정의 프로필 이미지로 된 앱(하단)을 선택하고 '추가'를 클릭한다.
만약 상자 모양의 앱만 나오면 지금 구글챗을 접속한 계정과 AppSheet에 로그인한 계정이 달라서 그럴 수 있다. 그런 경우에는 AppSheet에 로그인한 계정으로 구글챗에 들어가서 다시 시도한다.
- 정상적으로 추가가 되었으면 'xxx님이 {My Chat App} 앱님을 추가했습니다.' 라는 안내 메시지가 나온다.
- 만약 4번에서 계정을 안 바꾸고 그냥 상자 모양 앱을 추가했으면 "To view this app, you need to sign in"이 나온다. 이건 우리가 원하는 앱을 넣은 게 아니니 다시 4번으로 돌아가서 올바른 앱을 추가한다.
- 만약 4번에서 계정은 동일하지만 상자 모양 앱을 추가했으면 내가 설정한 기억이 없는 안내 메시지가 나온다. (아마 복사해 온 앱 메시지가 그대로 뜨는 듯) 이 경우에도 잘못된 앱을 넣은 것이니 4번으로 돌아가서 올바른 앱을 추가한다.
7. Google Chat 메시지 보내는 Python 코드 작성
- 드디어 파이썬을 쓸 시간!! 공식 문서에 따라 google 클라이언트 라이브러리를 설치하고 코드를 작성한다. (나는 '앱 인증으로 문자 메시지 만들기' 코드를 사용했다)
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
from apiclient.discovery import build
SCOPES = ['https://www.googleapis.com/auth/chat.bot']
CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
'service_account.json', SCOPES)
chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
result = chat.spaces().messages().create(
parent='spaces/SPACE',
body={'text': 'Hello, world!'}
).execute()
print(result)
- 'service_account.json'은 3번 단계에서 받은 json 파일을 말한다. 여기에 본인이 받은 json 파일 경로를 입력한다.
- '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번 단계부터 다시 해보면 도움이 될지도 모른다 🙃
능히 할수잇다!
나같은 바보는 흔치 않겠지만... 누군가(와 미래의 나)에게 도움이 되길 바라며 이번 글 마무리!
구글계정과 AppSheet 계정을 비즈니스 계정으로 해야할까요? 아니면 개인계정도 상관없을까요??