청몬 비치에서 예약을 하세요.

원활한 일정 관리의 편리함을 누리세요.

완벽한 스파 하루를 쉽고 효율적으로 계획할 수 있는 방법을 경험해보세요!

Choengmon Beach Branch

S 지점

S 지점을 위해 예약하고 있습니다.

Google 지도 열기 다른 지점 선택하기

살롱에서의 마사지

나키 살롱에서 전체 세션을 즐기세요.

원하는 위치에서 마사지

집, 호텔, 별장 등 원하는 장소에서 편안하게 휴식을 취하세요.

예약 가능

에서 10:00 AM

서비스 선택:
서비스를 추가하세요.
    치료사 선택:
    치료사를 선택하거나 비워두면 요청하신 서비스에 따라 적합한 치료사를 배정해 드립니다.
      또는
      ⚠️ 선택한 앱을 통해 예약 요청을 보내주시기 바랍니다. WhatsApp 또는 Line을 통해서만 예약을 확인합니다.
      ℹ️ 예약 선택에 따라 형식이 지정된 메시지가 생성됩니다. 위에 나열된 선호하는 메시징 앱을 통해 보낼 수 있습니다.
      '; $( window ).on( "resize", function() { on_resize(); }); on_resize(); attentionBoxShift(); $("#view_products,.choosed_products,#open_service-menu").on('click',function(){ $("#products_list_pop").show(300); $(".choosed_products").addClass('error'); setTimeout(function(){ $("body").addClass("product_chooser"); },300); }); $("#products_list_pop_close").on('click',function(){ $("#products_list_pop").hide(300); setTimeout(function(){ $("body").removeClass("product_chooser"); },20); }); $("#view_theropist,.choosed_theropist,#open_therapists,#open_therapists_br").on('click',function(){ $("#theropist_list_pop").show(300); setTimeout(function(){ $("body").addClass("product_chooser"); },300); }); $("#theropist_list_pop_close").on('click',function(){ $("#theropist_list_pop").hide(300); setTimeout(function(){ $("body").removeClass("product_chooser"); },20); }); $(".service").each(function(){ var t = $(this); t.find("table tr").each(function(){ var tr = $(this); tr.append(""); }); }); $(".add_prod.btn").on('click',function(){ var t = $(this), p = t.parents('.service'), tr = t.parents('tr'); tr.addClass('active'); var tile = p.find(".prod-title h2").text(); if (lang != 'th') tile += ' ( '+p.data('en')+' )'; var pr = 0; if ( massage_type == 1 ) pr = tr.data('price'); else pr = tr.data('outside-price'); $(".choosed_products ul").append('
    • '+checkmark+tile+'
      '+' - '+tr.find('td:eq(0)').text() + ' ['+formatPrice(pr)+' ฿]' +'
    • '); if ($(".choosed_products ul li").length == 0 ) { $(".choosed_products .no-prod").show(); $("#products_list_pop_close").removeClass("selected"); } else { $(".choosed_products .no-prod").hide(); $("#products_list_pop_close").addClass("selected"); } calculate_totals_html(); attentionBoxShift(); }); $(".remove_prod.btn").on('click',function(){ var t = $(this), p = t.parents('.service'), tr = t.parents('tr'); tr.removeClass('active'); $(".choosed_products ul ."+p.attr('id')+".pid-"+tr.data('prod_id')).remove(); if ($(".choosed_products ul li").length == 0 ) { $(".choosed_products .no-prod").show(); $("#products_list_pop_close").removeClass("selected"); } else { $(".choosed_products .no-prod").hide(); $("#products_list_pop_close").addClass("selected"); } calculate_totals_html(); attentionBoxShift(); }); $(".theropists .theropist").on('click',function(){ var t = $(this); if (t.hasClass('vacation')) return; if (!t.hasClass('active')){ t.addClass('active'); $(".choosed_theropist ul").append('
    • '+checkmark+t.data('en')+'
    • '); } else { t.removeClass('active'); $('.prod-item.therop-'+t.attr('id')).remove(); } if ($(".choosed_theropist ul li").length == 0 ) $(".choosed_theropist .no-prod").show(); else $(".choosed_theropist .no-prod").hide(); attentionBoxShift(); }); var ga4EventSent = false; $("#customername,#customerphone,#visitqty,#visit-date,#visit-time").on('keyup',function(){ $(this).removeClass('error'); if (ga4EventSent) return; ga4EventSent = true; gtag("event", "waBookingFormStart", { menu_item_name: "Start WhatsApp Booking Form", menu_item_url: "https://www.nakee.spa/ko/%ec%98%88%ec%95%bd-%ec%98%88%ec%95%bd/", }); }); $("#customername,#customerphone,#visitqty,#visit-date,#visit-time").on('change',function(){ attentionBoxShift(); }); $("#submit_req").on('click', function(){ var m = validate_message('whatsapp'); if (m == false) return; $("#submit_req_action").attr('href', 'https://api.whatsapp.com/send?phone=66990655880&&text='+m); document.getElementById("submit_req_action").click(); success_action(m); }); $("#submit_req_line").on('click', function(){ var m = validate_message('line'); if (m == false) return; $("#submit_req_action_line").attr('href', 'https://line.me/R/oaMessage/%40355kcqpj/?'+m); document.getElementById("submit_req_action_line").click(); success_action(m); }); $(".massage-type-selector .type-option").on('click', function(){ var t = $(this); $(".massage-type-selector .type-option").removeClass("selected"); $(this).addClass("selected"); if (massage_type == $(this).data('massagetype')) return; massage_type = $(this).data('massagetype'); if (massage_type == 2) { $(".home-massage").slideDown(400); $(".book_apointment .visitinfo").hide(); $(".top-booking-bar-menu,.book_apointment,.shop_massage_hours").slideUp(400); if (map_loaded == 0) { initMap(); map_loaded = 1; } } else { $(".home-massage").slideUp(400); $(".book_apointment .visitinfo").show(); $(".top-booking-bar-menu,.book_apointment,.shop_massage_hours").slideDown(400); } outside_price_update(); attentionBoxShift(); }); $(".massage-beds label").on('click', function(){ var t = $(this); $(".massage-beds label").removeClass('selected'); t.addClass('selected'); calculate_totals_html(); }); function success_action(m){ var params = "n=" + $("#customername").val(); if ($("#customerphone").length != 0) params += "&p=" + $("#customerphone").val(); $(".book_apointment").empty().append("
      Loading ...
      예약 문의를 성공적으로 생성했습니다!
      "); window.location.href="https://www.nakee.spa/ko/%ec%98%88%ec%95%bd-%ea%b0%90%ec%82%ac/?"+params+"&msg="+m; } function validate_message(t){ var geusts = parseInt($("#visitqty").val()); if ($("#customername").val() == ''){ $("#customername").addClass('error'); $('html, body').animate({ scrollTop: $('#customername').offset().top-70 }, 200); setTimeout( () => { alert("이름은 필수 입력 사항입니다!"); },201); return false; } /* if ($("#customerphone").val() == ''){ $("#customerphone").addClass('error'); $('html, body').animate({ scrollTop: $('#customerphone').offset().top-70 }, 200); setTimeout( () => { alert("전화번호는 필수 입력 사항입니다!"); },201); return false; } */ if ($("#visitqty").val() == '' || geusts < 1){ $("#visitqty").addClass('error'); $('html, body').animate({ scrollTop: $('#visitqty').offset().top-70 }, 200); setTimeout( () => { alert("손님 수를 선택해 주세요!"); },201); return false; } if ($("#visit-date").val() == ''){ $("#visit-date").addClass('error'); $('html, body').animate({ scrollTop: $('#visit-date').offset().top-70 }, 200); setTimeout( () => { alert("예약 데이터를 선택해 주세요!"); },201); return false; } if ($("#visit-time").val() == ''){ $("#visit-time").addClass('error'); $('html, body').animate({ scrollTop: $('#visit-time').offset().top-70 }, 200); setTimeout( () => { alert("예약 시간을 선택하세요!"); },201); return false; } if (!timeValid) { setTimeout( () => { alert("예약 시간이 유효한지 확인하세요!"); },201); return false; } if ($(".choosed_products li.prod-item").length == 0){ $(".choosed_products").addClass('error'); $('html, body').animate({ scrollTop: $('.products_choice').offset().top-70 }, 200); setTimeout( () => { alert("서비스를 선택해 주세요!"); },201); return false; } var u = '',brek = '%0A'; switch (t){ case 'whatsapp': brek = '%0A'; break; case 'line': brek = '%0D%0A'; break; } u += encodeURIComponent('Booking Information:')+brek; u += encodeURIComponent('Massage '+(massage_type == 1 ? "AT OUR SHOP ("+$(".branch_indicator").data('name')+")" : "OUTSIDE AT YOUR LOCATION"))+brek; if (massage_type == 2) u += encodeURIComponent(($('input[name="massage-bed"]:checked').val() == '1' ? "Portable Massage Bed: Included" : "Portable Massage Bed: NOT Included"))+brek; u += brek+encodeURIComponent('Name: '+$("#customername").val())+brek; //u += encodeURIComponent('phone number: '+$("#customerphone").val())+brek; u += encodeURIComponent('Number of guests: '+$("#visitqty").val()+' '+(geusts <= 1 ? 'person' : 'persons'))+brek; u += encodeURIComponent('Preferred visit time: '+ $("#visit-date").val() + ' ' + $("#visit-time").val() )+brek; u += brek+encodeURIComponent('Required Service: ')+brek; /* $(".choosed_products li.prod-item").each(function(){ u += encodeURIComponent(' > '+$(this).text()+' ('++' ฿)')+brek; }); */ var tot = 0; $(".services tr.active").each(function(){ var tr=$(this), sp = $(this).parents('.service'), h2=sp.find('.prod-title h2'), pr = 0; if ( massage_type == 1 ) pr = $(this).data('price'); else pr = $(this).data('outside-price'); tot += parseInt(pr); var tile = h2.text(); if (lang != 'th') tile += ' ( '+sp.data('en')+' )'; u += encodeURIComponent('> '+tile)+brek; u += encodeURIComponent(' - '+tr.find('td:eq(0)').text() + ' ['+formatPrice(pr)+' ฿]')+brek; }); if (tot != 0) { if ($('input[name="massage-bed"]:checked').val() == '1') { u += brek+encodeURIComponent('Taxi Transport For Massage Bed: '+taxi+' ฿')+brek; tot += parseInt(taxi); } /* u += encodeURIComponent('------')+brek; u += encodeURIComponent('Total Price: '+formatPrice(tot)+' ฿')+brek; */ } if ($(".choosed_theropist li.prod-item").length > 0) { u += brek+encodeURIComponent('Required Therapist: ')+brek; $(".choosed_theropist li.prod-item").each(function(){ u += encodeURIComponent(' > '+$(this).text())+brek; }); } else { u += brek+encodeURIComponent('Chosen Therapist: You can choose for ')+(geusts <= 1 ? 'me' : 'us')+'.%0A'+brek; } if ($("#clientnote").val() != '') u += brek+encodeURIComponent('Additional Request: ')+brek+encodeURIComponent($("#clientnote").val())+brek; if (massage_type == 1) { u += brek+encodeURIComponent('📍 Branch Location: ')+brek+encodeURIComponent($(".branch_indicator").data('name')); u += brek+encodeURIComponent('🗺️ Google Maps: ')+encodeURIComponent($(".branch_indicator").data('maplink')); } else { u += brek+encodeURIComponent('📍 Your Location Map: '+$("#address_url").val())+brek; u += encodeURIComponent('Your Address: '+$("#visit-address").val())+brek; u += encodeURIComponent('Your Room/Flat Number: '+$("#visit-flat").val()); } return u; } $("#visit-address, #visit-flat").on('change click keyup', function(){ outside_service_validation(); attentionBoxShift(); }); $("#visit-date,#visit-date-o").on('change', function(){ const selectedDate = $(this).val(); const today = new Date(); const todayStr = today.toISOString().split('T')[0]; let targetTime; if (selectedDate === todayStr) { const nowPlus1Hr = new Date(today.getTime() + 60 * 60 * 1000); const hh = nowPlus1Hr.getHours().toString().padStart(2, '0'); const mm = nowPlus1Hr.getMinutes().toString().padStart(2, '0'); targetTime = `${hh}:${mm}`; } else { targetTime = '10:00'; } $('#'+$(this).attr('id').replace('date','time')).val(targetTime).attr('min', targetTime).attr('placeholder', targetTime); }); ['', '-o'].forEach(suffix => { $(`#visit-date${suffix}, #visit-time${suffix}`).on('change', function () { timeValid = 0; const date = $(`#visit-date${suffix}`).val(); const time = $(`#visit-time${suffix}`).val(); if (!date || !time) return; validateEnteredTime(suffix); if (suffix == '-o') { outside_service_validation(); attentionBoxShift(); } }); }); // Icon click triggers focus on sibling input $(".caln-icon, .time-icon").on('click', function () { $(this).parent().find('input').trigger('focus'); }); // Validate entered time function validateEnteredTime(suffix) { timeValid = 1; const timeField = $(`#visit-time${suffix}`); if (!isTimeInAllowedRange(suffix)) { timeField.addClass('error'); timeValid = 0; alert(suffix === '' ? "예약 시간은 오전 10시에서 오후 10시 사이여야 합니다." : "예약 시간은 오전 10시에서 오후 6시 사이여야 합니다."); } else if (!isVisitTimeValid(suffix)) { timeField.addClass('error'); timeValid = 0; alert("예약 시간은 지금부터 최소 +30분이 지나야 합니다."); } if (timeValid) timeField.removeClass('error'); } // Check if time is +30 min from now (in Bangkok) function isVisitTimeValid(suffix) { const date = $(`#visit-date${suffix}`).val(); const time = $(`#visit-time${suffix}`).val(); if (!date || !time) return false; const selected = new Date(`${date}T${time}`); const now = new Date(); const nowBangkok = new Date(now.toLocaleString("en-US", { timeZone: "Asia/Bangkok" })); const nowPlus30 = new Date(nowBangkok.getTime() + 30 * 60 * 1000); return selected >= nowPlus30; } // Check if time is in range (10:00 to 22:00 or 18:00) function isTimeInAllowedRange(suffix) { const time = $(`#visit-time${suffix}`).val(); if (!time) return false; const [hh, mm] = time.split(':').map(Number); if (isNaN(hh) || isNaN(mm)) return false; const maxHour = suffix === '' ? 22 : 18; return hh >= 10 && (hh < maxHour || (hh === maxHour && mm === 0)); } // Set initial values based on Bangkok time and cutoffs function getKohSamuiBookingTime(suffix) { const now = new Date(); const nowBangkok = new Date(now.toLocaleString("en-US", { timeZone: "Asia/Bangkok" })); const nowPlus30 = new Date(nowBangkok.getTime() + 30 * 60 * 1000); const cutoff = new Date(nowBangkok); cutoff.setHours(suffix === '' ? 22 : 18, 0, 0, 0); let dateStr, timeStr; if (nowPlus30 > cutoff) { const tomorrow = new Date(nowBangkok); tomorrow.setDate(tomorrow.getDate() + 1); dateStr = tomorrow.toISOString().split('T')[0]; timeStr = '10:00'; } else { dateStr = nowBangkok.toISOString().split('T')[0]; const hh = nowPlus30.getHours().toString().padStart(2, '0'); const mm = nowPlus30.getMinutes().toString().padStart(2, '0'); timeStr = `${hh}:${mm}`; } $(`#visit-date${suffix}`).val(dateStr).attr('min', dateStr); $(`#visit-time${suffix}`).attr('min', timeStr); } // Initialize both sets getKohSamuiBookingTime(''); getKohSamuiBookingTime('-o'); setInterval(function(){ clock_nakee(); },1000); clock_nakee(); lightbox.option({ fadeDuration: 200, resizeDuration: 200, wrapAround: true }); });-->