오픈소스를 이용한 챗봇 제작하기

typebot이라는 오픈소스를 이용해 챗봇을 만들기가 매우 쉽습니다.

사내에서 챗봇에 대한 니즈가 있어서 오픈소스를 찾아서 이거 저거 써봤는데 typebot이 가장 좋더군요.

우선 chatgpt가 알려주는 typebot의 설명입니다.

Typebot은 대화형 봇을 구축하고 운영하기 위한 플랫폼으로, 코드 작성 없이도 다양한 대화형 봇을 설계하고 배포할 수 있는 환경을 제공합니다. 주로 사용자와의 상호작용을 간소화하거나 고객 지원, 정보 제공, 자동화된 프로세스를 처리하기 위해 사용됩니다.

아래는 Typebot의 주요 특징과 기능, 사용 사례를 정리한 내용입니다.


1. Typebot의 주요 특징

1.1. 코드 없이 쉽게 설계 가능

  • 드래그 앤 드롭 인터페이스를 통해 복잡한 대화 흐름을 설계할 수 있습니다.
  • 초보자도 이해하기 쉬운 직관적인 UI 제공.

1.2. 멀티 플랫폼 지원

  • Slack, WhatsApp, 웹사이트, Facebook Messenger 등 다양한 플랫폼과의 통합이 가능.
  • 웹 임베드(embed) 기능을 통해 웹사이트에 쉽게 추가 가능.

1.3. 강력한 커스터마이징

  • 봇의 대화 스타일, 답변 논리, 조건 등을 세부적으로 설정 가능.
  • 사용자 입력에 따라 동적으로 반응하는 대화 흐름 설계 가능.

1.4. API와의 통합

  • 외부 API와의 연동을 통해 데이터를 가져오거나 동적으로 데이터를 처리 가능.
  • 예: 데이터베이스 조회, AI API 연동 등.

1.5. 분석 및 통계

  • 사용자와의 대화 데이터를 분석하여 성능 개선 가능.
  • 사용량, 클릭률, 대화 성공률 등을 시각화하여 제공.

2. 주요 기능

2.1. 대화 흐름 설계

  • 질문-응답 시퀀스를 블록으로 정의.
  • 조건 분기와 반복 로직 지원.

2.2. 사용자 입력 처리

  • 버튼 선택, 텍스트 입력, 날짜 선택 등의 다양한 입력 방식을 지원.
  • 사용자의 입력을 변수로 저장하여 다른 블록에서 재사용 가능.

2.3. 멀티미디어 지원

  • 이미지, 동영상, 링크, 파일 등을 전송 가능.

2.4. 외부 서비스 연동

  • Zapier, Integromat 같은 자동화 플랫폼과 통합.
  • Google Sheets, CRM, 이메일 서비스 등과 연동.

2.5. 다국어 지원

  • 여러 언어로 대화를 설정 가능.
  • 다국어를 사용하는 글로벌 사용자층에 적합.

3. 사용 사례

3.1. 고객 지원

  • 자주 묻는 질문(FAQ) 자동화.
  • 간단한 문제 해결 봇 구축.

3.2. 예약 시스템

  • 사용자가 날짜와 시간을 선택하면 예약을 처리.
  • 예약 확인 이메일 또는 알림 발송.

3.3. 리드 생성

  • 웹사이트 방문자와의 대화를 통해 잠재 고객 데이터를 수집.
  • 설문조사나 의견 수집.

3.4. 교육

  • 대화형 학습 모듈 제공.
  • 퀴즈 및 테스트 자동화.

4. 장점

  1. 사용 편의성: 프로그래밍 지식 없이도 빠르게 설정 가능.
  2. 유연성: 다양한 플랫폼과 통합 가능.
  3. 확장성: 외부 API와 연동하여 기능을 무한히 확장할 수 있음.
  4. 비용 효율성: 비교적 저렴한 비용으로 기업용 봇 구축 가능.

이제 설치에 대해 알아 봅시다.

  1. 도커 설치(도커가 제일 만만하고 편하죠~)
    sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && echo “deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin && sudo usermod -aG docker $USER && newgrp docker

    2. typebot 디렉토리 생성
    sudo mkdir typebot

3. docker-compose.yml 생성
version: ‘3.3’

volumes:
db-data:

services:
typebot-db:
image: postgres:16
restart: always
volumes:
– db-data:/var/lib/postgresql/data
environment:
– POSTGRES_DB=typebot
– POSTGRES_PASSWORD=typebot
healthcheck:
test: [“CMD-SHELL”, “pg_isready -U postgres”]
interval: 5s
timeout: 5s
retries: 5
typebot-builder:
image: baptistearno/typebot-builder:latest
restart: always
depends_on:
typebot-db:
condition: service_healthy
ports:
– ‘8080:3000’
extra_hosts:
– ‘host.docker.internal:host-gateway’
env_file: .env

typebot-viewer:
image: baptistearno/typebot-viewer:latest
depends_on:
typebot-db:
condition: service_healthy
restart: always
ports:
– ‘8081:3000’
env_file: .env

4. .env 파일 생성
Make sure to change this to your own random string of 32 characters (https://docs.typebot.io/self-hosting/deploy/docker#2-add-the-required-configuration)

ENCRYPTION_SECRET=do+UspMmB/rewbX2K/rskFmtgGSSZ8Ta

DATABASE_URL=postgresql://postgres:typebot@typebot-db:5432/typebot

NODE_OPTIONS=–no-node-snapshot

NEXTAUTH_URL=(서버 ip 혹은 도메인 기입)(관리자 페이지)
NEXT_PUBLIC_VIEWER_URL=(서버 ip 혹은 도메인 기입)(챗봇 뷰어)

ADMIN_EMAIL=(관리자 이메일)

5. docker compose up -d 명령어로 실행


* 주의사항: smtp를 꼭 설정해줘야 합니다. 그래야 관리자 페이지로 들어가거나 할때 매직링크(이메일로 코드 날라오면 해당 코드로 접속) 사용이 가능합니다.

로그인을 하면 나오는 첫 화면.. 저기서 + 버튼을 눌러서 챗봇을 만들 수 있습니다.

챗봇 크레에이터 버튼을 누르면 나오는 화면, 첫번째는 스크래치를 이용해서 블럭 쌓기 처럼 챗봇을 만들 수 있는 메뉴.

두번째는 예제 파일을 이용해서 만드는 경우. 우리는 두번째 예제 파일을 살펴볼껍니다.

템플릿 메뉴를 누르면 나오는 화면입니다. 좌측은 여러가지 예제가 있고, 예제를 선택하면 우측에는 예제가 실행되는 화면이 나옵니다. 이것을 선택해 보도록 하죠.

자 그러면 이렇게 스크래치 화면이 나오고 우측 하단에 머머리 아저씨의 동영상 설명이 나옵니다. 좌측에는 여러가지 메뉴 박스가 있고 해당 기능을 이용해서 계속해서 챗봇을 구축해 나가면 됩니다.

몇번만 해 보면 감이 오실꺼에요, 매우 쉽습니다. 물론 고급기능을 사용하기에는 부족할 수 있지만, 일반적인 챗봇은 대부분 구현이 가능할 정도로 쉽고 정교하게 구축이 가능합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다