Telegram으로 Google Calendar 관리하는 MCP 만들기

소개

일정, 일정, 일정!!

겹겹이 쌓여 있는 일정들… 사람이 하나하나 처리하기엔 너무 번거롭죠! 😮‍💨
구축해 본 워크플로우는 Telegram으로 들어온 음성·텍스트 요청을 AI가 처리해 Google Calendar에 자동 반영하고, 결과를 다시 Telegram으로 회신하는 구조입니다. 🎯

다른 서비스 추가 연동을 위해서 MCP 형태로 구현해 보았으며, 이번 케이스에선 음성과 텍스트 처리와 개인별/업무용 캘린더 관리까지의 과정을 자동화하는 데 집중했습니다.

진행 방법

🧭 전체 흐름 요약

시스템의 다른 부분을 보여주는 다이어그램

노드별 구성

1. Telegram Trigger

  • 사용자로부터 텍스트 or 음성 메시지를 수신하는 시작점

  • 메시지 종류 구분 없이 모두 받아 처리합니다.

    Telegram Triggerr의 스크린 샷

2. Switch

  • 메시지에 voice 필드가 있으면 음성 경로로,

  • 없으면 텍스트 경로로 분기합니다.

    iPhone 설정의 스크린 샷

3. Get a file (Telegram)

  • 음성 메시지일 경우, Telegram 서버로부터 실제 오디오 파일을 다운로드합니다.

    Telegram에 연결할 파일을 가져옵니다

4. Transcribe a recording (OpenAI Whisper)

  • 음성 파일을 받아 텍스트로 변환합니다.

  • Whisper 모델을 사용하여 빠르고 정확하게 인식

    • OpenAI Whisper 모델: OpenAI가 2022년에 공개한 자동 음성 인식(ASR, Automatic Speech Recognition) 모델입니다. 다양한 언어의 음성을 텍스트로 변환하는 작업뿐만 아니라, 음성 번역(주로 영어로), 음성 활동 감지, 그리고 언어 식별 같은 여러 작업도 할 수 있는 멀티태스킹 모델

5. Edit Fields

  • 텍스트 메시지와 음성 인식 결과를 하나의 공통 필드(message.text)로 통합합니다.

  • 이후 AI Agent가 어떤 경로에서 왔는지 구분 없이 처리할 수 있게 함

6. AI Agent

  • OpenAI 기반 Chat Model과 여러 툴을 연결한 자동화의 핵심 노드

  • 역할:

    • 사용자 요청 내용 분석

    • 개인/업무 일정 조회/생성/수정/삭제

    • 사용자와의 대화 컨텍스트 유지 (Memory)

    • Prompt

      {{ $json.message.text }}
      
      Current Information:
      - Current time: {{ $now.setTimezone('Asia/Seoul').format('YYYY-MM-DD HH:mm:ss') }}
      - Timezone: Asia/Seoul (UTC+9)
      - Location: South Korea
      - Today is: {{ $now.format('dddd, MMMM Do, YYYY') }}
      
      When parsing any time expression (e.g. "9시", "tomorrow 3pm"), assume the timezone is strictly **Asia/Seoul (UTC+9)**.
      When users mention times without dates, assume they mean today. 
      When users mention relative times like "내일", "다음 주", convert them to specific dates and times.
      All calendar events should be scheduled in Korean timezone (Asia/Seoul).
      
      ### Calendar
      캘린더는 두 개의 MCP로 나뉘어 관리됩니다.
      1.MCP-private-gcalendar
       - Private/Personal/개인용
      2.MCP-work-gcalendar
       - Work/Business/Office/회사용
      
      #### MCP 노드별 기능
       - calendar 조회 : getAll
       - calendar 생성 : create
       - calendar 수정 : update
       - calendar 삭제 : delete

7. Telegram Response

  • AI Agent 결과를 텍스트로 사용자에게 다시 전송합니다.

  • 향후 요약 + TTS 기능을 여기에 추가할 수 있음

결과와 배운 점

  • 텍스트/음성 통합 처리 덕분에 파이프라인을 단순하게 유지할 수 있었음

  • Google Calendar 연동은 MCP로 모듈화 되어서 확장성 있게 구성 가능

    다양한 유형의 MCP를 보여주는 다이어그램
  • AI Agent 사용을 위해서 Telegram Trigger는 별도의 세션 ID를 제공하지 않기 때문에,
    **Edit Fields 노드와 Memory 서브노드 모두에서 **``를 명시적으로 세션 키로 지정해야 합니다.
    이 중 하나라도 누락되면 'Key parameter is empty' 또는 세션 불일치 등의 오류가 발생할 수 있으므로,
    반드시 두 노드 모두 설정을 일관되게 적용해야 합니다. (본 워크 플로우에서는 "{{ $json.message.chat.id }}")

  • 다만, 일정 수정이나 삭제 시 기존 일정을 제대로 찾지 못하는 문제가 간헐적으로 발생함. 특히 시간대(timezone) 해석 문제로 인해 정확히 일치하지 않는 경우가 있어, 추후 표현식 개선이나 기준 시간 통일 필요

👉 이 게시글도 읽어보세요