프로그램 (PHP,Python)

Telegram Bot 활용한 채팅 트리거 설정 및 메시지 자동처리 방법

날으는물고기 2024. 10. 18. 00:58

n8n은 오픈 소스 기반의 워크플로 자동화 도구로, 다양한 서비스와의 통합을 지원하여 복잡한 작업을 자동화할 수 있습니다. 그중 Webhook은 외부 서비스로부터 실시간으로 데이터를 받아오는 데 사용되며, 이벤트 중심의 워크플로를 구성하는 데 필수적입니다. Telegram Bot을 통해 받은 메시지를 n8n에서 처리하는 방법을 통해 사용자와의 상호 작용을 자동화하고, 특정 명령어에 대한 응답이나 알림 기능 등을 구현할 수 있습니다.


1. Telegram Bot 생성

Telegram Bot을 만들기 위해 BotFather를 사용합니다. BotFather는 Telegram에서 새로운 봇을 생성하고 관리할 수 있는 공식 계정입니다.

  1. Telegram 앱을 열고 검색 창에서 BotFather를 검색하여 대화를 시작합니다.
  2. 새로운 봇을 생성하기 위해 /newbot 명령어를 입력합니다.
  3. 봇의 이름을 입력합니다. 이 이름은 사용자들이 볼 공식 이름입니다.
  4. 봇의 사용자 이름을 입력합니다. 반드시 bot으로 끝나야 합니다.
  5. 봇이 성공적으로 생성되면 API 토큰이 제공됩니다. 이 토큰은 봇과 통신하는 데 필요하므로 안전하게 보관합니다.
    성공! 이제 봇이 생성되었습니다. 다음은 당신의 봇 토큰입니다: 123456789:ABCdefGHIjklMNO_pqrSTUvwxYZ

2. n8n에 Telegram API 노드 추가

이제 n8n에서 Telegram Bot과 상호 작용하기 위한 설정을 합니다.

  1. n8n 웹 인터페이스에 접속합니다.
  2. 새 워크플로우를 생성합니다.
  3. 좌측 상단의 + 버튼을 클릭하여 노드 추가 창을 엽니다.
  4. 검색 창에 Telegram을 입력하고 Telegram 노드를 선택합니다.
  5. Telegram 노드를 캔버스에 추가합니다.
  6. 노드를 클릭하여 설정 패널을 엽니다.
  7. Credentials 섹션에서 New를 선택하여 새로운 자격 증명을 생성합니다.
  8. Bot Token 필드에 앞서 발급받은 봇 토큰을 입력합니다.
    Bot Token: 123456789:ABCdefGHIjklMNO_pqrSTUvwxYZ
  9. Save 버튼을 눌러 자격 증명을 저장합니다.

3. Webhook 트리거 설정

Telegram에서 오는 메시지를 n8n에서 수신하기 위해 Webhook을 설정합니다.

  1. + 버튼을 클릭하여 Webhook 노드를 추가합니다.
  2. Webhook 노드를 클릭하여 설정 패널을 엽니다.
  3. HTTP MethodPOST로 설정합니다.
  4. Path 필드에 원하는 경로를 입력합니다. (예: /telegram)
  5. 필요에 따라 Options에서 추가 설정을 합니다. (예: CORS 설정)
  6. Webhook 노드Telegram 노드를 연결합니다.
  7. 워크플로우를 저장하고 Activate하여 활성화합니다.

4. Telegram Webhook 설정

Telegram Bot이 n8n의 Webhook URL로 메시지를 전송하도록 설정합니다.

  1. 터미널(명령 프롬프트)을 열어 다음 명령어를 실행합니다.
    curl -F "url=https://<your-n8n-instance>/webhook/telegram" "https://api.telegram.org/bot<your-bot-token>/setWebhook"
    • <your-n8n-instance>를 실제 n8n 인스턴스의 URL로 대체합니다. (예: n8n.example.com)
    • <your-bot-token>을 실제 봇 토큰으로 대체합니다.
  2. 명령어가 성공적으로 실행되면 다음과 같은 응답을 받게 됩니다.
    {"ok":true,"result":true,"description":"Webhook was set"}

5. 메시지 처리

이제 Telegram에서 메시지를 보내면 n8n에서 해당 메시지를 수신하고 처리할 수 있습니다.

  1. Webhook 노드 다음에 Function 노드를 추가하여 메시지를 가공합니다.
  2. Function 노드에서 메시지 내용을 추출하거나 필요한 로직을 구현합니다.
    // 메시지 내용 추출
    const chatId = items[0].json.message.chat.id;
    const text = items[0].json.message.text;
    
    // 응답 메시지 생성
    return [{
      json: {
        chatId: chatId,
        text: `받은 메시지: ${text}`,
      }
    }];
  3. Telegram 노드를 추가하여 사용자에게 응답을 보냅니다.
    • Resource: Message
    • Operation: Send Message
    • Chat ID: {{ $json.chatId }}
    • Text: {{ $json.text }}
  4. 모든 노드가 연결되었는지 확인하고 워크플로우를 저장합니다.

n8n에서 Telegram Bot과 Webhook을 활용하여 실시간으로 메시지를 수신하고 처리하는 방법입니다. 이 설정을 통해 다양한 자동화 작업을 구현할 수 있으며, 사용자와의 상호 작용을 효율적으로 관리할 수 있습니다.

 

추가 팁

  • 보안 강화: Webhook URL에 인증 토큰이나 시크릿을 추가하여 보안을 향상시킬 수 있습니다.
  • 에러 처리: 예상치 못한 입력이나 오류에 대비하여 워크플로우에 에러 처리 로직을 추가하세요.
  • 확장성: 다른 서비스나 API와 연동하여 기능을 확장해 보세요.
  • 참고문서

 

일반적인 Docker 컨테이너 환경에서 Python 애플리케이션을 구성할 수 있습니다. 이를 통해 Python 애플리케이션을 Docker 컨테이너로 실행하는 과정, 실제 Dockerfile 작성부터 컨테이너 실행까지 단계별로 설정할 수 있습니다.

Python 애플리케이션을 위한 Docker 환경 구성

1. Python 애플리케이션 준비

간단한 Python 애플리케이션을 작성합니다. 이 예시는 Flask 웹 프레임워크를 사용하여 간단한 HTTP 서버를 실행하는 Python 코드를 보여줍니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker with Python!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

이 Flask 애플리케이션은 기본적으로 5000번 포트에서 HTTP 요청을 수신하며, / 경로로 접속 시 간단한 메시지를 반환합니다.

2. Python 의존성 관리

Python 애플리케이션에 필요한 의존성은 requirements.txt 파일에 기록됩니다. 이 파일은 Docker 컨테이너 내에서 Python 패키지를 설치하는 데 사용됩니다.

Flask==2.0.1

3. Dockerfile 작성

이제 위의 Python 애플리케이션을 Docker 컨테이너에서 실행하기 위해 Dockerfile을 작성합니다. Dockerfile은 애플리케이션 빌드 및 실행에 필요한 설정을 포함하고 있습니다.

# 1. Python 베이스 이미지 선택
FROM python:3.9-slim

# 2. 컨테이너 내 작업 디렉토리 설정
WORKDIR /app

# 3. 의존성 파일 복사 및 설치
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# 4. 애플리케이션 소스 코드 복사
COPY . .

# 5. 컨테이너 시작 시 실행할 명령어
CMD ["python", "app.py"]

# 6. 애플리케이션이 사용할 포트 설정
EXPOSE 5000
  • FROM python:3.9-slim: Python 3.9이 설치된 경량 버전의 Docker 베이스 이미지를 사용합니다.
  • WORKDIR /app: 컨테이너 내부에서 작업 디렉토리를 /app으로 설정합니다.
  • COPY requirements.txt ./: 로컬의 requirements.txt 파일을 컨테이너 내부로 복사합니다.
  • RUN pip install --no-cache-dir -r requirements.txt: Python 패키지 의존성을 설치합니다.
  • COPY . .: 로컬의 모든 파일을 컨테이너 내부로 복사합니다.
  • CMD ["python", "app.py"]: 컨테이너가 시작될 때 python app.py 명령어로 애플리케이션을 실행합니다.
  • EXPOSE 5000: Flask 서버가 5000번 포트를 사용하므로 이 포트를 노출합니다.

4. Docker 이미지 빌드

작성한 Dockerfile을 사용하여 Docker 이미지를 빌드합니다. 터미널에서 애플리케이션이 위치한 디렉토리로 이동한 후, 다음 명령어를 실행합니다.

docker build -t python-flask-app .

이 명령어는 현재 디렉토리에 있는 Dockerfile을 사용하여 python-flask-app이라는 이름으로 이미지를 빌드합니다.

5. Docker 컨테이너 실행

이미지 빌드가 완료되면, 해당 이미지를 기반으로 컨테이너를 실행할 수 있습니다. 다음 명령어를 사용하여 Flask 서버를 백그라운드에서 실행합니다.

docker run -d -p 5000:5000 python-flask-app
  • -d 옵션은 컨테이너를 백그라운드에서 실행하는 옵션입니다.
  • -p 5000:5000 옵션은 호스트의 5000번 포트를 컨테이너의 5000번 포트에 매핑하는 옵션입니다.

컨테이너가 실행되면, 로컬 브라우저에서 http://localhost:5000에 접속하여 Flask 애플리케이션이 정상적으로 동작하는지 확인할 수 있습니다.

6. Docker Compose로 환경 관리

하나 이상의 컨테이너로 구성된 애플리케이션을 관리할 때는 Docker Compose를 사용하면 유용합니다. Docker Compose는 여러 컨테이너를 정의하고 실행하는 데 사용되는 도구입니다.

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"

위의 docker-compose.yml 파일을 작성한 후, 다음 명령어를 통해 애플리케이션을 실행할 수 있습니다.

docker-compose up

이 명령어는 Docker Compose에 정의된 서비스를 빌드하고 실행합니다. Ctrl + C를 눌러 실행을 중지할 수 있습니다.

7. 컨테이너 종료 및 정리

컨테이너가 더 이상 필요하지 않으면, 다음 명령어를 사용하여 실행 중인 컨테이너를 중지하고 제거할 수 있습니다.

docker stop <컨테이너 ID>
docker rm <컨테이너 ID>

실행 중인 컨테이너 ID는 docker ps 명령어로 확인할 수 있습니다.

 

Dockerfile을 작성하고 이미지를 빌드하며, 컨테이너를 실행하는 과정은 Python 뿐만 아니라 다양한 언어와 애플리케이션에서도 동일하게 적용할 수 있습니다. Docker Compose를 사용하면 여러 개의 컨테이너로 구성된 애플리케이션을 더 쉽게 관리할 수 있습니다.

 

이 방법을 통해 n8n과 같은 자동화 도구뿐만 아니라, 다양한 애플리케이션을 효율적으로 배포하고 관리할 수 있습니다.

728x90