레오
🏡 내집마련 찐친
📚 학습반장
☕ 커피챗 오픈

(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 둘다 사용해보시길 추천드립니다!

5
1개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.