AI/생성형AI

[GPT업무자동화](6)GPTs에 메일 외부 자원 연동하기(Webhook)

CodeMasterSong 2025. 5. 7. 19:01
반응형

✨ 명언 생성 후 메일로 전송하는 기능 추가하기 (방법2)

이 글에서는 생성한 명언을 "내 이메일로 받는" 기능을 추가하는 또 다른 방법을 정리해 보겠습니다. 본 글의 목적은 GPTs에 외부 자원을 이용하는 방법을 이해하는 것입니다. 외부 자원은 다양한 종류가 있으며 한 종류인 이메일 전송 기능을 추가해 보겠습니다.   


🛠️ 준비물

  • 앞서 만들었던 "명언 생성 GPTs"
  • Google 계정 (Google Apps Script 사용)
  • 메일을 받을 이메일 주소

📍Step 1: 메일 발송용 Webhook 만들기

메일을 전송하기 위해, 간단한 Webhook 파일을 만들게 됩니다.

Google Apps Script(GAS)를 활용해 무료로 작성할 수 있습니다. 

1.1 Google Apps Script 새 프로젝트 만들기

  1. Google Apps Script 에 접속
  2. "새 프로젝트" 클릭

g1


1.2 코드 작성

함수 부분에 다음 코드를 작성합니다.

/**
 * POST 요청으로 받은 JSON 바디에서
 *   { to, subject, quote }
 * 필드를 추출해 GmailApp.sendEmail 로 전송합니다.
 */
function doPost(e) {
  try {
    // 1) 요청 바디 파싱
    const body = JSON.parse(e.postData.contents);
    const to      = body.to;
    const subject = body.subject || '오늘의 명언';
    const quote   = body.quote;

    // 2) 필수값 검증
    if (!to || !quote) {
      return ContentService
        .createTextOutput(JSON.stringify({ error: 'to와 quote를 모두 입력해야 합니다.' }))
        .setMimeType(ContentService.MimeType.JSON);
    }

    // 3) 메일 전송
    GmailApp.sendEmail(to, subject, quote);

    // 4) 성공 응답
    return ContentService
      .createTextOutput(JSON.stringify({ status: 'success' }))
      .setMimeType(ContentService.MimeType.JSON);

  } catch (err) {
    // 에러 응답
    return ContentService
      .createTextOutput(JSON.stringify({ error: err.message }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}

1.3 배포하기 (Webhook URL 만들기)

  1. 프로젝트 메뉴에서 "배포" → "웹 앱으로 배포" 클릭
  2. "새 버전 만들기" 선호
  3. 다음과 같이 설정
    • 웹 앱 액세스: "여러 사용자 (익명)"
  4. 배포 후 URL 복사

g2
g3
s3
ss3
ddd4
ff3

1.4 설정 ISSUE

  • Google Apps Script API 사용으로 설정하기

a1


📍Step 2: GPTs Builder에서 메일 발송 기능 추가

GPTs Builder에서 명언 생성에 관한 앱의 이름, 설명 그리고 지침등을 입력한 후 Action 작업을 다음과 같이 설정합니다.

2.1 Actions 설정하기

  1. "구성" 탭에서 "Action 추가" 버튼 클릭
  2. 인증란에는 없음으로 선택한 후에 스키마 부분에 다음을 입력합니다.

"url": "https://script.google.com/macros/s/XXXXXXXXX/exec" 에는 여러분들이 Google Apps Script 에서 생성한 프로젝트에서 발급된 url를 그대로 작성합니다. (보안 부분은 고려하지 않음)

{
  "openapi": "3.1.0",
  "info": {
    "title": "명언 메일 전송 API",
    "version": "1.0.0",
    "description": "GPT가 생성한 명언을 받아서 Gmail로 전송하는 Webhook 액션 스키마"
  },
  "servers": [
    {
      "url": "https://script.google.com/macros/s/XXXXXXXXX/exec",
      "description": "명언 전송용 Webhook URL"
    }
  ],
  "paths": {
    "/exec": {
      "post": {
        "operationId": "sendQuote",
        "summary": "명언 메일 전송",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendQuoteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "성공 시 반환",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "description": "‘success’ 또는 ‘error’"
                    },
                    "error": {
                      "type": "string",
                      "description": "실패 시 에러 메시지"
                    }
                  },
                  "required": [
                    "status"
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "SendQuoteRequest": {
        "type": "object",
        "required": [
          "to",
          "quote"
        ],
        "properties": {
          "to": {
            "type": "string",
            "format": "email",
            "description": "수신자 이메일 주소"
          },
          "subject": {
            "type": "string",
            "description": "메일 제목 (미지정 시 ‘오늘의 명언’ 사용)",
            "default": "오늘의 명언"
          },
          "quote": {
            "type": "string",
            "description": "전송할 명언 텍스트"
          }
        }
      }
    }
  }
}

2.2 지시문(Instructions) 수정

Action을 연결한 후, 지시문을 같이 수정해야 합니다.

 

  • 수정된 Instructions 예시(1)
사용자가 명언을 생성해달라고 요청하면 하루를 공정적으로 시작할 수 있는 짧은 명언을 생성하세요.
사용자가 "메일로 보내줄래" 또는 메일 발송을 원하면, 생성한 명언을 외부 Webhook을 통해 사용자 지정 이메일 주소로 전송하세요.
메일 제목은 "오늘의 명언", 부문은 생성한 명언입니다.
  • 수정된 Instructions 예시(2)
# 시스템
당신은 오늘의 명언을 생성하고, 사용자가 지정한 이메일로 전송하는 역할을 합니다.

# 사용자 예시
“오늘의 명언을 하나 만들어서 
to: yyy@zzz.com
subject: “하루 한 줄”
quote: <생성된 명언 텍스트>
이렇게 Webhook에 POST 요청을 보내고, 
성공 여부를 알려줘.”

📍Step 3: 기능 테스트

GPTs를 시작하고 다음과 같이 입력 후 메일 전송을 확인합니다. 

g7
g8
g10


GPTs에서 외부 자원을 이용하는 경우는 다양합니다. 그리고 이전 글과 현재 글에서 언급한 메일 전송도 외부 자원이며 메일을 연동하는 방법도 다양합니다. 외부 자원 연동하는 다양한 방법을 익히고 프로젝트의 규모 및 용도에 따라 선택하여 사용합니다.

반응형