REST API를 사용하여 Google 채팅에 메시지 보내기 (Google 예제가 2020에서 작동하지 않음)

Aug 19 2020

어디서부터 시작해야하나요 ... (구글, 왜 이런 식으로 나를 다치게해야합니까?)

배경 정보

Google Apps Script를 사용하여 새 챗봇 을 만들었습니다.이 챗봇 은 Google 채팅 에서 사용자의 메시지를 수신 하고 단일 메시지로 동기식 으로 응답 합니다 (각 메시지는 챗봇에서 하나의 응답 만 가질 수 있음).

이제 봇이 자체적으로 메시지를 보내거나 한 번에 여러 개의 개별 응답을 보낼 수 있도록 비동기 메시지 를 보내는 방법이 필요합니다 .

문제

Google 채팅 REST API를 사용 하는 방법이 비동기 적으로 메시지를 작성 , 하지만이 방법은 ( spaces.messages.create) 작동하지 않습니다! 2020 년부터는이 방법의 작동 예가 없습니다.

다음은 REST API를 사용하여 메시지를 만드는 Google의 예제 코드 입니다.

문제는이 예제에서 더 이상 종료되지 않는 URLSCOPE 로 설정되어 있다는 것입니다 .

var SCOPE = 'https://www.googleapis.com/auth/chat.bot';

해당 URL로 이동하면 다음 404 오류가 표시됩니다.

Not Found
Error 404

또한 사용 가능한 OAuth2 범위 목록 을 확인하면 행 아웃 또는 채팅 과 관련된 범위 가 없으며 chat.bot예제 코드에 사용 된 범위에 대한 언급이 없음을 알 수 있습니다.

내가 무엇을 시도 했습니까?

이 Chat API와 관련된 StackOverflow의 모든 질문과 REST API에 대한 모든 자습서를 읽었습니다.

  • chat.bot범위가 더 이상 존재하지 않기 때문에 Google의 공식 Apps Script 가이드가 작동하지 않습니다 .
    • Apps Script를 사용한 비동기 메시지
  • 이러한 StackOverflow 솔루션은 모두 존재하지 않는 동일한 chat.bot범위를 사용합니다.
    • 이벤트없이 비공개 메시지 보내기
    • Rest API를 사용하여 새 행 아웃 채팅에서 비동기식으로 응답
    • Apps Script Bot에서 404 잘린 서버 응답
  • 이 StackOverflow 사용자는 chat범위 (예 :)를 사용할 수 있다고 말 googleapis.com/auth/chat했지만 해당 범위도 존재하지 않습니다.
    • 오류 400 : invalid_scope

결론적으로

어떻게 메시지를 보낼 에서 Google 애플리케이션 스크립트 사용하여 Google 채팅 Google 채팅 REST API를 ?

Google의 문서는 구식이며이 API에 대한 예제는 2020 년 8 월 현재 작동하지 않는 것 같습니다. 그들은 REST API가 작동하지 않는다는 사실을 모르거나 아무에게도 알리지 않고 REST API를 사용하지 않습니다.

답변

5 RafaGuillermo Aug 20 2020 at 09:25

대답:

chat.bot범위가 실제로 존재 하는지 확인할 수 있습니다. 나머지 API를 채팅 봇을 설정하려면, 당신은 해야한다 용도 서비스 계정을 .

추가 정보:

트리거시 비동기 메시지를 보내기 위해 Apps Script로 봇 개발에 링크 한 문서에 따라 :

... 현재이를 달성하는 유일한 방법은 외부 HTTP API를 사용하는 것입니다 ( 문서 참조 ). 이를 위해서는 OAuth2 for Apps Script 라이브러리를 통해 클라우드 서비스 계정 (문서 참조)을 사용해야 합니다 .

즉, chat.bot이러한 메시지에 범위를 사용할 수 있도록 먼저 GCP 콘솔에서 서비스 계정을 설정해야 합니다. 처음부터 끝까지 전체 과정이 매우 어려울 수 있으므로 여기서는 처음부터 끝까지 단계를 제공하겠습니다.

과정:

서비스 계정 생성 :

  • Google Cloud Console로 이동하여 새 GCP 프로젝트를 만듭니다. Select a project페이지 상단을 누르고을 클릭 NEW PROJECT합니다.
    • 를 제공 Project name해야하며 다른 필드는 자동으로 채워 져야합니다.
  • 누르기 CREATE-새 프로젝트가 생성되고 있음을 확인하는 새 팝업이 화면 오른쪽 상단에 나타납니다. 로드되면을 클릭 할 수 있습니다 VIEW.
  • 왼쪽 상단 의 아이콘을 클릭하고 APIs & Services > Credentials메뉴 항목을 따릅니다 .
  • 이 페이지 상단에서을 클릭 + CREATE CREDENTIALS > Service Account합니다.
    • 서비스 계정의 이름과 설명, 눌러주고 CREATE, 다음 CONTINUE, 마지막을 DONE.

이제 서비스 계정이 생성되었습니다.

서비스 계정 자격 증명 생성 :

Apps Script로 봇 개발 페이지 의 예제에 제공된 코드에 필요 합니다.

  • 서비스 계정을 만든 후에는 GCP 프로젝트에 사용할 수있는 사용자 인증 정보 목록으로 다시 리디렉션됩니다. Service Accounts섹션 아래에서 새로 만든 서비스 계정을 클릭합니다. 이것은 호출됩니다[email protected]
  • 딸깍 하는 소리 ADD KEY > Create new key
  • JSON선택한 상태를 유지 하고를 누릅니다 CREATE.
    • 이 서비스 계정으로 API에 액세스하는 데 사용해야하는 자격 증명 파일의 다운로드가 시작됩니다. 이 파일을 잃어 버리거나 공유하지 마십시오. 분실 한 경우이 계정에 대한 새 자격 증명을 삭제하고 생성해야합니다.

Hangouts Chat API 활성화 :

  • 로 돌아가를 ☰ > APIs & Services선택 Library합니다.
  • Hangouts Chat API유일한 결과를 검색 하고 클릭합니다.
  • 를 클릭하십시오 ENABLE. 그러면 프로젝트에 API가 활성화됩니다.

참고 : 아직이 탭을 닫지 마십시오! 나중에 GCP 콘솔을 사용해야합니다.

Apps Script 프로젝트 설정 :

  • 새 Apps Script 프로젝트를 만듭니다.
  • 이제 비동기 메시지 페이지 의 예제를 새 프로젝트에 복사하여 붙여 넣을 수 있습니다 .
  • GCP 콘솔에서 다운로드 한 사용자 인증 정보 파일을 엽니 다.
    • private_key값 (로 시작 하는 값)을 복사하여 Apps Script 프로젝트의 -----BEGIN PRIVATE KEY-----값에 붙여 넣습니다 SERVICE_ACCOUNT_PRIVATE_KEY.
    • 또한 client_email자격 증명 파일에서 값을 복사하여 SERVICE_ACCOUNT_EMAILApps Script 프로젝트에 붙여 넣습니다 .

예와 같이 Google Apps Script OAuth2 라이브러리를 사용하려면 라이브러리의 스크립트 ID를 사용하여 프로젝트에 라이브러리를 추가해야합니다.

  • Apps Script 프로젝트 UI에서 Resources > Libraries...메뉴 항목을 따라 OAuth2 스크립트 ID를 복사하여 Add a library상자에 붙여 넣습니다.
    • 스크립트 ID는 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
    • 이 라이브러리와 나머지 라이브러리는 Apps Script 용 OAuth2 GitHub 저장소 에서 찾을 수 있습니다.
  • 안정적인 최신 버전의 라이브러리를 선택해야합니다 (작성 당시 버전 38).
  • 를 누릅니다 Save.

다음으로 Apps Script 프로젝트를 이전에 만든 GCP 프로젝트에 연결해야합니다.

  • GCP 콘솔 탭으로 돌아가서 ☰ > IAM & Admin > Settings메뉴 항목을 따릅니다 .
  • Project number이 페이지에 정의 된 내용을 복사 하십시오.
  • Apps Script 프로젝트에서 Resources > Cloud Platform project...메뉴 항목을 따라 프로젝트 번호를 Enter Project Number here대화 상자에 붙여 넣습니다 .
  • 를 클릭하십시오 Set Project.

프로젝트 매니페스트 설정 : Apps Script에서 채팅 봇을 사용하려면 프로젝트 매니페스트chat키를 포함해야합니다 .

  • Apps Script UI에서을 클릭 View > Show manifest file합니다.
  • 마지막 키-값 쌍 뒤에 다음을 추가합니다.
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }

이제 전체 매니페스트 파일은 다음과 같습니다.

{
  "timeZone": "Europe/Paris",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "Drive",
      "serviceId": "drive",
      "version": "v2"
    }],
    "libraries": [{
      "userSymbol": "OAuth2",
      "libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF",
      "version": "38"
    }]
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }
}
  • 프로젝트를 저장하십시오.

마지막 단계 :

거의 완료되었습니다! 이제 매니페스트에서 봇을 배포하고 GCP에서 구성을 설정하고 실제 호출을 수행 할 트리거를 설정해야합니다.

봇 배포 :

  • 앱 스크립트 UI에서 이동 Publish > Deploy from manifest...및 공격 Create새롭게 문을 연 대화 상자에서.
    • 참고 : 전체 도메인에이를 사용하려는 경우 헤드 배포를 사용할 수 없으므로 새 배포를 만들어야합니다.
  • 배포에 이름과 설명을 입력하고를 누릅니다 Save.
  • 저장이 완료되면 Get ID방금 생성 한 배포 옆에있는을 누르고 Deployment ID.

GCP 구성 설정 :

  • Cloud Console로 돌아가서 이제로 이동해야 ☰ > APIs & Services > Dashboard합니다.
  • 이 페이지 하단의 활성화 된 API 목록에서 Hangouts Chat API.
  • 왼쪽 메뉴에서을 선택 Configuration합니다.
  • 봇 구성을 설정합니다. 당신은을 제공해야합니다 Bot name, Avatar URL하고 Description. 회의실에서 작동하도록 기능 설정을 구성합니다.
  • 에서 Connection Settings를 선택 Apps Script project하고 이전 섹션의 배포 ID를 붙여 넣습니다.
  • Apps Script 봇에 관련 권한을 부여하고을 누릅니다 Save.

애매한 트리거 :

  • 이제해야 할 일은 트리거를 설정하는 것뿐입니다. 이는 Apps Script의 Edit > Current project's triggers메뉴 항목에서 일반 Apps Script 트리거와 같이 수행됩니다 . 예제를 완료하려면 오른쪽 하단의 + 트리거 추가 버튼을 클릭하고 다음과 같이 트리거 설정을 구성합니다.

  • 실행할 기능을 선택하십시오. onTrigger

  • 실행할 배포 선택 : 헤드

  • 이벤트 소스 선택 : 시간 기반

  • 시간 기반 트리거 유형 선택 : Minutes timer

  • 분 간격 선택 : Every minute

그리고 저장을 누릅니다.

그리고 당신은 끝났습니다! 이 생성 된 봇은 이제 매분 현재 시간에있는 모든 회의실에 게시됩니다.

이 설명이 도움이 되었기를 바랍니다.

참조 :

  • 서비스 계정 | Cloud IAM 문서
  • 서비스 계정 이해 | Cloud IAM 문서
  • Apps Script로 봇 개발 | Google Chat API | Google 개발자
  • 봇이 시작한 메시지-새 봇 생성 | Google Chat API | Google 개발자
  • GitHub-gsuitedevs / apps-script-oauth2 : Google Apps Script 용 OAuth2 라이브러리입니다.

  • 구글 클라우드 콘솔