오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
구글 시트 강의

구글시트 API를 활용한 유튜브 자동화 챗봇 만들기

오빠두엑셀 by 오빠두엑셀
  • 학습시간 28분
  • 난이도 전문가
  • 작성일 2021.10.27

구글시트에서 제공하는 앱스크립트를 활용하여 나만의 API를 만든 후 유튜브 챗봇과 연동하여 자동화하는 방법까지 단계별로 알아봅니다.

이 강의에서는 구글 시트의 앱스크립트로 직접 REST API를 만든 뒤, NightBot과 연동해 유튜브 채팅창에서 자동으로 출석을 기록하는 챗봇을 구축하는 과정을 다룹니다. 시트 데이터 입출력부터 웹앱 배포, 커스텀 명령문 등록까지 모든 단계를 정리해, 실시간 방송에서 시청자 반응을 데이터로 관리할 수 있는 챗봇을 직접 운영할 수 있습니다.

구글시트 API를 활용한 유튜브 자동화 챗봇 만들기
DOWNLOADS

실습자료를 준비했어요

수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇

구글시트 앱스크립트 API 예제 명령문

완성된 코드는 본 강의 상단의 보충자료에서 다운로드할 수 있습니다. 코드를 복사/붙여넣기로 사용하는 방법은 아래 유튜브 챗봇 단계별 만들기를 참고하시기 바랍니다. 명령문의 단계별 동작 원리에 대한 자세한 설명은 예제 코드에 표기된 시간대 영상 강의에서 확인하실 수 있습니다.

function doGet(e){
 
  // 통합문서&시트 불러오기 (05:35)
 
  // 시트의 머리글 받아오기
 
  // 머리글에서 ID 제거하기 (10:14)
 
  // URL로 입력한 받은 쿼리문 받아오기 (10:54)
  // https://developers.google.com/apps-script/guides/web
 
  // 현재날짜/시간 출력하기 "06-05 Sat 19:30" 형태로 (14:46)
  // https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
  // https://developers.google.com/google-ads/scripts/docs/features/dates
  var now = new Date();
  var date = Utilities.formatDate(now, 'Asia/Seoul', 'MM-dd EEE HH:mm');
  // 시트에 입력된 데이터를 받아오기 (15:14)
 
  // 쿼리문에 new가 없으면 출석회수 출력 (15:59)
  if (!query['new']) {
 
  } else {
  // 쿼리문에 new가 있으면 새로운 출석을 등록(21:49)
  // 기존 접속한 기록이 있으면 이미 출석했다는 안내 메시지 출력 후 종료
 
    // 기록이 없으면, 새로운 사용자를 등록
 
    // 쿼리로 받아온 값에는 id가 없으므로, 기존 시트에 입력된 ID를 참조하여 최대값을 계산
    const ids = ws.getRange(2,1,ws.getLastRow()-1,1).getValues();
    const newIDNumber = getMaxFromDoubleArray_(ids) + 1;
    // 머리글을 참조한 배열(ID가 없는 배열)의 맨 왼쪽에 ID 값을 추가합니다.
 
    // 시트에 데이터를 추가합니다. (21:49)
 
    // 접속회수에 1을 더한 뒤, 안내메시지 출력 후 종료합니다.
 
  }
}
 
function getMaxFromDoubleArray_(arr){
/* 배열에서 최대 값을 반환합니다.*/
  let maxID = 0;
  arr.forEach(r => {
    if(r[0] > maxID) maxID = r[0];
  });
  return maxID;
}

NightBot 커스텀 호출 구문

Command Message
!출석 $(urlfetch 앱스크립트URL?U=$(querystring $(user))&L=$(time Asia/Seoul "YYYYMMDD")&new=s)
!출석확인 $(urlfetch 앱스크립트URL?U=$(querystring $(user))&L=$(time Asia/Seoul "YYYYMMDD"))

구글 시트에서 제공하는 앱스크립트(Apps Script)를 활용하면, URL 주소만으로 시트의 값을 입력하거나 출력하는 REST API를 손쉽게 제작할 수 있습니다.

  1. 구글시트 만들기 : 구글로 이동한 뒤 로그인합니다. 이후 우측 상단의 설정 버튼을 클릭한 뒤 [스프레드시트]를 클릭하여 구글 시트 메인 페이지로 이동합니다.구글시트 이동
    오빠두Tip : Sorry, unable to open the file at this time. 오류는 여러 개의 구글 계정이 동시에 로그인되어 있을 때 발생합니다. 오류가 발생하면 모든 구글 계정을 로그아웃한 뒤 하나의 계정만 로그인하여 실습을 진행합니다.
  2. [새 스프레드시트 시작하기] 에서 [내용 없음]을 선택하여 비어있는 시트를 만든 뒤, 통합문서 이름을 "유튜브 챗봇 만들기", 시트 이름을 "Log"로 변경합니다.유튜브 챗봇 만들기 구글시트 api
  3. A1셀에 ID, B1셀에 U, C1셀에 L을 입력합니다. A2~C2셀에는 아래 그림과 같이 임시 데이터를 입력합니다.구글시트 데이터 추가
  4. API 스크립트 붙여넣기 : [도구] 탭의 [스크립트 편집기]를 클릭하여 스크립트 편집기를 실행합니다.구글시트 앱스크립트 편집기
  5. 스크립트 편집기가 실행되면 좌측 프로젝트 목록에서 'Code.gs'를 선택한 후, 강의 상단에 첨부된 완성파일 전체 명령문을 복사하여 'Code.gs'에 덮어쓰기합니다. 이후 저장 버튼을 눌러 스크립트를 저장합니다.구글시트 앱 스크립트 저장
  6. API 배포하기 : 우측 상단의 [배포] - [새 배포]를 클릭합니다.구글시트 api 배포
  7. 새 배포 창이 나오면 ①유형 선택 : 웹 앱, 새 설명 : 유튜브 챗봇 API, 액세스 권한이 있는 사용자 : 모든 사용자 를 선택 후 [배포] 버튼을 클릭합니다.
    구글시트 api 웹앱 배포
  8. 액세스 승인 버튼이 나오면 액세스 승인 버튼을 클릭하여 접근 권한을 부여합니다.구글시트 api 새배포 엑세스
    오빠두Tip : '확인되지 않은 앱' 오류가 표시될 경우 [고급] 버튼을 클릭한 뒤 [프로젝트로 이동 (안전하지 않음)]을 선택하여 권한을 승인할 수 있습니다.
  9. 웹앱 URL이 생성되었습니다. URL 주소를 복사합니다.유튜브 챗봇 api 등록 완료
  10. API 사용하기 : 이제 인터넷 브라우저 주소창에 아래와 같이 URL을 입력하면 구글 시트에 출석체크를 등록하거나 출석 현황을 확인할 수 있습니다.유튜브 챗봇 테스트
    동작 URL
    출석체크 등록 웹앱URL?U=오빠두&L=20190101&new=y
    출석현황 확인 웹앱URL?U=오빠두&L=20190101

이제 구글 시트로 제작한 API를 활용해 유튜브 챗봇을 만들 수 있습니다. 대표적으로 사용되는 NightBot으로 유튜브 챗봇을 직접 제작해보겠습니다.

  1. NightBot 회원가입 : NightBot.tv로 이동한 뒤, [Sign Up] - [Log in with Youtube] 버튼을 클릭하여 회원가입합니다.나이트봇 회원가입
    오빠두Tip : NightBot 회원가입은 실제 유튜브 방송을 진행할 구글 계정으로 가입합니다.
  2. 우측 상단의 [Join Channel] 버튼을 클릭합니다.
    나이트봇 등록
  3. NightBot 관리자 등록 : 안내창에 표시된 순서대로 [유튜브 스튜디오] - [환경설정] - [커뮤니티]로 이동한 뒤, 안내창의 링크를 복사·붙여넣기하여 NightBot을 관리자로 등록합니다.나이트봇 관리자 등록
  4. 커스텀 명령문 작성 : 좌측 목록에서 [Command] - [Custom]을 선택합니다. 이후 [Add Command] 버튼을 클릭한 뒤 아래 표와 같이 커스텀 명령문을 추가합니다.나이트봇 커스텀 문구 추가
    Command Message
    !출석 $(urlfetch 앱스크립트URL?U=$(querystring $(user))&L=$(time Asia/Seoul "YYYYMMDD")&new=s)
    !출석확인 $(urlfetch 앱스크립트URL?U=$(querystring $(user))&L=$(time Asia/Seoul "YYYYMMDD"))
  5. 이제 유튜브 스트리밍을 실행한 후 채팅창에 "!출석"이나 "!출석확인"을 입력하면 구글 시트와 데이터가 실시간으로 연동되며 챗봇이 동작합니다.
    오빠두Tip : NightBot 유튜브 챗봇은 방송이 '공개' 상태일 때만 동작합니다. 방송이 '비공개' 또는 '회원전용'일 경우에는 챗봇을 사용할 수 없습니다.
댓글 18
4.9 (9개 평가)
SEANPAUL
SEANPAUL 2021.10.28 13:40
와.. 대박 아이디어 이네요. 감사합니다
아고라
아고라 2022.02.07 22:22
TypeError: Cannot read property 'parameter' of undefined
라고 하는데 뭐가 틀린건지 모르겠어요. 완전예제를 붙여도 이게 떠요.
오빠두엑셀
오빠두엑셀 작성자 2022.02.11 02:01
안녕하세요.
paremeter 라는 변수가 코드에 잘못 입력되었거나, 대/소문자가 잘못되어서 발생한 오류입니다.
홈페이지에 올려드린 완성코드를 복/붙해서 사용해보시거나, 작성한 명령문을 다시 검토해보세요.
이진
이진 2022.03.03 14:42
완성 코드를 복붙했는데도 15번째줄
const query = e.parameter;
여기에서 TypeError: Cannot read property 'parameter' of undefined 에러가 뜨네요 ㅜㅜ
버버
버버 2022.05.06 09:40
그거 스크립트 상단에 실행 누르면 나오는 알림메세지죠? 저 그거 그냥 개무시하고 해봤는데 작동은 잘됐어요.
버버
버버 2022.05.06 09:39
안녕하세요 좋은 강의 감사합니다. 질문이 있는데요, 트위치 같은 경우엔 아이디와 닉네임이 다른데, 닉네임 기준으로 표시 하려면 어떻게 하나요?
버버
버버 2022.05.06 19:40
트위치에서 하시는 분들 나봇 커스텀 구문에서 $(user) 대신에 $(touser) 쓰시면 아이디대신 닉네임으로 기록됩니다! 알고나니 간단한데 왜케 난 힘들었을까요 하하하하하핳하ㅏㅎㅎ
Tororo
Tororo 2022.07.21 13:34
그냥 특정 셀값만 고정으로 받아오려면 어떻게 해야할까요?
오빠두엑셀
오빠두엑셀 작성자 2022.07.22 05:40
안녕하세요.
Range("셀주소").Value
속성을 사용하면 됩니다.
아래 링크를 한번 참고해보세요.
https://developers.google.com/sheets/api/guides/values
설까치
설까치 2022.09.04 03:18
안녕하세요 오빠두님! 매번 감사하게 잘 보고 있습니다. 한 가지 여쭤보고 싶어 댓글 남깁니다. e.parameter로 배열을 불러오고 변수마다 각 값을 넣은 후에 이 변수들을 써서 논리 연산자로 조건문을 만들려고 하니 오류가 나네요...
예제 영상 기준으로 { ?U=오빠두 }를 뒤에 입력했을 때,
return ContentService.createTextOutput(user); //에서는 '오빠두'가 출력되고
if (user = "오빠두") //에서는 오류가 생기는데 문제가 무엇일까요,..?
오빠두엑셀
오빠두엑셀 작성자 2022.09.04 16:09
안녕하세요.
if문을 아래처럼 수정해보세요.
if (user == "오빠두")
설까치
설까치 2022.09.04 17:37
감사합니다!! VBA에 너무 익숙했었네요 ㅠㅠ
와리
와리 2022.10.14 05:14
좋은 강의 감사합니다. 이걸 응용해서 !명령어 <내용>를 쓰면 <내용> 부분을 스프레드 시트에 한줄한줄씩 남기는 걸 해보고 싶은데 어떻게 하면 될까요??
오빠두엑셀
오빠두엑셀 작성자 2022.10.14 16:56
시트에 사용한 마지막 셀(또는 행번호)를 받아온 후
아래쪽으로 데이터를 하나씩 누적하도록 코드를 적절히 수정해보세요 :)
해피패밀리
해피패밀리 2023.11.27 17:47
안녕하세요.
만약에 이름이 같은 시청자가 있거나
이름을 변경하면 중복 또는 다시 출석카운트
진행 되나요?
오빠두엑셀
오빠두엑셀 작성자 2023.11.29 03:48
안녕하세요.
이름을 변경하면 기존 출석은 제외되고
새로운 출석으로 카운트 됩니다.
김유빈
김유빈 2024.03.04 06:31
안녕하세요! 코드와 영상 참조하여 챗봇을 추가하였는데, ​[Response must be less than 400 characters] 라는 멘트를 나이트봇이 출력합니다 ..! 어떤 부분이 문제일까요 ㅠㅠ
오빠두엑셀
오빠두엑셀 작성자 2024.03.05 02:52
안녕하세요.
나이트봇에서 반환되는 응답의 길이가 400글자를 초과해서 그렇습니다.
구글 시트에서 사용하는 필드명이나 URL 주소 등을 수정하여, 결과로 반환되는 글자수를 줄여보세요.
답변이 도움이 되었길 바랍니다. 감사합니다.