구글시트 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")) 구글 시트에서 제공하는 앱스크립트(Apps Script)를 활용하면 URL주소를 입력하여 시트의 값을 입/출력하는 REST API를 손쉽게 제작할 수 있습니다.
- 구글시트 만들기 : 구글로 이동한 뒤 로그인합니다. 이후 우측 상단 설정버튼을 클릭한 뒤, [스프레드 시트]를 클릭하여 구글 시트를 메인페이지로 이동합니다.

구글 로그인 - 스프레드 시트를 선택하여 구글시트 메인페이지로 이동합니다. 오빠두Tip : Sorry, unable to open the file at this time. 오류는 여러 개의 구글 아이디가 동시에 로그인 되어있을 경우 발생합니다. 오류가 발생하면 모든 구글 아이디를 로그아웃 한 뒤, 구글 아이디 하나만 로그인하여 실습을 진행합니다. - [새 스프레드시트 시작하기] 에서 [내용 없음]을 선택하여 비어있는 시트를 만든 뒤, 통합문서 이름을 "유튜브 챗봇 만들기", 시트 이름을 "Log"로 변경합니다.

통합문서와 시트의 이름을 변경합니다. - A1셀 : ID, B1셀 : U, C1셀 : L 을 입력합니다. A2~C2셀에는 임시 데이터로 아래 그림과 같이 입력합니다

시트에 임시데이터를 작성합니다. - API 스크립트 붙여넣기 : [도구] 탭 - [스크립트 편집기]를 클릭하여 스크립트 편집기를 실행합니다.

도구 - 스크립트 편집기를 클릭하여 스크립트편집기를 실행합니다. - 스크립트 편집기가 실행되면, 좌측 프로젝트 목록에서 'Code.gs'를 선택 한 후, 홈페이지에 올려드린 완성파일 전체 명령문을 복사하여 'Code.gs'에 덮어쓰기합니다. 이후 저장버튼을 눌러 스크립트를 저장합니다.

완성 명령문을 붙여넣기 후, 저장합니다. - API 배포하기 : 우측 상단의 [배포] - [새 배포]를 클릭합니다.

배포 - 새 배포를 클릭합니다. - 새 배포 창이 나오면 ①유형 선택 : 웹 앱, ②새 설명 : 유튜브 챗봇 API, ③엑세스 권한이 있는 사용자 : 모든 사용자 를 선택 후 [배포] 버튼을 클릭합니다.

배포 유형과 설명, 엑세스 권한 사용자를 선택 후 [배포] 버튼을 클릭합니다. - 엑세스 승인 버튼이 나오면 엑세스 승인버튼을 클릭하여 접근 권한을 부여합니다.

권한 승인이 필요할 경우, 절차에 따라 접근 권한을 부여합니다. 오빠두Tip : 확인되지 않은 앱오류가 나올 경우 [고급] 버튼을 클릭 - [프로젝트로 이동 (안전하지 않음)] 을 선택하여 권한을 승인할 수 있습니다. - 웹앱 URL이 생성되었습니다. URL 주소를 복사합니다.

생성된 웹앱 URL을 복사합니다. - API 사용하기 : 이제 인터넷 검색창에 아래와 같이 URL 주소를 입력하면 구글 시트에 출석체크를 등록하거나 출석 현황을 확인할 수 있습니다.

이제 URL주소를 입력해서 시트에 데이터를 입력하거나 조회할 수 있습니다. 동작 URL 출석체크 등록 웹앱URL?U=오빠두&L=20190101&new=y 출석현황 확인 웹앱URL?U=오빠두&L=20190101
이제 구글시트로 제작한 API를 활용해서 유튜브 챗봇을 만들 수 있습니다. 대표적으로 사용되는 NightBot을 사용하여 유튜브 챗봇을 제작해보겠습니다.
- NightBot 회원가입 : NightBot.tv 로 이동한 뒤, [Sign Up] - [Log in with Youtube]버튼을 클릭하여 회원가입합니다.

나이트봇에 회원가입합니다. 오빠두Tip : NightBot 회원가입은 실제 유튜브 방송을 진행할 구글 ID로 가입합니다. - 우측 상단 [Join Channel] 버튼을 클릭합니다.

로그인 후 우측 상단 [Join Channel] 버튼을 클릭합니다. - NightBot 관리자 등록 : 안내창에 적힌 순서대로, [유튜브 스튜디오] - [환경설정] - [커뮤니티] 로 이동한 뒤, 안내창에 적힌 링크를 복사/붙여넣기 하여 NightBot을 관리자로 등록합니다.

안내창에 적힌 순서대로 나이트봇을 관리자로 등록합니다. - 커스텀 명령문 작성 : 좌측 목록에서 [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")) - 이제 유튜브 스트리밍을 실행 후 채팅창에 "!출석", "!출석확인"을 입력하면 구글시트에 데이터가 실시간으로 연동되며 챗봇이 동작합니다.
오빠두Tip : NightBot 유튜브 챗봇은 방송이 '공개' 상태일 경우만 동작합니다. 방송이 '비공개' 또는 '회원전용'일 경우 챗봇을 사용할 수 없습니다.
- 구글시트 만들기 : 구글로 이동한 뒤 로그인합니다. 이후 우측 상단 설정버튼을 클릭한 뒤, [스프레드 시트]를 클릭하여 구글 시트를 메인페이지로 이동합니다.

라고 하는데 뭐가 틀린건지 모르겠어요. 완전예제를 붙여도 이게 떠요.
paremeter 라는 변수가 코드에 잘못 입력되었거나, 대/소문자가 잘못되어서 발생한 오류입니다.
홈페이지에 올려드린 완성코드를 복/붙해서 사용해보시거나, 작성한 명령문을 다시 검토해보세요.
const query = e.parameter;
여기에서 TypeError: Cannot read property 'parameter' of undefined 에러가 뜨네요 ㅜㅜ
Range("셀주소").Value
속성을 사용하면 됩니다.
아래 링크를 한번 참고해보세요.
https://developers.google.com/sheets/api/guides/values
예제 영상 기준으로 { ?U=오빠두 }를 뒤에 입력했을 때,
return ContentService.createTextOutput(user); //에서는 '오빠두'가 출력되고
if (user = "오빠두") //에서는 오류가 생기는데 문제가 무엇일까요,..?
if문을 아래처럼 수정해보세요.
if (user == "오빠두")
아래쪽으로 데이터를 하나씩 누적하도록 코드를 적절히 수정해보세요 :)
만약에 이름이 같은 시청자가 있거나
이름을 변경하면 중복 또는 다시 출석카운트
진행 되나요?
이름을 변경하면 기존 출석은 제외되고
새로운 출석으로 카운트 됩니다.
나이트봇에서 반환되는 응답의 길이가 400글자를 초과해서 그렇습니다.
구글 시트에서 사용하는 필드명이나 URL 주소 등을 수정하여, 결과로 반환되는 글자수를 줄여보세요.
답변이 도움이 되었길 바랍니다. 감사합니다.