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

유튜브 챗봇 만들기, 정말 쉬워요! - 구글시트 API 예제

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

# 구글시트

작성자 :
오빠두엑셀
최종 수정일 : 2021. 11. 01. 01:10
URL 복사
메모 남기기 : (18)

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

챗봇 만들기, 구글 API 활용 목차 바로가기
영상 강의


완성된 명령문 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

  • [구글시트] 1강 구글시트 API 유튜브 챗봇 만들기 - 보충파일
    보충파일

.

라이브 강의 전체영상도 함께 확인해보세요!

위캔두 회원이 되시면 매주 오빠두엑셀에서 진행하는 라이브강의 풀영상을 확인하실 수 있습니다.


강의에 사용된 명령문 예제 코드

구글시트 앱스크립트 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"))

나만의 구글시트 API 만들기 - 정말 쉬워요!

구글 시트에서 제공하는 앱스크립트(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 등록 완료
    생성된 웹앱 URL을 복사합니다.
  10. API 사용하기 : 이제 인터넷 검색창에 아래와 같이 URL 주소를 입력하면 구글 시트에 출석체크를 등록하거나 출석 현황을 확인할 수 있습니다.
    유튜브 챗봇 테스트
    이제 URL주소를 입력해서 시트에 데이터를 입력하거나 조회할 수 있습니다.
    동작 URL
    출석체크 등록 웹앱URL?U=오빠두&L=20190101&new=y
    출석현황 확인 웹앱URL?U=오빠두&L=20190101

NightBot을 활용한 유튜브 챗봇 만들기

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

  1. NightBot 회원가입 : NightBot.tv 로 이동한 뒤, [Sign Up] - [Log in with Youtube]버튼을 클릭하여 회원가입합니다.
    나이트봇 회원가입
    나이트봇에 회원가입합니다.
    오빠두Tip : NightBot 회원가입은 실제 유튜브 방송을 진행할 구글 ID로 가입합니다.
  2. 우측 상단 [Join Channel] 버튼을 클릭합니다.
    나이트봇 등록
    로그인 후 우측 상단 [Join Channel] 버튼을 클릭합니다.
  3. NightBot 관리자 등록 : 안내창에 적힌 순서대로, [유튜브 스튜디오] - [환경설정] - [커뮤니티] 로 이동한 뒤, 안내창에 적힌 링크를 복사/붙여넣기 하여 NightBot을 관리자로 등록합니다.

    나이트봇 관리자 등록
    안내창에 적힌 순서대로 나이트봇을 관리자로 등록합니다.
  4. 커스텀 명령문 작성 : 좌측 목록에서 [Command] - [Custom]을 선택합니다. 이후 [Add Command] 버튼을 클릭한 뒤 아래 표와 같이 커스텀 명령문을 추가합니다.
    나이트봇 커스텀 문구 추가
    구글시트로 제작한 API를 커스텀 명령문으로 등록합니다.
    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 주소 등을 수정하여, 결과로 반환되는 글자수를 줄여보세요.
답변이 도움이 되었길 바랍니다. 감사합니다.