(3주차) FastAPI와 n8n을 활용한 요약 챗봇 자동화 사례

1. FastAPI를 활용한 퍼플렉시티 요약봇 만들기

유튜브 자막을 요약하기 위해 FastAPI 기반 요약 서버를 만들었습니다. 요약 모델은 퍼플렉시티 또는 ChatGPT를 사용할 수 있으며, 핵심은 서버가 항상 실행 중이어야 한다는 점입니다.

✅ 핵심 포인트

  • 서버 세팅: 디지털오션 서버를 활용하여 외부 접속 가능하게 uvicorn 설정

  • systemd를 활용해 서버를 항상 실행 상태로 유지

  • 현우님이 제공한 perbot.js와 Python main.py 구조로 구성

🔧 FastAPI 코드 예시

📷 실제 동작 화면

  • 사용자가 '검색 오늘 날씨' 입력

  • 레오봇이 FastAPI 서버를 호출해 Perplexity 응답을 받아 전달

  • 풍부한 자연어 요약으로 사용자에게 응답됨

💡 PerBot.js: FastAPI 서버를 호출하는 메신저봇R 스크립트

// Perplexity 검색 요청을 FastAPI 서버에 전달하고 응답을 받아오는 봇
// 작동 방식:
// 1. 사용자가 "검색 [질문]" 입력
// 2. FastAPI 서버의 /search 엔드포인트에 POST 요청 전송
// 3. 서버가 Perplexity API를 호출하여 응답 생성 후 반환

var bot = BotManager.getCurrentBot();

var CONFIG = {
    BOT_NAME: "PerBot",
    VERSION: "1.0.0",
    TARGET_ROOMS: ["레오봇", "명한일"],
    API_URL: "http://0000.0000.000.00:8000",
    TRIGGER_PREFIX: "검색"
};

function searchPerplexity(query, room) {
    new java.lang.Thread(function() {
        try {
            var conn = org.jsoup.Jsoup.connect(CONFIG.API_URL + "/search")
                .ignoreContentType(true)
                .header("Content-Type", "application/json")
                .timeout(30000)
                .requestBody(JSON.stringify({ query: query }))
                .method(org.jsoup.Connection.Method.POST);

            var response = conn.execute();
            var statusCode = response.statusCode();
            var responseText = response.body();

            if (statusCode === 200) {
                var result = JSON.parse(responseText);
                bot.send(room, result.answer);
            } else {
                bot.send(room, "❌ 오류 발생 (HTTP " + statusCode + ")");
            }
        } catch (e) {
            bot.send(room, "❌ 서버 연결 오류");
        }
    }).start();
}

function onMessage(msg) {
    if (CONFIG.TARGET_ROOMS.indexOf(msg.room) === -1) return;
    var content = msg.content.trim();
    if (content.indexOf(CONFIG.TRIGGER_PREFIX + " ") === 0) {
        var query = content.substring(CONFIG.TRIGGER_PREFIX.length + 1).trim();
        if (query.length === 0) {
            bot.send(msg.room, "❓ 검색어를 입력해주세요. 예: 검색 오늘 날씨");
            return;
        }
        searchPerplexity(query, msg.room);
    }
}

bot.addListener(Event.MESSAGE, onMessage);

sudo nano /etc/systemd/system/leo.service
# 서비스이름은 leo

[Unit]
Description=FastAPI Server Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/fastapi-project
ExecStart=/root/fastapi-project/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 적용 명령어
sudo systemctl daemon-reload             # 새 서비스 인식
sudo systemctl enable leo.service        # 부팅 시 자동 시작 설정
sudo systemctl start leo.service         # 서비스 시작
sudo systemctl status leo.service        # 서비스 상태 확인
sudo journalctl -u leo.service -f        #서비스 로그 실시간 보기 (별도창)

2. n8n을 활용한 챗봇 만들기

FastAPI 요약 서버가 준비되었다면, 이제 n8n을 활용해 요약 요청을 보내고 응답을 받는 챗봇 자동화가 가능합니다. 아래는 두 가지 실제 사례입니다.

📌 유튜브 자막 요약 챗봇

  • 유튜브 링크를 Webhook으로 받음 → 유튜브 커뮤니티 노드로 자막 추출 → FastAPI로 요약 요청 → 응답 결과를 메신저로 전송

  • 처음에는 여러 Python 스크립트, 커뮤니티 노드를 시도했지만 실패 😥

  • 모각글 스터디 중 이재엽님이 추천해주신 유튜브 커뮤니티 노드(nodes-bandi) 덕분에 해결! 🙌 커뮤니티노드는 n8n

📸 실패 및 성공 사례

  • ❌ JSON 파싱 오류 사례 (응답 텍스트에 큰따옴표 누락 등)

  • ✅ 성공적으로 응답 파싱된 사례

📸 워크플로우 스크린샷

  • 유튜브 링크를 Webhook으로 받음 → 유튜브 커뮤니티 노드로 자막 추출 → FastAPI로 요약 요청 → 응답 결과를 메신저로 전송

  • 처음에는 여러 Python 스크립트, 커뮤니티 노드를 시도했지만 실패 😥

  • 모각글 스터디 중 이재엽님이 추천해주신 유튜브 커뮤니티 노드(Bandi) 덕분에 해결! 🙌

  • 혹시 커뮤니티노드 처음 하시는분들 참고용으로 ..

    통나무의 새로운 기능
로그 아웃 버튼은 설정 페��이지에서 강조 표시됩니다.
Facebook 페이지의 커뮤니티 설정 페이지의 스크린 샷
NN 노드 YouTube Transcript라는 단어가 포함 된 한국 웹 사이트의 스크린 샷

browse에서 npm패키지를 찾아서 넣고, 마지막에 Install 하면 끝남.

📸 워크플로우 스크린샷

YouTube 비디오 생성 과정을 보여주는 화면

📌 파산자 공매 챗봇 (매일 아침 자동 알림)

  • Hope님이 작성한 n8n 사례 글을 그대로 참고해 구성

  • 대법원 공매 사이트에서 HTML 크롤링 → 필터링 → 요약 또는 Google Sheet 저장 → 메신저 자동 전송

📸 워크플로우 스크린샷
Hope님 워크플로우


웹훅과 code node한개 추가함

결과와 배운 점

✅ 성과

  • FastAPI + n8n 조합으로 내가 만든 서버 기능을 자동화로 연결

  • 코드 작성과 워크플로우 설정이 만나 실전에서 바로 써먹을 수 있는 시스템이 완성됨

😅 시행착오

  • FastAPI 서버 외부 접근 안 될 때 → --host 0.0.0.0 설정으로 해결

  • 커뮤니티 노드 선택이 매우 중요! 잘 만든 노드가 생산성 급상승시킴

🔮 앞으로는?

  • 감정 분석, 키워드 추출 등 추가 기능 FastAPI로 확장 예정

  • 슬랙/카카오 외 다양한 채널에도 동시에 전송하는 멀티 플랫폼 봇 구상 중

도움 받은 자료


코딩과 자동화 툴을 동시에 다뤄보니, “내가 만든 코드를 워크플로우에서 바로 불러 쓴다”는 재미가 정말 큽니다 😄
카카오챗봇을 위해서 FastAPI + n8n 둘다 사용해보시길 추천드립니다!

4
1개의 답글

👉 이 게시글도 읽어보세요