ㄹㄹ
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const config = useRuntimeConfig()
|
||||
const body = await readBody(event)
|
||||
|
||||
const {
|
||||
studentName,
|
||||
parentPhone,
|
||||
name,
|
||||
phone,
|
||||
schoolName,
|
||||
grade,
|
||||
location,
|
||||
regionName,
|
||||
memo,
|
||||
url
|
||||
} = body || {}
|
||||
|
||||
const finalStudentName = studentName || name || '미기재'
|
||||
const finalParentPhone = parentPhone || phone || ''
|
||||
const finalLocation = location || regionName || '미기재'
|
||||
const finalGrade = grade || '미지정'
|
||||
const finalSchool = schoolName || '미기재'
|
||||
|
||||
if (!finalParentPhone) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: '부모님 연락처를 올바르게 입력해주세요.'
|
||||
})
|
||||
}
|
||||
|
||||
const webhookUrl = config.discordWebhookUrl || 'https://discordapp.com/api/webhooks/1557204310369116210/9J4y96kmSbYNGtw5OxRgIz7InWcM8o3f8UX0Ad71-IyofwdS7tWmXkF7dj457-I8Ypiu'
|
||||
const siteName = config.public.siteName || '1:1 맞춤과외'
|
||||
const siteDomain = config.public.siteDomain || 'https://aeseo.cloud'
|
||||
|
||||
// 한국 시간 (KST)
|
||||
const now = new Date()
|
||||
const kstTime = new Intl.DateTimeFormat('ko-KR', {
|
||||
timeZone: 'Asia/Seoul',
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hour12: false
|
||||
}).format(now)
|
||||
|
||||
// 디스코드 Embed 페이로드 (이모지 완전 배제, 깔끔한 직사각형 뱃지 규격)
|
||||
const discordPayload = {
|
||||
username: `${siteName} 상담 알림 봇`,
|
||||
avatar_url: 'https://cdn-icons-png.flaticon.com/512/2997/2997295.png',
|
||||
embeds: [
|
||||
{
|
||||
title: `[신규 무료 상담 신청 접수] ${finalLocation} - ${finalGrade} (${finalStudentName} 학생)`,
|
||||
description: `**${siteName}** 사이트에서 새로운 1:1 학습 상담 신청이 접수되었습니다.`,
|
||||
color: 0x991b1b, // 신뢰감 있는 딥 레드/네이비
|
||||
fields: [
|
||||
{
|
||||
name: "[접수 사이트]",
|
||||
value: `**${siteName}**\n${siteDomain}`,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "[사는 곳]",
|
||||
value: finalLocation,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "[학생 이름]",
|
||||
value: `**${finalStudentName}**`,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "[부모님 연락처]",
|
||||
value: `**${finalParentPhone}**`,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "[다니는 학교]",
|
||||
value: finalSchool,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "[학년]",
|
||||
value: finalGrade,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "[접수 일시 (KST)]",
|
||||
value: kstTime,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "[유입 페이지 URL]",
|
||||
value: url ? `${url}` : `${siteDomain}`,
|
||||
inline: false
|
||||
},
|
||||
{
|
||||
name: "[상담문의 내용 (선택)]",
|
||||
value: memo && memo.trim() ? memo.trim() : '입력된 상세 문의 내용 없음',
|
||||
inline: false
|
||||
}
|
||||
],
|
||||
footer: {
|
||||
text: `${siteName} 실시간 상담 알림 시스템`
|
||||
},
|
||||
timestamp: now.toISOString()
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
try {
|
||||
const res = await fetch(webhookUrl, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(discordPayload)
|
||||
})
|
||||
|
||||
if (!res.ok) {
|
||||
const errText = await res.text()
|
||||
console.error('[Discord Webhook Error]:', res.status, errText)
|
||||
return {
|
||||
success: false,
|
||||
message: '디스코드 전송 중 오류가 발생했습니다.'
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: '상담 신청이 정상적으로 완료되었습니다.'
|
||||
}
|
||||
} catch (err: any) {
|
||||
console.error('[Consult Submission Error]:', err.message)
|
||||
return {
|
||||
success: false,
|
||||
message: '서버 오류로 인해 전송에 실패했습니다.'
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user