1. FastAPI를 활용한 퍼플렉시티 요약봇 만들기
유튜브 자막을 요약하기 위해 FastAPI 기반 요약 서버를 만들었습니다. 요약 모델은 퍼플렉시티 또는 ChatGPT를 사용할 수 있으며, 핵심은 서버가 항상 실행 중이어야 한다는 점입니다.
✅ 핵심 포인트
서버 세팅: 디지털오션 서버를 활용하여 외부 접속 가능하게 uvicorn 설정
systemd를 활용해 서버를 항상 실행 상태로 유지
현우님이 제공한
perbot.js와 Pythonmain.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) 덕분에 해결! 🙌
혹시 커뮤니티노드 처음 하시는분들 참고용으로 ..
browse에서 npm패키지를 찾아서 넣고, 마지막에 Install 하면 끝남.
📸 워크플로우 스크린샷
📌 파산자 공매 챗봇 (매일 아침 자동 알림)
Hope님이 작성한 n8n 사례 글을 그대로 참고해 구성
대법원 공매 사이트에서 HTML 크롤링 → 필터링 → 요약 또는 Google Sheet 저장 → 메신저 자동 전송
📸 워크플로우 스크린샷
Hope님 워크플로우
웹훅과 code node한개 추가함
결과와 배운 점
✅ 성과
FastAPI + n8n 조합으로 내가 만든 서버 기능을 자동화로 연결
코드 작성과 워크플로우 설정이 만나 실전에서 바로 써먹을 수 있는 시스템이 완성됨
😅 시행착오
FastAPI 서버 외부 접근 안 될 때 →
--host 0.0.0.0설정으로 해결커뮤니티 노드 선택이 매우 중요! 잘 만든 노드가 생산성 급상승시킴
🔮 앞으로는?
감정 분석, 키워드 추출 등 추가 기능 FastAPI로 확장 예정
슬랙/카카오 외 다양한 채널에도 동시에 전송하는 멀티 플랫폼 봇 구상 중
도움 받은 자료
코딩과 자동화 툴을 동시에 다뤄보니, “내가 만든 코드를 워크플로우에서 바로 불러 쓴다”는 재미가 정말 큽니다 😄
카카오챗봇을 위해서 FastAPI + n8n 둘다 사용해보시길 추천드립니다!