행사 참석 여부 자동 업데이트하기

소개

커뮤니티를 운영할 떄, 폼을 통해 유저 정보를 받을 때가 많습니다

모든 유저들이 정보를 정확히! 한 번에! 전달 주면 정말 좋겠지만.... 늘 정보를 수정하는 일이 생깁니다 ㅠㅠ (저도 유저 입장일 땐 자주 틀려서 할 말이 없습니다 ㅋㅋㅋㅋ)

다만 폼에서는 유저가 결과를 직접 수정하기 어렵다보니...
(구글 폼에서는 로그인을 강제하고 답변을 수정하게 할 수 있긴 하지만 로그인을 필수로 만들면 유저 경험에 안 좋잖아요!!)

유저가 폼을 새로 제출해야하는데 그럼 또 중복된 응답이 생겨서 따로 관리를 해야한다는 번거로움이 있습니다.

이걸 저희 스터디장 닿님은 에어테이블과 n8n으로 해결하신다고 하시더라고요..!!

단순 로직만 듣고 구체적으로 배우지는 않았는데 미니사례를 쓰려고 보니 그걸 따라해보고 싶어졌습니다

하지만 제 크나큰 오판.... 초보는 단순한 걸 만드는 데에도 시간이 참 오래 걸리더군요 ㅠㅠ
내일 출근해야 하는데... 꽂힌 건 끝을 내지 않으면 다른 걸 하지 못한다는 병이 있어서 그만 끝장을 보고 말았습니다. (제 장점이자 단점 ㅠㅠ)

결국 미니사례는 시간 내에 제출하지 못했지만 ㅋㅋㅋㅋ
어쨌든 뭐라도 만들었죠?
n8n 2주 사용권을 놓친 건 아쉽지만... 어차피 구매할 예정이었으니 괜찮습니다 ㅎㅎ
이것이 결코 best는 아닐 것 같지만, 좌충우돌 경험담은 다른 분들께도 도움이 될 것 같기에 호다닥 작성해봅니다!

시간이 늦어 글이 좀 의식에 흐름을 따르고 있는 점 양해 부탁드립니다. (_ _)

진행 방법

나는 커뮤니티 운영자고, 오프라인 이벤트를 열 것이며, 이 이벤트에 유저들이 참여할 것인지 아닌지 설문을 받는 상황을 가정하고 만들어봤습니다.

  • 1단계: 에어테이블 구성하기

    다양한 유형의 데이터를 보여주는 Google 스프레드 시트의 스크린 샷
    • 내가 어떤 정보를 받고 싶은지 생각하며 테이블을 만들었습니다

    • 이름/이메일/참석 여부/휴대폰번호 > 유저에게 받고 싶은 정보

    • 최신 여부 > 유저가 가장 최근에 쓴 기록과 아닌 것을 구분하기 위해 만듦

      • 최신 여부의 디폴트는 'new'로 설정해줬습니다
        (폼이 생성되었을 때 자동으로 'new'가 되도록)

      • Created > 등록된 시간은 이것저것 활용하기 좋은 자료 + GPT 왈 트리거 쓸 때는 Created를 기준으로 하는 게 좋다고 해서 만듦

  • 2단계: 에어테이블로 폼 만들기

    한국어가있는 웹 사이트의 스크린 샷
    • 상단에 바로 Forms 버튼이 있더라고요!

    • '유저에게 받고 싶은 정보'로만 폼을 구성했습니다
      (나머지는 나만 알면 되는 정보)

  • 3단계: n8n에서 워크플로우 만들기

    • 우선 내가 데이터를 어떻게 하고싶은가? 생각을 해봤습니다. 제가 생각한 플로우는 이렇습니다

      1. 폼으로 새로운 응답이 들어온다

      2. 기존 데이터에서 '최신 여부'가 'new'인 것 중에, 새로 들어온 폼의 '휴대폰 번호'가 동일한 데이터를 찾는다

      3. 찾은 데이터의 '최신 여부'를 'old'로 바꾼다

    • 이걸 동일하게 노드로 만들어줬습니다.

      전화에 검색 레코드를 추가하는 프로세스를 보여주는 다이어그램
    • 각각의 노드는 이렇게 구성했어요

      • Airtable Trigger

        Adobe Triggerr의 스크린 샷
        • 처음에는 Base/Table/Trigger Field에 뭘 입력해야하는지 몰라서 헤맸습니다만.. GPT가 잘 알려주더라고요. 알려주는대로 입력을 했습니다

          • Base는 URL 내에 대충 app으로 시작하는 것

          • Table은 URL 내에 대충 tbID로 시작하는 것으로 보시면 됩니다

        • Trigger Field는 'Created'로 하긴 했으나, 폼 특성 상 여러 데이터가 한 번에 들어오다보니 이번에는 뭘로 하든 다를 게 없을 것 같긴 합니다

      • Search Records

        iPad에서 검색 레코드 화면의 스크린 샷
        • Search 하는 방법은 이전에 닿님이 공유해주신 영상에서 배워서 괜찮았는데 필터 만드는 데 좀 고생했습니다 큐ㅠ

        • AND(

          {최신 여부} = 'new',

          {phone} = '{{$node["Airtable Trigger"].json["fields"]["phone"]}}',

          RECORD_ID() != '{{$node["Airtable Trigger"].json["id"]}}'

          )

        • 일단 '최신 여부'가 'new'이면서, 핸드폰번호가 폼에서 받은 핸드폰번호 값과 동일하고, 폼에서 받은 그 정보는 아닌 걸 필터링해주는 것입니다!

        • 어차피 트리거의 output을 그대로 받아오는 거라 "Airtable Trigger"가 꼭 들어가야하는지 모르겠지만, GPT가 그리 알려줬고, 작동에 문제가 없으니 그대로 진행했습니다 ㅋㅋㅋㅋㅋ

      • Update record

        Azure에서 업데이트 레코드 화면의 스크린 샷
        • 이전 output에서 ID가 매칭하는 놈들을 데려와서, '최신 여부'를 'old'로 바꾸는 내용입니다 (아마도...)

결과와 배운 점

여러 가지 색상이있는 테이블

그렇게 해서 만든..!

빨간색은 빨간색끼리, 노란색은 노란색끼리 동일한 번호입니다
(빨간색은 제 실제 번호라...ㅎㅎ / 검은색은 테스트 하면서 쓴 거라 old로 나와있습니다)

가장 마지막으로 들어온 것만 new로 되어있고, 나머지는 old로 바뀐 것을 확인할 수 있었습니다!

이 방식의 한계점

이 내용은 유저가 본인의 '휴대폰번호'는 정확히 쓸 것이라는 가정 하에 만든 것입니다
(이름은 동명이인 이슈, 이메일은 한 명이 보통 여러 개 쓰다보니 어떤 이메일을 썼는지 헷갈려하는 경우가 자주 있어서 ㅠㅠ)

휴대폰번호를 틀렸다거나, 하나의 휴대폰번호로 두 명이 참여하려고 한다거나 (ex. 어린 형제 2명)
하는 경우에는 대처가 불가....

이런 건 이후에 기획적으로 다시 고민을 해봐야겠습니다

gpt 활용 방식

1) 모르는 항목 물어보기

  • 각 항목 (Base, Table) 등의 뜻, 어떤 값을 넣어야 하는지 등에 대해 물어봤습니다.

2) 오류가 날 때 물어보기

  • 이게 하나의 파일로 구성된 것이 아니기 때문에 아래 내용을 캡쳐하거나 글로 작성해서 물어봤습니다

    • 노드 구성

    • 각 노드의 화면

    • 어떤 방식으로 오류가 나는지 설명 (00을 바꾸고 싶은데 00이 바뀌어)

이것저것 시행착오..

  • 폼을 받고 Search 할 때는 폼에서 받은 내용도 포함이 된다

  • 어떤 문제가 발생하고 있는지 잘 알아야 GPT가 어느 정도 해결해줄 수가 있다
    (인풋과 아웃풋에 다른 데이터가 나오고 있었는데... 동일한 데이터라고 착각을 한 상태에서 오류를 설명하는 바람에 GPT와 한참 씨름했습니다... 너가 말한 대로 했는데 왜 안 되냐고 화냈는데 제 잘못이었음 ㅠㅠ)

  • 테스트 하기 전에 컴파일 했나요?

    • (컴파일은 아니지만...) 수정 후 저장을 안 하거나, 활성화를 안 해서 안 돌아간 경우가 매우 자주 있었습니다.....

  • 테이블/API 키 등의 이름을 잘 지어놓자

    • 처음에 테이블/API 키 이름 등등을 다 동일하게 지어놔서 바보같이 헷갈리는 경우가 있었습니다 ㅠㅠ

좀 더 기초를 쌓고 해볼 걸 그랬나 싶긴 하지만
그래도 시행착오하면서 배우는 것도 많은 것 같습니다!
어쨌든 끝내고 나니 후련하네요.

이상 미니사례(?) 같지 않은 미니사례였습니다 (_ _)
읽어주셔서 감사합니다!

2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요