이호영 이호영 2025-12-23
브랜드메시지 화면추가
@30d5d071d7c6e7ab6cca09de04368ad6dbbe7fb3
 
src/main/java/itn/com/cmm/MjonBTSendVO.java (added)
+++ src/main/java/itn/com/cmm/MjonBTSendVO.java
@@ -0,0 +1,130 @@
+package itn.com.cmm;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+public class MjonBTSendVO{
+
+	
+	/**
+	 * @description : 수신자번호
+	 */
+	private String  phone;
+
+	/**
+	 * @description : [*이름*] - 치환문자
+	 */
+	private String 	name;
+	
+	/**
+	 * @description : [*1*] - 치환문자
+	 */
+	private String  rep1;
+	
+	/**
+	 * @description : [*2*] - 치환문자
+	 */
+	private String  rep2;
+	
+	/**
+	 * @description : [*3*] - 치환문자
+	 */
+	private String  rep3;
+	
+	/**
+	 * @description : [*4*] - 치환문자
+	 */
+	private String  rep4;
+	
+	/**
+	 * @description : 문자ID
+	 */
+	private String 	msgId;
+
+	/**
+	 * @description : 전송그룹ID (대량문자의 경우 하나의 그룹으로 세팅)
+	 */
+	private String msgGroupId; 
+	
+	/**
+	 * @description : 문자온 일반회원ID
+	 */
+	private String  userId;
+
+	/**
+	 * @description : 발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)
+	 */
+	private String  callFrom;
+	/**
+	 * @description : 수신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)
+	 */
+	private String  callTo; 
+	/**
+	 * @description : 예약 발송일시
+	 */
+	private String  reqDate;
+	/**
+	 * @description :전송사(04:다우, 05:JJ, 07:IVT, 01:아이하트 , 02:현대퓨처넷, 03:아이엠오) 
+	 */
+	private String  agentCode;
+
+	/**
+	 * @description : MMS용 메시지제목
+	 */
+	private String  subject;
+	
+	/**
+	 * @description : SMS용 메시지본문
+	 */
+	private String  smsTxt;
+
+	/**
+	 * @description : 메세지타입(4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송)
+	 */
+	private String  msgType;
+	
+
+	/**
+	 * @description : 첨부파일 갯수
+	 */
+	private String 	fileCnt;
+	
+	/**
+	 * @description : 파일이름1
+	 */
+	private String 	filePath1;
+	
+	/**
+	 * @description : 파일이름2
+	 */
+	private String 	filePath2;
+	
+	/**
+	 * @description : 파일이름3
+	 */
+	private String 	filePath3;
+	
+
+
+	/**
+	 * @description : event 여부 / group tb에 넣는 용도 / 기본값 N 
+	 */
+	private String 	eventYn="N";
+	
+	
+	
+	/**
+	 * @description : 개별단가
+	 */
+	private String 	eachPrice;
+	
+
+	
+	
+	
+	
+}
src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
--- src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
@@ -603,6 +603,311 @@
 		return kakaoSendAdvcListVO;
 	}
 
+	
+	
+
+	public List<KakaoSendAdvcVO> populateSendListsBT(KakaoVO kakaoVO
+														, boolean isHolidayNotified
+														, StatusResponse statusResponse
+														, UserManageVO userManageVO
+														, List<String> resultSpamTxt
+														) throws Exception {
+		
+		//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
+//		String befCash = kakaoVO.getBefCash();
+		
+		log.info("kakaoVO.ftToString() ::  [{}]", kakaoVO.ftToString());		
+		
+
+		// 예약 시간 기본값 설정
+		Date now = new Date();
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+		
+		String atSmishingYn = userManageVO.getAtSmishingYn();
+		String exceptSpamYn = userManageVO.getExceptSpamYn();
+		
+		
+		List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>();
+		Calendar calendar = setupBaseDateFT(kakaoVO);
+		
+		
+		
+		 // BT 내용
+		String templateContent = kakaoVO.getTemplateContent();
+		 // 실패 대체 문자
+		String subMsgTxt = kakaoVO.getSubMsgTxt();
+		log.info(" + StringUtils.isNotEmpty(subMsgTxt) :: [{}]", StringUtils.isNotEmpty(subMsgTxt));
+		if(StringUtils.isNotEmpty(subMsgTxt)) {
+			kakaoVO.setSubMsgSendYn("Y");
+			
+			// 광고문자면 처리 - 광고 Y
+			if ("Y".equals(kakaoVO.getAdFlag())) {
+				subMsgTxt = "(광고)" + subMsgTxt + "\n" + "무료거부 0808800858";
+			}
+			
+		}
+		
+		
+
+		// 사용자 개인 단가 정보 불러오기
+		MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
+		// 시스템 기본 단가 정보 불러오기
+		JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
+
+		// 카톡 스미싱 yn은 몯 at로 통일
+		kakaoVO.setAtSmishingYn(mberManageVO.getAtSmishingYn());
+
+		// 치환 문구가 있는지 확인
+		Boolean replaceYN = MsgSendUtils.getReplaceYN(templateContent);
+		Boolean replaceSubYN = MsgSendUtils.getReplaceYN(subMsgTxt);
+
+
+/** 리스트명 수정해야함 */
+		/** @MSGID KEY값 */
+		List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getMjonFTSendVOList().size());
+
+
+		Map<String, Function<MjonFTSendVO, String>> placeholders = new HashMap<>();
+		placeholders.put("[*이름*]", MjonFTSendVO::getName);
+		placeholders.put("[*1*]", MjonFTSendVO::getRep1);
+		placeholders.put("[*2*]", MjonFTSendVO::getRep2);
+		placeholders.put("[*3*]", MjonFTSendVO::getRep3);
+		placeholders.put("[*4*]", MjonFTSendVO::getRep4);
+
+		String imageType = kakaoVO.getImageType();
+/** 단가 수정해야함 */
+		// 개인단가
+		Float kakaoMemberFtPrice = 
+				imageType  == null ? mberManageVO.getKakaoFtPrice() :
+				"I".equals(imageType) ? mberManageVO.getKakaoFtImgPrice() :
+				"W".equals(imageType) ? mberManageVO.getKakaoFtWideImgPrice() :
+				mberManageVO.getKakaoFtPrice();
+		
+		// 시스템단가
+		Float kakaoSysJoinFtPrice = 
+				imageType  == null ? sysJoinSetVO.getKakaoFtPrice() :
+				"I".equals(imageType) ? sysJoinSetVO.getKakaoFtImgPrice() :
+				"W".equals(imageType) ? sysJoinSetVO.getKakaoFtWideImgPrice() :
+				sysJoinSetVO.getKakaoFtPrice();
+
+		Float kakaoFtPrice = 
+				getValidPrice(kakaoMemberFtPrice, kakaoSysJoinFtPrice);
+		
+		// 대체문자가 있을경우 사용 
+		float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
+		float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
+		float picturePrice = getValidPrice(mberManageVO.getPicturePrice(), sysJoinSetVO.getPicturePrice());
+
+		boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
+		boolean hasPerformedSubSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
+		boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, 
+
+
+		
+		String imgFilePath = "";
+		if(StringUtils.isNotEmpty(kakaoVO.getAtchFileId()) &&  
+				("I".equals(imageType) ||	"W".equals(imageType))) {
+			imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(kakaoVO.getAtchFileId());
+		}
+		
+		
+
+		/** @jsonStr 필요유무 */
+		boolean hasButtons =  CollectionUtils.isNotEmpty(kakaoVO.getButtonVOList());
+		String sharedJsonStr = null;
+		
+
+		// 치환데이터가 없는 경우 한 번만 계산하기 위한 캐시 변수 추가
+		Map<String, Object> sharedPricingResult = null;
+		// 치환데이터가 없는 경우 for문 전에 한 번만 계산
+		if (!replaceSubYN && StringUtils.isNotEmpty(subMsgTxt)) {
+		    sharedPricingResult = calculateSubMsgPricing(subMsgTxt, imgFilePath, shortPrice, longPrice, picturePrice, kakaoFtPrice);
+		    
+		    // 사전계산에서 INVALID인 경우 즉시 리턴
+		    String preSendType = (String) sharedPricingResult.get("sendType");
+		    if ("INVALID".equals(preSendType)) {
+		        statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");
+		        return kakaoSendAdvcListVO;
+		    }
+		}
+
+
+/** 리스트명 수정해야함 */
+		List<MjonFTSendVO> mjonFTSendVOList = kakaoVO.getMjonFTSendVOList();
+
+		for (int i = 0; i < mjonFTSendVOList.size(); i++) {
+			MjonFTSendVO mjonFTSendVO = mjonFTSendVOList.get(i);
+
+
+/** createFTSendVO 수정해야함 */
+			KakaoSendAdvcVO sendVO = createFTSendVO(kakaoVO, calendar);
+			// 공통 가격 설정
+			sendVO.setSmsPrice(Float.toString(shortPrice));
+			sendVO.setMmsPrice(Float.toString(longPrice));
+			sendVO.setPicturePrice(Float.toString(picturePrice));
+
+			sendVO.setCallTo(mjonFTSendVO.getPhone());
+			sendVO.setMsgId(idList.get(i));
+			
+
+			// 친구톡 문자 
+			String templateContentTemp = templateContent;
+			// 치환 문자면
+			if(replaceYN) {
+				
+				// 각 치환 구문을 확인하고 치환할 값이 없으면 오류 반환
+				for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
+					String placeholder = entry.getKey();
+					String value = entry.getValue().apply(mjonFTSendVO);
+					if (templateContentTemp.contains(placeholder)) {
+						if (StringUtils.isEmpty(value)) {
+							statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
+							return null;
+						}
+						templateContentTemp = templateContentTemp.replace(placeholder, value);
+					}
+				}
+			}
+			sendVO.setTemplateContent(templateContentTemp);
+			
+			// 실패 대체 문자
+			String subMsgTxtTemp = null;
+			if(StringUtils.isNotEmpty(subMsgTxt)) {
+				subMsgTxtTemp = subMsgTxt;
+				
+				if(replaceSubYN) {
+					// 각 치환 구문을 확인하고 치환할 값이 없으면 오류 반환
+					for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
+						String placeholder = entry.getKey();
+						String value = entry.getValue().apply(mjonFTSendVO);
+						if (subMsgTxtTemp.contains(placeholder)) {
+							if (StringUtils.isEmpty(value)) {
+								statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
+								return null;
+							}
+							subMsgTxtTemp = subMsgTxtTemp.replace(placeholder, value);
+						}
+					}
+				}
+			}
+			sendVO.setSubMsgTxt(subMsgTxtTemp);
+			
+			
+			//대체문자가 있으면
+			// Step 1-4: 실패 대체 문자 치환데이터 설정
+			if(StringUtils.isNotEmpty(subMsgTxtTemp)) { // 대체문자가 있나?
+				
+				// 최적화된 계산 로직
+				Map<String, Object> pricingResult;
+				
+				if (replaceSubYN) {
+					// 치환데이터 있음 → 매번 새로 계산
+					pricingResult = calculateSubMsgPricing(subMsgTxtTemp, imgFilePath, 
+															shortPrice, longPrice, picturePrice, kakaoFtPrice);
+
+					// INVALID 체크
+					String resultSendType = (String) pricingResult.get("sendType");
+					if ("INVALID".equals(resultSendType)) {
+						statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");
+						return kakaoSendAdvcListVO;
+					}
+				} else {
+					// 치환데이터 없음 → 미리 계산된 결과 재사용
+					pricingResult = sharedPricingResult;
+				}
+				
+				
+				// 결과 적용
+				applyPricingResult(sendVO, pricingResult);
+				
+				
+			}else {
+				// 대체문자가 없으면 카카오톡 단가 그대로 사용
+				sendVO.setEachPrice( Float.toString(kakaoFtPrice) );
+			}
+
+			
+			// 스팸 단어 체크
+			// exceptSpam는 사용자 스팸 단어 체크할건지에 대한 여부 N : 체크
+			if("N".equals(exceptSpamYn)) {
+				// 친구톡 내용
+				if(replaceYN) {
+					checkSpamAndSetStatus(kakaoVO
+							, templateContentTemp
+							, resultSpamTxt, isHolidayNotified);	
+				}else if(!hasPerformedSpamCheck) {
+					checkSpamAndSetStatus(kakaoVO
+							, templateContentTemp
+							, resultSpamTxt, isHolidayNotified);
+					hasPerformedSpamCheck = true;
+				}
+				// 대체문자 내용
+				if(StringUtils.isNotEmpty(subMsgTxtTemp)) { 
+					if(replaceSubYN) {
+						checkSpamAndSetStatus(kakaoVO
+								, subMsgTxtTemp
+								, resultSpamTxt, isHolidayNotified);						
+					}else if(!hasPerformedSubSpamCheck) {
+						checkSpamAndSetStatus(kakaoVO
+								, subMsgTxtTemp
+								, resultSpamTxt, isHolidayNotified);
+						hasPerformedSubSpamCheck = true;
+					}
+
+				}
+			}
+
+			log.info(" kakaoVO.toString() :: [{}]",kakaoVO.ftToString());
+
+			
+			/* @isHolidayNotified
+			 *  - 관리자 알림 설정으로 인해 
+			 *  - 해당 시간이면 지연 미처리
+			 * @smishingYn
+			 *  - 회원 별 '스미싱 온' 상태값
+			 *  - Y면 알림, 지연 처리해야 함
+			 * */
+			if("Y".equalsIgnoreCase(atSmishingYn) && isHolidayNotified) {
+				kakaoVO.setSpamStatus("Y");
+				kakaoVO.setSmishingYn("Y");
+				kakaoVO.setAtDelayYn("Y");
+			}
+			
+			// 지연 여부 처리
+			if (( "Y".equalsIgnoreCase(atSmishingYn) || "Y".equalsIgnoreCase(kakaoVO.getAtDelayYn()))
+					&& !hasPerformedDelayYn && isHolidayNotified) {
+				calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸
+				// TEST
+//				calendar.add(Calendar.MINUTE, 5); // 모든 시간을 30분 뒤로 미룸
+				hasPerformedDelayYn = true;
+			}
+			
+			sendVO.setReqDate(sdf.format(calendar.getTime())); // 분할된 시간 설정 또는 기본 예약 시간 사용
+			
+			
+			
+
+			// 타이틀이나 버튼이 있고
+			if(hasButtons || StringUtils.isNotEmpty(kakaoVO.getTemplateImageUrl())) {
+				// 
+				if (StringUtils.isEmpty(sharedJsonStr)) {
+					// 치환 데이터가 없고 아직 생성되지 않았으면 한 번만 생성
+					sharedJsonStr = kakaoApiJsonSave.kakaoApiFTJsonSave_advc(kakaoVO);
+					sendVO.setJsonStr(sharedJsonStr);
+				}
+				sendVO.setBizJsonName(idList.get(0));
+				
+			}
+			
+			kakaoSendAdvcListVO.add(sendVO);
+			log.info(" sendVO.toString() :: [{}]",sendVO.toString());
+		}
+
+		
+		return kakaoSendAdvcListVO;
+	}
+
+	
 	private void checkSpamAndSetStatus(KakaoVO kakaoVO
 			, String chkText
 			, List<String> resultSpamTxt, boolean isHolidayNotified) throws Exception {
src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
--- src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
@@ -4,6 +4,7 @@
 import java.util.List;
 import java.util.Map;
 
+import itn.com.cmm.MjonBTSendVO;
 import itn.com.cmm.MjonFTSendVO;
 import itn.let.mjo.msg.service.MjonMsgVO;
 import lombok.Getter;
@@ -266,7 +267,11 @@
 
 	private List<Map<String, String>> varListMap;
 
+	
+	
 	private List<MjonFTSendVO> mjonFTSendVOList = new ArrayList<>();
+	
+	private List<MjonBTSendVO> mjonBTSendVOList = new ArrayList<>();
 	
 	@Override
 	public String toString() {
@@ -304,6 +309,18 @@
 		mjonFTListSb.append("]");
 		
 		
+		
+		StringBuilder mjonBTListSb = new StringBuilder("[");
+		if (mjonBTSendVOList != null && !mjonBTSendVOList.isEmpty()) {
+			String prefix = "";
+			for (MjonBTSendVO vo : mjonBTSendVOList) {
+				mjonBTListSb.append(prefix).append(vo == null ? "null" : vo.toString());
+				prefix = ", ";
+			}
+		}
+		mjonBTListSb.append("]");
+		
+		
 		return "KakaoSendAdvcVO[" +
 			"\n senderKey=[" + senderKey + "]" +
 			"\n , subMsgTxtReplYn=[" + subMsgTxtReplYn + "]" +
@@ -331,6 +348,7 @@
 			"\n , befCash=[" + getBefCash() + "]" +
 			"\n , befPoint=[" + getBefPoint() + "]" +
 			"\n , mjonFTSendVOList=" + mjonFTListSb.toString() +
+			"\n , mjonBTSendVOList=" + mjonBTListSb.toString() +
 			"\n ]";
 	}
 	
 
src/main/java/itn/let/kakao/user/kakaoBt/service/KakaoBrandMsgService.java (added)
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/KakaoBrandMsgService.java
@@ -0,0 +1,12 @@
+package itn.let.kakao.user.kakaoBt.service;
+
+import javax.servlet.http.HttpServletRequest;
+
+import itn.let.kakao.kakaoComm.KakaoVO;
+import itn.let.mail.service.StatusResponse;
+
+public interface KakaoBrandMsgService {
+
+	StatusResponse insertKakaoBtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception;
+
+}
 
src/main/java/itn/let/kakao/user/kakaoBt/service/KakaoBrandMsgTemplateService.java (added)
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/KakaoBrandMsgTemplateService.java
@@ -0,0 +1,26 @@
+package itn.let.kakao.user.kakaoBt.service;
+
+import java.util.List;
+
+import itn.let.kakao.kakaoComm.KakaoVO;
+
+public interface KakaoBrandMsgTemplateService {
+
+	//친구톡 템플릿 저장처리
+	int insertKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception;
+	
+	//친구톡 템플릿 리스트 불러오기
+	List<KakaoVO> selectKakaoFriendsTemplateList(KakaoVO kakaoVO) throws Exception;
+	
+	//친구톡 템플릿 삭제처리하기
+	int deleteKakaoFriendstalkTemplate(KakaoVO kakaoVO) throws Exception;
+	
+	//친구톡 템플릿 상세정보 조회
+	KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception;
+	
+	//친구톡 템플릿 수정처리하기
+	int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception;
+	
+	//친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리
+	int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception;
+}
 
src/main/java/itn/let/kakao/user/kakaoBt/service/impl/KakaoBrandMsgServiceImpl.java (added)
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/impl/KakaoBrandMsgServiceImpl.java
@@ -0,0 +1,292 @@
+package itn.let.kakao.user.kakaoBt.service.impl;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
+import itn.com.cmm.LoginVO;
+import itn.com.utl.fcc.service.EgovStringUtil;
+import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
+import itn.let.kakao.kakaoComm.KakaoSendUtil;
+import itn.let.kakao.kakaoComm.KakaoVO;
+import itn.let.kakao.user.kakaoAt.service.impl.KakaoAlimTalkDAO;
+import itn.let.kakao.user.kakaoBt.service.KakaoBrandMsgService;
+import itn.let.mail.service.StatusResponse;
+import itn.let.mjo.mjocommon.MjonCommon;
+import itn.let.mjo.msg.service.MjonMsgVO;
+import itn.let.mjo.msg.service.impl.MjonMsgDAO;
+import itn.let.mjo.msgdata.service.MjonMsgDataService;
+import itn.let.module.base.PriceAndPoint;
+import itn.let.uss.umt.service.EgovUserManageService;
+import itn.let.uss.umt.service.UserManageVO;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Service("KakaoBrandMsgService")
+public class KakaoBrandMsgServiceImpl  extends EgovAbstractServiceImpl implements KakaoBrandMsgService{
+
+	@Resource(name = "egovFriendstalkTemplateIdService")
+	private EgovIdGnrService idgenFriendTalkTmpId;
+
+	@Resource(name="kakaoBrandMsgTemplateDAO")
+	private KakaoBrandMsgTemplateDAO kakaoBrandMsgTemplateDAO;
+
+	@Resource(name="mjonMsgDAO")
+	private MjonMsgDAO mjonMsgDAO;
+	
+	/** userManageService */
+	@Resource(name = "userManageService")
+	private EgovUserManageService userManageService;
+
+	@Resource(name = "egovMjonMsgGroupIdGnrService")
+	private EgovIdGnrService idgenMjonMsgGroupId;
+
+	
+	@Resource(name="kakaoAlimTalkDAO")
+	private KakaoAlimTalkDAO kakaoAlimTalkDAO;
+
+	@Resource(name = "MjonMsgDataService")
+	private MjonMsgDataService mjonMsgDataService;
+	
+	@Autowired
+	KakaoSendUtil kakaoSendUtil;
+	
+	@Autowired
+	private MjonCommon mjonCommon;
+	
+	@Autowired
+	private PriceAndPoint priceAndPoint;
+	
+	@Override
+	public StatusResponse insertKakaoBtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception {
+		StatusResponse statusResponse = new StatusResponse();
+		
+		log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.toString()); 
+		
+		log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString()); 
+		
+
+//		if(1==1) {
+//			throw new RuntimeException("강제로 발생시킨 예외");
+//		}
+		
+		// 측정할 메소드 호출 전 시간 기록
+		Instant start = Instant.now();
+//		KakaoSendAdvcVO
+
+		Map<String, Object> returnMap = new HashMap<>();
+		Map<String, Object> apiReturnMap = new HashMap<>();
+		
+		String userId = "";
+		if("A".equals(kakaoVO.getSendKind()))
+		{
+			userId = kakaoVO.getMberId();
+		}else {
+	
+			LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
+					? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
+					: null;
+			userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+	
+			if (userId.equals("")) {
+				return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
+			}
+
+		}
+		
+		kakaoVO.setUserId(userId);
+
+		/**
+		 * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 현재 로그인 세션도 만료 처리함
+		 */
+		boolean mberSttus = userManageService.selectUserStatusInfo(userId);
+		if (!mberSttus) {
+			request.getSession().invalidate();
+			// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
+			return new StatusResponse(HttpStatus.UNAUTHORIZED,
+					"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 친구톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.", "STAT_1070");
+		}
+		
+
+		/**
+		 * 친구톡은 발송 시간 제약이 있음
+		 */
+		if(kakaoSendUtil.isRestrictedFriendTalkTime(kakaoSendUtil.resolveBaseDate(kakaoVO))) {
+			// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
+			return new StatusResponse(HttpStatus.BAD_REQUEST,
+					"친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다.","STAT_2080");
+		}
+		
+
+/** @isHolidayNotified 
+ * @false : 알림 X
+ * @true  : 알림 O */
+		boolean isHolidayNotified = mjonCommon.processUserAndCheckFT(kakaoVO);
+		
+
+		UserManageVO userManageVO = mjonCommon.getUserManageInfo(userId);
+		
+
+		// 스팸관련 키워드 select
+		List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList();
+		
+/** @카카오톡 전송 list 셋팅 -------------------------------------------*/
+		List<KakaoSendAdvcVO> kakaoSendAdvcListVO = kakaoSendUtil.populateSendListsFT(kakaoVO, isHolidayNotified, statusResponse, userManageVO, resultSpamTxt);
+		if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) {
+			log.error(" + populateSendLists 처리 중 오류 발생: {}", statusResponse.getMessage());
+			return statusResponse;
+		}
+		
+
+/** @전송금액 확인 --------------------------------------------------*/
+		if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
+			log.error("Insufficient balance for message sending.");
+			return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.", "STAT_1060");
+		}
+		
+
+/** @json파일이 있을 떄 biz_attachments insert */
+		kakaoSendUtil.insertKakaoAtDataJsonInfo_advc(kakaoSendAdvcListVO);
+		
+		
+
+		Map<String, List<KakaoSendAdvcVO>> priceGroupedMessages = kakaoSendAdvcListVO.stream()
+				.collect(Collectors.groupingBy(KakaoSendAdvcVO::getEachPrice));
+		// instTotalCnt : 화면에서 보여줄 총 발송건수
+		int instTotalCnt = 0;
+		
+
+		// 임시
+		List<String> nextMsgGroupIdA = new ArrayList<>();
+			// 대안: entrySet() 직접 사용
+		String apiMsgGroupId = "";
+		String apiMsgType = "";
+		for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
+			    // entry 사용
+
+			List<KakaoSendAdvcVO> groupedMsgList = entry.getValue(); // 해당 가격의 메시지 리스트
+
+			String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
+			groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
+
+			// api 전달 값
+			apiMsgGroupId = StringUtils.isNotEmpty(apiMsgGroupId)
+					? apiMsgGroupId + "," + nextMsgGroupId
+					: nextMsgGroupId;
+			
+			apiMsgType = StringUtils.isNotEmpty(apiMsgType)
+					? apiMsgType + "," + kakaoSendAdvcListVO.get(0).getMsgType()
+							: kakaoSendAdvcListVO.get(0).getMsgType();
+
+			// 발송 데이터 삽입
+			int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList);
+//			int instCnt = 6;
+			
+			if(instCnt > 0) {
+
+				instTotalCnt += instCnt;
+
+				KakaoSendAdvcVO sendVO = groupedMsgList.get(0);
+
+/** @groupData 테이블 insert */
+				kakaoSendUtil.insertKakaoGroupDataTb_advc(instCnt, kakaoVO, sendVO);
+
+
+				
+/** @biz_kakao_price에 insert (대체문자 환불관련 테이블)*/
+				priceAndPoint.insertBizFtKakaoPrice(kakaoVO.getUserId(), sendVO.getMsgGroupId()); 
+				
+				
+				priceAndPoint.insertCashAndPoint(kakaoVO.getUserId()
+						, -Float.parseFloat(sendVO.getTotPrice())
+						, "카카오 친구톡 총 "+groupedMsgList.size()+"건 중 " + instCnt + "건 발송"
+						, nextMsgGroupId
+					);
+
+
+/** @SLACK발송 */ 
+				/** @발송조건이되면 발송 */ 
+				if(isHolidayNotified 
+						&& ("Y".equals(userManageVO.getAtSmishingYn()) || "Y".equals(kakaoVO.getAtDelayYn()))
+						) {
+					mjonCommon.getAdminKakaoAtSendSlack(sendVO);
+				}else if("Y".equals(kakaoVO.getAtSmishingYn())){
+				/** @발송조건이 안되면 DB INSERT */ 
+					mjonMsgDAO.insertSpamPassMsgData(MjonMsgVO.builder()
+							.msgGroupId(nextMsgGroupId)
+							.userId(kakaoVO.getUserId())
+							.reqDate(kakaoVO.getReqDate())
+							.smsTxt(groupedMsgList.get(0).getTemplateContent())
+							.totalCallCnt(instCnt)
+							.callFrom(kakaoVO.getCallFrom())
+							.msgType("8")
+							.reserveYn(kakaoVO.getReserveYn())
+							.build()
+						);
+				}
+				
+				nextMsgGroupIdA.add(nextMsgGroupId);
+				
+			}
+			
+		}
+
+		apiReturnMap.put("resultSts", instTotalCnt);
+		// 그룹 ID
+		apiReturnMap.put("msgGroupId", apiMsgGroupId);
+		// 메세지 타입
+		apiReturnMap.put("msgType", apiMsgType);
+		
+		returnMap.put("resultSts", instTotalCnt);
+		returnMap.put("reserYn", kakaoVO.getReserveYn());
+		returnMap.put("groupIds", nextMsgGroupIdA);
+		
+		
+		// 측정할 메소드 호출 후 시간 기록
+		Instant end = Instant.now();
+
+		log.info(" + start :: [{}]", start);
+		// 실행 시간 계산 (나노초, 밀리초, 초)
+		long seconds = Duration.between(start, end).getSeconds();
+		log.info("메소드 실행 시간 (초): {} s", seconds);
+		double minutes = seconds / 60.0; // 소수점 포함을 위해 60.0으로 나눔
+
+		returnMap.put("second", seconds+" s");
+		returnMap.put("minutes", minutes+" min");
+		
+
+//		System.out.println("메소드 실행 시간 (분): " + minutes + " min");
+		
+		
+		
+		
+//		priceAndPoint.getBefCash(userId);
+		
+		
+		
+
+		statusResponse.setStatus(HttpStatus.OK);
+		statusResponse.setObject(returnMap);
+		apiReturnMap.put("result", HttpStatus.OK);
+		apiReturnMap.put("message", "전송이 완료되었습니다.");
+		statusResponse.setApiReturn(apiReturnMap);
+		
+		return statusResponse;
+	}
+	
+}
 
src/main/java/itn/let/kakao/user/kakaoBt/service/impl/KakaoBrandMsgTemplateDAO.java (added)
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/impl/KakaoBrandMsgTemplateDAO.java
@@ -0,0 +1,163 @@
+package itn.let.kakao.user.kakaoBt.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
+import itn.let.kakao.admin.kakaoAt.service.MjonKakaoTemplateButtonVO;
+import itn.let.kakao.kakaoComm.KakaoButtonVO;
+import itn.let.kakao.kakaoComm.KakaoVO;
+
+@Repository("kakaoBrandMsgTemplateDAO")
+public class KakaoBrandMsgTemplateDAO  extends EgovAbstractDAO{
+
+	
+	//친구톡 템플릿 저장하기
+	public int insertKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		try {
+			
+			result = update("kakaoFriendsTalkTemplateDAO.insertKakaoFriendsTemplateData", kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("insertKakaoFriendsTemplateData DAO Error !!! " + e);
+		}
+		
+		return result;
+	}
+	
+	public int insertKakaoFriendsTemplateButtonData(MjonKakaoTemplateButtonVO buttonVO) throws Exception{
+		int result = 0;
+		
+		try {
+			
+			result = update("kakaoFriendsTalkTemplateDAO.insertKakaoFriendsTemplateButtonData", buttonVO);
+			
+		} catch (Exception e) {
+			System.out.println("insertKakaoFriendsTemplateButtonData DAO Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	//친구톡 템플릿 리스트 불러오기
+	@SuppressWarnings("unchecked")
+	public List<KakaoVO> selectKakaoFriendsTemplateList(KakaoVO kakaoVO) throws Exception{
+		List<KakaoVO> result = new ArrayList<KakaoVO>();
+		
+		try {
+			
+			result = (List<KakaoVO>) list("kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateList", kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("selectKakaoFriendsTemplateList DAO Error !!! " + e);
+		}
+		
+		return result;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<KakaoButtonVO> selectKakaoFriendsTemplateButtons(MjonKakaoTemplateButtonVO buttonVO) throws Exception{
+		
+		List<KakaoButtonVO> result = new ArrayList<KakaoButtonVO>();
+		
+		try {
+			
+			result = (List<KakaoButtonVO>) list("kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateButtons", buttonVO);
+			
+		} catch (Exception e) {
+			System.out.println("selectKakaoFriendsTemplateButtons DAO Error !!! " + e);
+		}
+		
+		return result;
+	}
+	
+	//친구톡 템플릿 삭제처리하기
+	public int deleteKakaoFriendstalkTemplate(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		
+		try {
+			
+			result = update("kakaoFriendsTalkTemplateDAO.deleteKakaoFriendstalkTemplate", kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("deleteKakaoFriendstalkTemplate DAO Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	//친구톡 템플릿 삭제처리하기
+	public int deleteKakaoFriendstalkButtons(KakaoVO kakaoVO) throws Exception{
+		int result = 0;
+		
+		try {
+			
+			result = update("kakaoFriendsTalkTemplateDAO.deleteKakaoFriendstalkButtons", kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("deleteKakaoFriendstalkButtons DAO Error !!! " + e);
+		}
+		
+		return result;
+	}
+	
+	
+	//친구톡 템플릿 상세정보 조회
+	public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{
+		
+		KakaoVO result = new KakaoVO();
+		
+		try {
+			
+			result = (KakaoVO) select("kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail", kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("selectKakaoFriendsTemplateDetail DAO Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	//친구톡 템플릿 수정처리하기
+	public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		
+		try {
+			
+			result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData", kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	//친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리
+	public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		
+		try {
+			
+			result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel",kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+}
 
src/main/java/itn/let/kakao/user/kakaoBt/service/impl/KakaoBrandMsgTemplateServiceImpl.java (added)
+++ src/main/java/itn/let/kakao/user/kakaoBt/service/impl/KakaoBrandMsgTemplateServiceImpl.java
@@ -0,0 +1,227 @@
+package itn.let.kakao.user.kakaoBt.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import itn.let.kakao.admin.kakaoAt.service.MjonKakaoTemplateButtonVO;
+import itn.let.kakao.kakaoComm.KakaoButtonVO;
+import itn.let.kakao.kakaoComm.KakaoVO;
+import itn.let.kakao.user.kakaoBt.service.KakaoBrandMsgTemplateService;
+
+@Service("KakaoBrandMsgTemplateService")
+public class KakaoBrandMsgTemplateServiceImpl  extends EgovAbstractServiceImpl implements KakaoBrandMsgTemplateService{
+
+	@Resource(name = "egovFriendstalkTemplateIdService")
+	private EgovIdGnrService idgenFriendTalkTmpId;
+
+	@Resource(name="kakaoBrandMsgTemplateDAO")
+	private KakaoBrandMsgTemplateDAO kakaoBrandMsgTemplateDAO;
+	
+	//친구톡 템플릿 저장처리
+	@Override
+	public int insertKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		int resultBtn = 0;
+		try {
+			
+			String tmpIdgen = idgenFriendTalkTmpId.getNextStringId();
+			kakaoVO.setFriendId(tmpIdgen);
+			System.out.println("++++++++++++++++++ tmpIdgen ::: "+tmpIdgen);
+			result = kakaoBrandMsgTemplateDAO.insertKakaoFriendsTemplateData(kakaoVO);
+			
+			if(result > 0) {
+				
+				for(KakaoButtonVO button: kakaoVO.getButtonVOList()) {
+					
+					MjonKakaoTemplateButtonVO tmpButtonVO = new MjonKakaoTemplateButtonVO();
+					
+					tmpButtonVO.setTemplateId(tmpIdgen);
+					tmpButtonVO.setTemplateUseType("F");
+					tmpButtonVO.setButtonName(button.getName());
+					tmpButtonVO.setButtonLinktype(button.getLinkType());
+					tmpButtonVO.setButtonLinkpc(button.getLinkPc());
+					tmpButtonVO.setButtonLinkmo(button.getLinkMo());
+					tmpButtonVO.setButtonLinkios(button.getLinkIos());
+					tmpButtonVO.setButtonLinkand(button.getLinkAnd());
+					tmpButtonVO.setUserId(kakaoVO.getUserId());
+					
+					int resultCnt = kakaoBrandMsgTemplateDAO.insertKakaoFriendsTemplateButtonData(tmpButtonVO);
+					resultBtn = resultBtn + resultCnt;
+					
+				}
+				
+			}
+			
+		} catch (Exception e) {
+			System.out.println("insertKakaoFriendsTemplateData ServiceImple Error !!! " + e);
+			return result = 0;
+		}
+		
+		return result;
+	}
+	
+	//친구톡 템플릿 리스트 불러오기
+	@Override
+	public List<KakaoVO> selectKakaoFriendsTemplateList(KakaoVO kakaoVO) throws Exception{
+		
+		List<KakaoVO> resultList = new ArrayList<KakaoVO>();
+		List<KakaoVO> resultFinalTemplateList = new ArrayList<KakaoVO>();
+		
+		try {
+			
+			resultList = kakaoBrandMsgTemplateDAO.selectKakaoFriendsTemplateList(kakaoVO);
+			
+			//각 템플릿별 버튼 정보 추가해주기
+			for(KakaoVO templateVO : resultList) {
+				
+				List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>();
+				MjonKakaoTemplateButtonVO buttonVO = new MjonKakaoTemplateButtonVO();
+				buttonVO.setTemplateId(templateVO.getFriendId());
+				buttonVO.setTemplateUseType("F");
+				buttonList = kakaoBrandMsgTemplateDAO.selectKakaoFriendsTemplateButtons(buttonVO);
+				
+				if(buttonList != null) {
+					templateVO.setButtonVOList(buttonList);
+				}
+				
+				resultFinalTemplateList.add(templateVO);
+				
+			}
+			
+		} catch (Exception e) {
+			System.out.println("selectKakaoFriendsTemplateList ServiceImple Error !!! " + e);
+		}
+		
+		return resultFinalTemplateList;
+		
+	}
+	
+	//친구톡 템플릿 삭제처리하기
+	@Override
+	public int deleteKakaoFriendstalkTemplate(KakaoVO kakaoVO) throws Exception{
+		int result = 0;
+		
+		try {
+			
+			//친구톡 템플릿 정보 삭제 - Delete_yn 컬럼 값 변경 처리함
+			result = kakaoBrandMsgTemplateDAO.deleteKakaoFriendstalkTemplate(kakaoVO);
+			
+			if(result > 0) {//템플릿에 등록된 버튼 삭제 - 상태값 컬럼이 없어서 삭제처리 보류 
+				
+				//int resultBtn = kakaoFriendsTalkTemplateDAO.deleteKakaoFriendstalkButtons(kakaoVO);
+				
+			}
+			
+		} catch (Exception e) {
+			System.out.println("deleteKakaoFriendstalkTemplate ServiceImple Error !!! " + e);
+		}
+		
+		return result;
+	}
+	
+	//친구톡 템플릿 상세정보 조회
+	@Override
+	public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{
+		
+		KakaoVO result = new KakaoVO();
+		
+		try {
+			
+			result = kakaoBrandMsgTemplateDAO.selectKakaoFriendsTemplateDetail(kakaoVO);
+			
+			//템플릿에 등록된 버튼정보가 있는지 확인하여 추가
+			if(result != null) {
+				
+				List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>();
+				MjonKakaoTemplateButtonVO buttonVO = new MjonKakaoTemplateButtonVO();
+				buttonVO.setTemplateId(kakaoVO.getFriendId());
+				buttonVO.setTemplateUseType("F");
+				buttonList = kakaoBrandMsgTemplateDAO.selectKakaoFriendsTemplateButtons(buttonVO);
+				
+				if(buttonList != null) {
+					result.setButtonVOList(buttonList);
+				}
+				
+			}
+			
+		} catch (Exception e) {
+			System.out.println("selectKakaoFriendsTemplateDetail ServiceImple Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	//친구톡 템플릿 수정처리하기
+	@Override
+	public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		int resultBtn = 0;
+		
+		try {
+			
+			//템플릿 정보 수정
+			result = kakaoBrandMsgTemplateDAO.updateKakaoFriendsTemplateData(kakaoVO);
+			
+			String friendId = kakaoVO.getFriendId();
+			if(result > 0) {
+				
+				//기존 버튼 정보 삭제
+				int resultBtnCnt = kakaoBrandMsgTemplateDAO.deleteKakaoFriendstalkButtons(kakaoVO);
+				
+				//신규 버튼 정보 입력
+				for(KakaoButtonVO button: kakaoVO.getButtonVOList()) {
+					
+					MjonKakaoTemplateButtonVO tmpButtonVO = new MjonKakaoTemplateButtonVO();
+					
+					tmpButtonVO.setTemplateId(friendId);
+					tmpButtonVO.setTemplateUseType("F");
+					tmpButtonVO.setButtonName(button.getName());
+					tmpButtonVO.setButtonLinktype(button.getLinkType());
+					tmpButtonVO.setButtonLinkpc(button.getLinkPc());
+					tmpButtonVO.setButtonLinkmo(button.getLinkMo());
+					tmpButtonVO.setButtonLinkios(button.getLinkIos());
+					tmpButtonVO.setButtonLinkand(button.getLinkAnd());
+					tmpButtonVO.setUserId(kakaoVO.getUserId());
+					
+					int resultCnt = kakaoBrandMsgTemplateDAO.insertKakaoFriendsTemplateButtonData(tmpButtonVO);
+					resultBtn = resultBtn + resultCnt;
+					
+				}
+				
+			}
+			
+		} catch (Exception e) {
+			System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e);
+		}
+		
+		return result;
+	}
+	
+	//친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리
+	@Override
+	public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		
+		try {
+			
+			result = kakaoBrandMsgTemplateDAO.updateKakaoFriendsTemplateImageDataDel(kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+}
 
src/main/java/itn/let/kakao/user/kakaoBt/web/KakaoBrandMsgSendController.java (added)
+++ src/main/java/itn/let/kakao/user/kakaoBt/web/KakaoBrandMsgSendController.java
@@ -0,0 +1,229 @@
+package itn.let.kakao.user.kakaoBt.web;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
+import itn.com.cmm.EgovMessageSource;
+import itn.com.cmm.LoginVO;
+import itn.com.cmm.util.MJUtil;
+import itn.com.utl.fcc.service.EgovStringUtil;
+import itn.let.kakao.kakaoComm.KakaoSendUtil;
+import itn.let.kakao.kakaoComm.KakaoVO;
+import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
+import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService;
+import itn.let.kakao.user.kakaoBt.service.KakaoBrandMsgService;
+import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
+import itn.let.mail.service.StatusResponse;
+import itn.let.mjo.msgdata.service.MjonMsgDataService;
+import itn.let.mjo.msgholiday.service.MsgHolidayService;
+import itn.let.mjo.symbol.service.MjonSymbolService;
+import itn.let.mjo.symbol.service.MjonSymbolVO;
+import itn.let.sym.site.service.EgovSiteManagerService;
+import itn.let.uss.umt.service.EgovUserManageService;
+import itn.let.uss.umt.service.MberManageVO;
+
+@Controller
+public class KakaoBrandMsgSendController {
+
+	@Resource(name = "egovMjonMsgGroupIdGnrService")
+	private EgovIdGnrService idgenMjonMsgGroupId;
+	
+	/** EgovMessageSource */
+	@Resource(name="egovMessageSource")
+	EgovMessageSource egovMessageSource;
+	
+	@Resource(name = "mjonSymbolService")
+	private MjonSymbolService mjonSymbolService;
+	
+	@Resource(name = "kakaoApiService")
+	private KakaoApiService kakaoApiService;
+	
+	@Resource(name = "MjonMsgDataService")
+	private MjonMsgDataService mjonMsgDataService;
+	
+	@Resource(name = "kakaoFriendsTalkTemplateService")
+	private KakaoFriendsTalkTemplateService kakaoFtTemplateService;
+
+	@Resource(name = "KakaoBrandMsgService")
+	private KakaoBrandMsgService kakaoBrandMsgService;
+	
+//	@Resource(name = "KakaoFriendsTalkService")
+//	private KakaoFriendsTalkService kakaoFriendsTalkService;
+	
+	/** userManageService */
+	@Resource(name = "userManageService")
+	private EgovUserManageService userManageService;
+	
+	@Resource(name = "kakaoAlimTalkService")
+	private KakaoAlimTalkService kakaoAlimTalkService;
+	
+	/** 사이트 설정 */ 
+	@Resource(name = "egovSiteManagerService")
+	EgovSiteManagerService egovSiteManagerService;	
+	
+	@Resource(name = "MsgHolidayService")
+    private MsgHolidayService msgHolidayService;
+	
+	@Autowired
+	KakaoSendUtil kakaoSendUtil;
+	
+	
+	
+
+	/**
+	 * @methodName	: KakaoAlimtalkMsgDataView 
+	 * @author		: 이호영
+	 * @date		: 2025. 12. 18.
+	 * @description	: 브랜드 메시지 발송화면 이동
+	 * @return : String
+	 * @param model
+	 * @param kakaoVO
+	 * @return
+	 * @throws Exception
+	 * 
+	 */
+	@RequestMapping(value= {"/web/mjon/kakao/brandMsg/kakaoBrandMsgDataView.do"})
+	public String KakaoAlimtalkMsgDataView(ModelMap model
+			, @ModelAttribute("kakaoVO")  KakaoVO kakaoVO) throws Exception {
+		
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		
+		/*if(userId == "") {
+			return "redirect:/web/user/login/login.do";
+		}*/
+		
+		model.addAttribute("loginVO", loginVO);
+		
+			
+		if(!"".equals(userId) && !"ROLE_ADMIN".equals(author)) {
+		
+			//사용자 등록 발신프로필 정보 조회해오기
+			kakaoVO.setUserId(userId);
+			List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
+			model.addAttribute("resultProfileList", resultProfileList);
+			
+			// 특수문자 리스트 불러오기
+			MjonSymbolVO symbolVO = new MjonSymbolVO();
+			List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO);
+			model.addAttribute("symbolList", symbolList);
+			
+			//아이디 발신번호 리스트 불러오기.
+			List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId);
+			List<String> resultPhonList = new ArrayList<String>();
+			MJUtil mjUtil = new MJUtil();
+			for(String phone : resultSendPhonList) {
+				resultPhonList.add(mjUtil.addDash(phone));
+			}
+			model.addAttribute("resultPhonList", resultPhonList);
+			
+			
+			MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
+			
+			model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn());
+			
+			//3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용
+			/*Float shortPrice = mberManageVO.getShortPrice();
+			Float longPrice = mberManageVO.getLongPrice();
+			Float picturePrice = mberManageVO.getPicturePrice();
+			Float picture2Price = mberManageVO.getPicture2Price();
+			Float picture3Price = mberManageVO.getPicture3Price();*/
+			BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN);
+			
+			model.addAttribute("userMoney", userMoney);
+			
+
+			Calendar cal = Calendar.getInstance();
+			//////////////////////////////////////////////////////////////////
+			
+			//최근 전송 내역
+//			MjonMsgDataVO searchVO = new MjonMsgDataVO();
+//			Date now = new Date();
+//			SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
+//			cal.setTime(now);
+//			cal.add(Calendar.DATE, -3);
+//			String chkDate = format.format(cal.getTime());
+//			searchVO.setUserId(userId);
+//			searchVO.setMyMsgStDt(chkDate);	//검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작
+//				model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO));
+			
+			//자주보내는 번호
+//				model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO));
+			
+			// 사용자 정의 단가 정보 불러오기(시스템 단가 혹은 협의 단가)
+			model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
+			
+			
+			//사용자 템플릿 정보 조회
+			String friendId = kakaoVO.getFriendId();
+			KakaoVO resultTemplateVO = new KakaoVO();
+			
+			if(friendId != null) {
+				resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO);
+			}
+			model.addAttribute("resultTemplateVO", resultTemplateVO);
+			
+			
+			//친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지
+			int hour = cal.get(Calendar.HOUR_OF_DAY);
+			int minute = cal.get(Calendar.MINUTE);
+			
+			int time = hour * 60 + minute; // 하루 기준 분 단위
+
+			boolean sendStatus = !(time < 480 || time >= 1250); // 08:00(480), 20:50(1250)
+
+			if(!sendStatus) {
+				System.out.println("발송금지 시간 " + hour + ":" + minute);
+			}
+			
+			System.out.println("발송상태는 ::: "+sendStatus);
+			model.addAttribute("sendStatus", sendStatus);
+		
+		}
+		
+//		return "web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView";
+		return "web/kakao/msgdata/bt/brandMsgDataView";
+	}
+	
+	
+	
+	/**
+	 * @methodName	: kakaoFriendsTalkMsgSendAjax_advc 
+	 * @author		: 이호영
+	 * @date		: 2025. 12. 18.
+	 * @description	: 브랜드 메시지 발송 로직
+	 * @return : ResponseEntity<StatusResponse>
+	 * @param kakaoVO
+	 * @param request
+	 * @return
+	 * @throws Exception
+	 * 
+	 */
+	@RequestMapping(value = "/web/mjon/kakao/brandMsg/kakaoBrandMsgSendAjax_advc.do")
+	public ResponseEntity<StatusResponse> kakaoBrandMsgSendAjax_advc(
+			@RequestBody KakaoVO kakaoVO,
+			HttpServletRequest request
+			) throws Exception {
+		System.out.println(" :: sendMsgData_bt_advc :: ");
+		return ResponseEntity.ok().body(kakaoBrandMsgService.insertKakaoBtSandAjax_advc(kakaoVO, request)) ;
+		
+	}
+	
+}
 
src/main/java/itn/let/kakao/user/kakaoBt/web/KakaoBrandMsgTemplateController.java (added)
+++ src/main/java/itn/let/kakao/user/kakaoBt/web/KakaoBrandMsgTemplateController.java
@@ -0,0 +1,89 @@
+package itn.let.kakao.user.kakaoBt.web;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+import itn.com.cmm.EgovMessageSource;
+import itn.com.cmm.LoginVO;
+import itn.com.cmm.RestResponse;
+import itn.com.cmm.service.EgovCmmUseService;
+import itn.com.utl.fcc.service.EgovStringUtil;
+import itn.let.kakao.kakaoComm.KakaoReturnVO;
+import itn.let.kakao.kakaoComm.KakaoVO;
+import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiImageUpload;
+import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile;
+import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfileCategory;
+import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
+import itn.let.kakao.kakaoComm.kakaoApi.KakaoFTJsonSave;
+import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
+import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
+import itn.let.mail.service.StatusResponse;
+import itn.let.mjo.symbol.service.MjonSymbolService;
+import itn.let.mjo.symbol.service.MjonSymbolVO;
+import itn.let.uss.ion.cnt.service.CntManageVO;
+import itn.let.uss.umt.service.EgovUserManageService;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Controller
+public class KakaoBrandMsgTemplateController {
+
+	@Resource(name = "kakaoFriendsTalkTemplateService")
+	private KakaoFriendsTalkTemplateService kakaoFtTemplateService;
+	
+	@Resource(name = "EgovCmmUseService")
+	private EgovCmmUseService cmmUseService;
+	
+	@Resource(name = "kakaoApiService")
+	private KakaoApiService kakaoApiService;
+	
+	/** EgovMessageSource */
+	@Resource(name="egovMessageSource")
+	EgovMessageSource egovMessageSource;
+	
+	@Resource(name = "mjonSymbolService")
+	private MjonSymbolService mjonSymbolService;
+	
+	/** userManageService */
+	@Resource(name = "userManageService")
+	private EgovUserManageService userManageService;
+	
+	@Autowired
+	KakaoApiProfile kakaoApiProfile;
+	
+	@Autowired
+	KakaoApiProfileCategory kakaoApiProfileCategory;
+	
+	@Autowired
+	KakaoApiTemplate kakaoApiTemplate;
+	
+	@Autowired
+	KakaoApiImageUpload kakaoApiImageUpload;
+	
+	@Autowired
+	KakaoFTJsonSave kakaoFTJsonSave;
+	
+	
+}
src/main/java/itn/let/uss/umt/service/MberManageVO.java
--- src/main/java/itn/let/uss/umt/service/MberManageVO.java
+++ src/main/java/itn/let/uss/umt/service/MberManageVO.java
@@ -321,6 +321,12 @@
 	
 	private float kakaoFtWideImgPrice; // 카카오 친구톡 와이드 단가
 	
+	private float kakaoBtPrice; // 카카오 친구톡 텍스트 단가
+	
+	private float kakaoBtImgPrice; // 카카오 친구톡 이미지 단가
+	
+	private float kakaoBtWideImgPrice; // 카카오 친구톡 와이드 단가
+	
 	private float faxPrice;	// 팩스 단가
 	
 	private double userMoney; //회원보유 캐시
@@ -1819,6 +1825,24 @@
 	public void setKakaoFtWideImgPrice(float kakaoFtWideImgPrice) {
 		this.kakaoFtWideImgPrice = kakaoFtWideImgPrice;
 	}
+	public float getKakaoBtPrice() {
+		return kakaoBtPrice;
+	}
+	public void setKakaoBtPrice(float kakaoBtPrice) {
+		this.kakaoBtPrice = kakaoBtPrice;
+	}
+	public float getKakaoBtImgPrice() {
+		return kakaoBtImgPrice;
+	}
+	public void setKakaoBtImgPrice(float kakaoBtImgPrice) {
+		this.kakaoBtImgPrice = kakaoBtImgPrice;
+	}
+	public float getKakaoBtWideImgPrice() {
+		return kakaoBtWideImgPrice;
+	}
+	public void setKakaoBtWideImgPrice(float kakaoBtWideImgPrice) {
+		this.kakaoBtWideImgPrice = kakaoBtWideImgPrice;
+	}
 	public float getFaxPrice() {
 		return faxPrice;
 	}
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
@@ -2188,6 +2188,9 @@
 			, PRE_PAYMENT_YN 		AS prePaymentYn
 			, BIZ_NO				AS bizNo
 			, MBER_EMAIL_ADRES		AS mberEmailAdres
+			, KAKAO_BT_PRICE		AS kakaoBtPrice
+			, KAKAO_BT_IMG_PRICE	AS kakaoBtImgPrice
+			, KAKAO_BT_WIDE_IMG_PRICE	AS kakaoBtWideImgPrice
 		FROM   LETTNGNRLMBER
 		WHERE  MBER_ID = #userId#
 	
src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
@@ -16,11 +16,13 @@
 	
 	var menuTopTab = '${paramKakaoVO.menuTopTab}';
 	
+	
 	if(menuTopTab == ''){
 		
 		menuTopTab = form.menuTopTab.value;
 		
 	}
+	console.log('menuTopTab : ', menuTopTab);
 	
 	if(menuTopTab == 'tabConf'){
 		$(".topTab").removeClass("active");
@@ -37,6 +39,10 @@
 	}else if(menuTopTab == 'tabIntro'){
 		$(".topTab").removeClass("active");
 		$("#tabIntro").addClass("active");
+		
+	}else if(menuTopTab == 'tabBrandMsg'){
+		$(".topTab").removeClass("active");
+		$("#tabBt").addClass("active");
 	}
 		
 }
@@ -64,7 +70,12 @@
 		
 		url = "<c:url value='/web/mjon/kakao/alimtalk/kakaotalkIntrdView.do'/>";
 		
+	}else if(tabInfo == 'tabBrandMsg'){
+		
+		url = "<c:url value='/web/mjon/kakao/brandMsg/kakaoBrandMsgDataView.do'/>";
+		
 	}
+	
 	
 	//form.action =url;
 	//form.submit();
@@ -142,6 +153,7 @@
 
 	<ul class="tabType4">
         <li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li>
+	    <li id="tabBt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabBrandMsg');">브랜드메시지</button></li>
 	    <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
         <li id="tabConf" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabConf');">카카오톡 설정</button></li>
         <li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabKakaotalkIntrd');">카카오톡 소개</button></li>
 
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/bt/brandMsgDataView.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/bt/brandMsgDataView.jsp
@@ -0,0 +1,2678 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+<%@ page import="itn.com.cmm.LoginVO" %>
+<script src="/js/kakao/ft/templateComm.js"></script>
+
+<script type="text/javascript" src="<c:out value='/js/MJUtill.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/ftPriceClclt.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/ftTabulator.js?v=20240328' />"></script>
+<script type="text/javascript" src="<c:out value='/js/txtSpecialReplace.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/addr.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/common/popup.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/friendstalkExcel.js' />"></script>
+<!-- 주소록 유효성 체크 공통유틸로 인해 추가 -->
+<script type="text/javascript" src="<c:url value='/js/web/addr/cmn.js?date=202409021440'/>"></script>
+
+
+<script type="text/javascript">
+
+var loginVO = '${loginVO}';
+/* 파일등록 */
+var _fileIdx = 0;
+var _fileForm2 = new Array();
+var fileExt = ""; // 첨부파일 확장자
+var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변수
+
+var KAKAO_FT_PRICE;
+var KAKAO_FT_IMG_PRICE;
+var KAKAO_FT_WIDE_IMG_PRICE;
+$(document).ready(function (){
+	
+	KAKAO_FT_PRICE  = $('#kakaoFtPrice').val();
+	KAKAO_FT_IMG_PRICE  = $('#kakaoFtImgPrice').val();
+	KAKAO_FT_WIDE_IMG_PRICE  = $('#kakaoFtWideImgPrice').val();
+	//화면 초기 로딩시 화면 처리해주기 - 템플릿 불러오기 했을 경우를 위함
+	initFormChk();
+	
+	//특수문자, 일괄변화문구 삽입 기능 처리
+	$(".symbolButton, .changeWord").on('click', function(){
+		
+		// 커서 위치에 삽입
+		setCursorInsertText("inputTemplateContent", $(this).attr("value"));
+		setContentsLeng($('#inputTemplateContent').val());
+	});
+	
+	
+	//즉시 발송 라디오 버튼 선택시 숨김처리
+	$('input[name="reserYn"]').on('change', function() {
+		const isReserve = $(this).val() === 'Y';
+
+		$('.rev_selected').toggle(isReserve);
+		$('.send_rev .send_content').css('padding-bottom', isReserve ? '0' : '108px');
+		$('.send_btn .btnType:first-child').html(isReserve ? '예약하기' : '발송하기');
+		$('#bizForm #reserveYn').val($(this).val());
+	});
+	
+	//템플릿 내용 입력 글자수 체크 해주기
+	$("#inputTemplateContent").keyup(function(e){
+		
+		var contents = $('#inputTemplateContent').val();
+		setContentsLengForFriends(contents);
+		
+	});
+	
+// 웹링크 버튼명 변경 시 미리보기에도 적용 (여러 개일 때 정확하게)
+	$(document).on('keyup', '#btnNmWeb', function(){
+		var inputTxt = $(this).val() || '웹링크';
+		// 웹링크용 인풋만 골라서 현재 인덱스를 구함
+		var $webNmInputs = $('input#btnNmWeb');
+		var idx = $webNmInputs.index(this);
+		// 미리보기 영역의 웹링크 버튼들 중, 동일한 인덱스의 버튼 텍스트를 바꿔줌
+		$('.btnViewArea .btn_kakao_type.btnEmpty[id^=btnViewWL]').eq(idx).text(inputTxt);
+	});
+	$(document).on('keyup', '#btnNmApp', function(){
+		var inputTxt = $(this).val() || '앱링크';
+		var $appNmInputs = $('input#btnNmApp');
+		var idx = $appNmInputs.index(this);
+		$('.btnViewArea .btn_kakao_type.btnEmpty[id^=btnViewAL]').eq(idx).text(inputTxt);
+	});
+
+	$(".friend_talk_wrap #ad_Y").click(function () {
+		if ($(this).is(":checked") == true) {
+
+			fnAgentCodeChg();
+		}
+		thisFnByteString($('#smsTxtArea').val());
+	});
+	$("#send_fail_check").change(function(){
+		if($("#send_fail_check").is(":checked")){
+
+			
+			if(loginVO == "" || loginVO == null){
+				alert("로그인 후 사용 가능한 기능입니다.");
+				location.href="<c:url value='/web/user/login/login.do'/>";
+				return false;
+				
+				$("#send_fail_check").prop("checked", false);
+			}
+			
+			if($('#callFromList').val() === ''){
+				
+				if(confirm('대체문자 전송을 위한 발신번호가 등록되지 않았습니다. \n대체문자 발신번호를 지금 등록하시겠습니까?')){
+					window.location="<c:out value='/web/user/sendNumberManage.do' />";
+				}
+				$("#send_fail_check").prop("checked", false);
+				
+			}else{
+				// 에러버튼 체크 초기화
+				fn_insertErrorYN('N');
+				
+				$('#smsTxtArea').val('');
+// 				// 미리보기 텍스트를 가져와 줄바꿈 처리 후 대체문자 내용으로 입력
+				$('#smsTxtArea').val(
+					$('.template_text').html().trim().replace(/(<br>|<br\/>|<br \/>)/g, '\r\n')
+				);
+
+// 				//문자 내용 입력시 바이트수 계산하기
+				
+				$(".replace_send_wrap").slideDown(400);
+				thisFnByteString($('#smsTxtArea').val());
+			}
+		}else{
+			$(".replace_send_wrap").slideUp(400);
+			// 초기화 버튼 클릭
+			$('#failCheckInit').click();
+			$('.send_top .send_right .phone').css({'top': '0','transition': 'top .4s linear'});
+		}
+
+		// 금액 계산 fn 호출
+		totalFtPriceSum(tableL.getRows().length);
+		//fn_priceClclt();
+	});
+	
+	// 대체문자 내용 수정
+	$('#smsTxtArea').keyup(function(){
+		// 금액 계산 fn 호출
+		totalFtPriceSum(tableL.getRows().length);
+		//fn_priceClclt();
+		// 문자 바이트수 체크
+		thisFnByteString($('#smsTxtArea').val());
+		// 에러버튼 체크 초기화
+		fn_insertErrorYN('N');
+		
+	});
+	
+	
+
+	// 광고포함여부 체크 이벤트
+	$("#ad_Y").click(function () {
+		const isChecked = $(this).prop("checked");
+		$('#adFlag').val(isChecked ? 'Y' : 'N');
+	});
+	
+
+	$("input[name='img_file_add']").change(function () {
+
+		imageInit();
+		
+
+		// 첨부가 없으면 
+		if ($('#sendFailImgSrc').attr('src') != null) {
+			$('#sendFailImg').hide();
+			$('#sendFailImgSrc').attr('src', '');
+			$('#atchFileId').val('');
+			thisFnByteString($('#smsTxtArea').val());
+		}
+		
+		
+		
+
+		//결제 금액 구하기
+	    totalFtPriceSum(tableL.getRows().length);
+	});
+	
+	// 최근 전송내역
+	resultLatestMsgList();
+	//자주보내는 번호
+	resultBookMarkMsgList();
+	
+	
+	
+
+	// 대체문자 초기화
+	$('#failCheckInit').on('click', function(){
+		console.log('::failCheckInit::');
+		$('#smsTxtArea').val('');
+		thisFnByteString('');
+		
+	 });
+	 
+	
+	
+});
+
+function imageInit(){
+
+	var imageUrl = $("#templateImageUrl").val();
+	
+	// 이미지가 없으면 function 종료
+	if(imageUrl == ''){
+		return false;
+	}
+	
+	// 이미지가 있으면 이미지 창 및 미리보기 창에 이미지 삭제 
+	$("#imgLink").val("");
+	$("#imgFile").val("");
+
+	$('#imgTitle').addClass('file_none')
+					.text("이미지 없음");
+
+	$('#imgLink').prop('disabled', false);  // 회색 처리 제거 + 입력 불가 제거
+	
+	$("#templateImageUrl").val("");
+	$('.kakao_image').css("display", "none");
+	$("#kakaoImg").attr("src", "");
+	$("#imageFileName").val("");	//이미지 파일명 삭제
+	
+}
+/* 
+function validateButtons() {
+	var isValid = true;
+
+	console.log($('#buttonAddWrap').html());
+	var val = '';
+	// button_add_wrap 하위 input들 중에서 비어있는 항목이 있는지 확인
+	$('#buttonAddWrap').find('input[type="text"]').each(function() {
+
+		var val = $(this).val().trim();
+		if (val === '') {
+			console.log($(this).prop('outerHTML'));
+			isValid = false;
+			return false; // .each 루프 중단
+		}
+	});
+	
+	if (!isValid) {
+		alert('버튼명 및 링크를 입력해주세요.');
+		return false;
+	}else if (!val.startsWith('http://') && !val.startsWith('https://') ) {
+		alert('버튼의 링크는 http:// 또는 https:// 형식으로 입력해주세요.');
+		$(this).focus();
+		return false;
+	}
+
+	return true;
+} */
+
+function validateButtons() {
+	var isValid = true;
+
+	$('.kakaoBtnNmList').each(function() {
+		var val = $(this).val().trim();
+
+		// 빈 값 체크
+		if (val === '') {
+			alert('버튼명을 모두 입력해주세요.');
+			$(this).focus();
+			isValid = false;
+			return false; // .each 루프 중단
+		}
+	
+	});
+	
+	if(isValid){
+		$('.kakaoBtnList').each(function() {
+			var val = $(this).val().trim();
+	
+			// 빈 값 체크
+			if (val === '') {
+				alert('링크를 모두 입력해주세요.');
+				$(this).focus();
+	 			isValid = false;
+				return false; // .each 루프 중단
+			}
+	
+			// http 형식 체크
+			if (!val.startsWith('http://') && !val.startsWith('https://')) {
+				alert('버튼의 링크는 http:// 또는 https:// 형식으로 입력해주세요.');
+				$(this).focus();
+	 			isValid = false;
+				return false; // .each 루프 중단
+			}
+		});
+	}
+
+
+	return isValid;
+}
+
+//최근 전송내역
+function resultLatestMsgList(){
+
+  
+  $.ajax({
+      type:"POST",
+      url:"/web/mjon/msgdata/resultLatestMsgListAjax.do",
+      data:{},
+      dataType:'json',
+      // timeout:(1000*30),
+      success:function(data){
+          console.log('resultLatestMsgList : ',data.object);
+          
+
+          // 가져온 데이터 배열
+          let resultList = data.object; 
+          let $latestMsgUl = $('#latestMsgUl'); // 기존 리스트 UL
+
+          // 기존 내용을 비우기
+          $latestMsgUl.empty();
+
+          // 데이터가 있는 경우
+          if (resultList && resultList.length > 0) {
+              resultList.forEach(function(item, index) {
+                  let listItem = 
+                      '<li id="latestLi">' +
+                          '<input type="checkbox" id="addrChk_' + (index + 1) + '" name="latAddrChk" value="' + item.callTo + '">' +
+                          '<label for="addrChk_' + (index + 1) + '" class="label">최근 전송내역</label>' +
+                          '<p>' + item.callTo + '</p>' +
+                          '<button type="button" id="latestAddrDel">' +
+                              '<img src="/publish/images/popup/close3.png" alt="전화번호 삭제">' +
+                          '</button>' +
+                      '</li>';
+                  
+                  $latestMsgUl.append(listItem);
+              });
+          } else {
+              // 데이터가 없는 경우
+              $latestMsgUl.append('<li><p>최근 발송 내역이 없습니다.</p></li>');
+          }
+      },
+      error:function(request , status, error){
+          console.log(' error ?');
+          console.log('request : ', request);
+          console.log('status : ', status);
+      }
+  });
+}
+
+//자주보내는 번호
+function resultBookMarkMsgList(){
+
+  $.ajax({
+      type:"POST",
+      url:"/web/mjon/msgdata/resultBookMarkMsgList.do",
+      data:{},
+      dataType:'json',
+      // timeout:(1000*30),
+      success:function(data){
+          console.log('resultBookMarkMsgList : ',data.object);
+          
+
+          // 가져온 데이터 배열
+          let resultList = data.object; 
+          let $bookMsgUl = $('#bookMsgUl'); // 기존 리스트 UL
+
+          // 기존 내용을 비우기
+          $bookMsgUl.empty();
+
+          // 데이터가 있는 경우
+          if (resultList && resultList.length > 0) {
+              resultList.forEach(function(item, index) {
+//                console.log(item.addrPhoneNo + " : " + item.addrPhoneNo);
+                  let listItem = 
+                      '<li id="bookMarkLi">' +
+                          '<input type="checkbox" id="bokAddrChk_' + (index + 1) + '" name="bookAddrChk" value="' + item.addrPhoneNo + '">' +
+                          '<label for="bokAddrChk_' + (index + 1) + '" class="label">최근 전송내역</label>' +
+//                           '<p>' + item.addrPhoneNo + '</p>' +
+                          '<p>' + item.addrPhoneNo + '</p>' +
+                          '<button type="button" id="bookMarkAddrDel">' +
+                              '<img src="/publish/images/popup/close3.png" alt="전화번호 삭제">' +
+                          '</button>' +
+                      '</li>';
+                  
+                  $bookMsgUl.append(listItem);
+              });
+          } else {
+              // 데이터가 없는 경우
+              $bookMsgUl.append('<li><p>등록된 자주 보내는 번호 내역이 없습니다..</p></li>');
+          }
+      },
+      error:function(request , status, error){
+          console.log(' error ?');
+          console.log('request : ', request);
+          console.log('status : ', status);
+      }
+  });
+}
+
+function initFormChk(){
+	console.log(':: initFormChk ::');
+	
+	//채널ID 정보 미리보기에 표시해주기
+	fnAgentCodeChg();
+	
+	//템플릿 등록 이미지가 있는 경우 이미지 정보 표시해 주기
+	var imgType = $('#imageType').val();
+
+	$("#img_file_0").prop('checked',true);
+	if(imgType){
+		
+		if(imgType == 'I'){
+			
+			$('#img_file_1').click();
+			
+		}else if(imgType == 'W'){
+			$('#img_file_2').click();
+		} 
+
+		// 이미지명 입력
+		$('#imgTitle').removeClass('file_none')
+						.text($('#imageFileName').val());
+		
+		
+		$('#imgLink').val($('#imgLinkTemp').val());  // 이미지 link
+		$('#imgLink').prop('disabled', true);  // 회색 처리 + 입력 불가
+		// 이미지 URL은 해당 input에 있음.
+		
+		/* else{
+			$(".img_add_info_wrap, .img_file_add_wrap").hide();
+		} */
+		
+	}
+	
+	var imgUrl = $('#templateImageUrl').val();
+	
+	if(imgUrl != ''){
+		$('.kakao_image').css("display", "block");
+		$("#kakaoImg").attr("src", imgUrl);
+		$("#kakaoImg").attr("src", imgUrl);
+
+		$('#sendFailImg').show();
+		$('#sendFailImgSrc').attr('src', imgUrl);
+		
+	}
+	
+	//초기 템플릿 내용 글자수 처리해주기
+	var tmpContents = $('#inputTemplateContent').val();
+	setContentsLengForFriends(tmpContents);
+	
+	var reserYn = $("input[name=reserYn]:checked").val();
+	if(reserYn == 'N'){
+		
+		$('.rev_selected').hide();
+		$('.send_rev .send_content').css('padding-bottom','108px');
+		$('.send_btn .btnType:first-child').html('발송하기');
+		$('#bizForm #reserveYn').val('N');
+		
+	}
+	
+	
+	// 광고포함여부 체크
+	// 기본
+	// 	- adFlag = Y
+	// 	- ad_Y = Y
+	if($('#adFlag').val() == 'N'){
+		$('#ad_Y').click();
+	}
+	
+	
+}
+
+//우측 미리보기 화면 채널 아이디 정보 변경해 주기
+function fnAgentCodeChg(){
+	var yellowIdVal = $("#selectAgentCode option:checked").val();
+	var yellowId = $("#selectAgentCode option:checked").text();
+	var yellowIdAt = yellowId.replaceAll('@','');
+	
+	// 체크 여부에 따라 채널ID 문구 설정
+	
+	if(yellowIdVal != ''){
+		
+		$('#spnYellowid').text(yellowId);	// 미리보기화면 최상단 채널ID
+		
+		var cleanYellowId = yellowId.replace(/^@/, ""); // 앞에 @ 기호 제거
+		if ($("#ad_Y").is(":checked")) {
+			
+			$("#adTxt").show(); // 내용
+// 			$("#adTxt p").html("(광고) " + cleanYellowId + ""); // 내용 
+			$("#adTxt p").html("(광고)"); // 내용 
+			
+// 			$("#talkTitle").html("<span>(광고)</span> " + cleanYellowId); // 미리보기 화면 상단
+			$("#talkTitle").html("<span>(광고)</span> "); // 미리보기 화면 상단
+		} 
+		
+	}else{
+		
+		var channelId = "채널ID";
+		
+		$('#spnYellowid').text(channelId);	// 미리보기화면 최상단 채널ID
+		
+		if ($("#ad_Y").is(":checked")) {
+			
+			$("#adTxt").show(); // 내용
+// 			$("#adTxt p").html("(광고) " + channelId + ""); // 내용 
+			$("#adTxt p").html("(광고)"); // 내용 
+			
+// 			$("#talkTitle").html("<span>(광고)</span> " + channelId); // 미리보기 화면 상단
+			$("#talkTitle").html("<span>(광고)</span>"); // 미리보기 화면 상단
+		} else {
+			$("#adTxt").hide(); // 내용
+			$("#talkTitle").html(channelId); // 미리보기 화면 상단
+		}
+	}
+}
+
+//파일첨부 버튼 클릭시 파일 첨부 실행
+function upImgClick(){
+	var selectChennelID = $("select[name='selectAgentCode']").val();	//채널ID 정보
+	var imageType = $("input[name=img_file_add]:checked").val();		//이미지 종류 정보(일반, 와이드)
+	var title = $("#imgTitle").text();
+	var link = $("#imgLink").val();
+	
+	if(selectChennelID == ''){
+		
+		$("#imgTitle").text("");
+		$("#imgFile").val("");
+		alert("채널ID를 선택해 주세요.");
+		return false;
+		
+	}
+	
+	if(imageType != ''){
+		
+		bizForm.imageType.value = imageType;
+		
+	}else{
+		
+		$("#imgTitle").text("");
+		$("#imgFile").val("");
+		alert("이미지 종류를 선택해 주세요.");
+		return false;
+		
+	}
+	/* 
+	if(title == ''){
+		
+		$("#imgTitle").text("");
+		$("#imgFile").val("");
+		alert("이미지 제목을 입력해 주세요.");
+		return false;
+		
+	} */
+	
+	//이미지 선택시 링크 정보 및 url 패턴 검사
+	console.log('link: ', link);
+	if (!link) {
+		if(!confirm("먼저 URL을 입력하지 않으면 이미지에 URL이 저장되지 않습니다. 계속하시겠습니까?")){
+			return false;	
+		}
+	}else if(!link.startsWith('http://') && !link.startsWith('https://')){
+		alert('이동할 URL은 http:// 또는 https:// 형식으로 입력해주세요.');
+		return false;	
+	}
+	/* 
+	else if(link.search("http://") == -1 && link.search("https://") == -1){
+
+		$("#imgTitle").text("");
+		$("#imgFile").val("");
+		alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다.");
+		return false;
+	}
+ */	
+	//첨부파일 선택 팝업 호출해주기
+	$("#imgFile").click();
+}
+
+//첨부 이미지 정보 확인 처리 해주기(이미지 리사이징 전단계)
+function imgResizeInfo(event){
+	
+	var fileValue = $("#imgFile").val().split("\\");
+	var fileName = fileValue[fileValue.length-1];
+	
+	var fileExt = fileName.split('.').pop().toLowerCase();
+
+	if(fileExt.length > 0){
+		if($.inArray(fileExt, ['jpg','jpeg','png']) == -1) {
+			alert('jpg, jpeg, png 파일만 업로드 할수 있습니다.');
+			return false;
+	   	}
+	   
+		$("#imgTitle").text(fileName); 
+	}
+	
+	//알림톡 이미지 등록 요청하기
+	getTemplateImagUrl();
+}
+
+//카카오 친구톡 이미지 등록 요청 API 호출해주기
+function getTemplateImagUrl(){
+	
+	var bizForm = document.bizForm;
+	
+	var data = new FormData(bizForm);
+	var atchFileSts = true;	//첨부파일 갯수 상태 값1
+	
+	data.append("file0", $('#imgFile').prop('files')[0]);
+	
+	var fileValue = $("#imgFile").val().split("\\");
+	var fileName = fileValue[fileValue.length-1];
+	
+	var fileExt = fileName.split('.').pop().toLowerCase();
+	
+	if($.inArray(fileExt, ['jpg','jpeg', 'png']) == -1) {
+
+		alert('jpg, jpeg 파일만 업로드 할수 있습니다.');
+		return false;
+
+   	}
+	
+	
+// 	if(fileExt == "jpg" || fileExt == "jpeg" || fileExt == "png"){
+	console.log('fileExt : ', fileExt);
+	if(fileExt != null && fileExt !== "jpg" && fileExt !== "jpeg" && fileExt !== "png"){
+	    alert("jpg, jpeg, png 파일만 업로드 할 수 있습니다.");
+	    return;
+	}
+
+	
+    var url = url = "/web/mjon/kakao/template/sendKakaoFriendsTemplateImageUploadAjax_advc.do";
+//     var url = url = "/web/mjon/kakao/template/sendKakaoFriendsTemplateImageUploadAjax.do";
+	
+	$.ajax({
+		type : 'POST'
+		, enctype : 'multipart/form-data'
+		, url : url
+		, data : data
+		, dataType:'json'
+		, async:true
+		, processData: false
+		, contentType: false
+		, cache : false
+		, success : function(returnData){
+			console.log('returnData : ', returnData);
+			
+
+
+			if (returnData.status === 'OK' || returnData.status === 200) {
+				alert(returnData.message);
+				
+				$('#imgTitle').removeClass('file_none')
+								.text(fileName);
+				$('#imgLinkTemp').val($('#imgLink').val());  // 회색 처리 + 입력 불가
+				$('#imgLink').prop('disabled', true);  // 회색 처리 + 입력 불가
+
+
+				$("#imageFileName").val(fileName);
+				
+				
+
+				// imgUrl은 object에 포함된 경우만 처리
+				if (returnData.object) {
+					$("#templateImageUrl").val(returnData.object.imgUrl);
+					$(".kakao_image").css("display", "block");
+					$("#kakaoImg").attr("src", returnData.object.imgUrl);
+					
+					
+					// 대체문자 이미지
+					$("#atchFileId").val(returnData.object.atchFileId);
+					// 대체문자
+					$('#sendFailImg').show();
+					$('#sendFailImgSrc').attr('src', returnData.object.imgUrl);
+					// 대체문자 포토형으로 수정 
+// 					$('.put_left').removeClass("short"); //내용 입력 박스 클래스 삭제
+// 					$('.put_left').removeClass("long"); //내용 입력 박스 클래스 삭제
+// 					$('.put_left').addClass('photo'); 
+					setSendFailTemplate('P')
+				}
+
+			} else {
+				alert(returnData.message || "이미지 등록 중 오류가 발생하였습니다.");
+
+				// 첨부파일 정보 초기화
+				$("#imgFile").val("");
+
+				$('#imgTitle').addClass('file_none')
+								.text("이미지 없음");
+				return false;
+			}
+		},
+		beforeSend : function(xmlHttpRequest) {
+        	//로딩창 show
+        	$('.loading_layer').addClass('active');				
+		},	        	        
+        complete : function(xhr, textStatus) {
+        	//로딩창 hide
+        	$('.loading_layer').removeClass('active');
+		},
+		error : function(request , status, error){
+			alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
+		}
+	});
+	
+	//첨부파일 이름 및 데이터 지워주기 - 완료 후 팝업이 자동으로 닫힘.
+	$("#imgFile").val("");
+}
+
+function setSendFailTemplate(p_type){
+	if(p_type == 'P'){
+		// 대체문자 포토형으로 수정 
+		$('.put_left').removeClass("short"); //내용 입력 박스 클래스 삭제
+		$('.put_left').removeClass("long"); //내용 입력 박스 클래스 삭제
+		$('.put_left').addClass('photo'); 
+
+		$('.msg_com').removeClass("msg_short"); //단문 클래스 삭제하고
+		$('.msg_com').removeClass("msg_long"); //단문 클래스 삭제하고
+		$('.msg_com').addClass("msg_photo"); //단문 클래스 삭제하고
+		
+
+		$('#limitLeng').html("2000");
+		$('.msg_com').html("그림");
+		
+	}
+	
+}
+
+function fnImageDel(){
+	
+	if(confirm("등록된 이미지를 삭제하시겠습니까?")){
+		imageInit();
+	}
+	
+	
+	
+	/* var imageUrl = $("#templateImageUrl").val();
+	var bizForm = document.bizForm;
+	
+	bizForm.senderKey.value = $("select[name='selectAgentCode']").val();	// 선택 채널ID
+	
+	if(imageUrl == ''){
+		
+		alert("등록된 이미지가 없습니다.");
+		return false;
+		
+	}
+	
+	var tmpFriendId = $("#tmpFriendId").val();
+	console.log(' + tmpFriendId :: ', tmpFriendId);
+	if(tmpFriendId != ''){
+		
+		if(!confirm("불러온 템플릿의 이미지도 함께 삭제 됩니다. 계속하시겠습니까?")){
+			return false;
+		}
+		
+	}
+	
+	var data = new FormData(bizForm);
+	
+	if(confirm("등록된 이미지를 삭제하시겠습니까?")){
+		
+		$.ajax({
+			type: "POST"
+			, url: "/web/mjon/kakao/template/deleteKakaoFriendsImageDataAjax.do"
+			, data: data
+			, dataType: 'json'
+			, async: false
+			, processData: false
+			, contentType: false
+			, cache: false
+			, success: function (returnData, status) {
+				
+				var result = returnData.result;
+				var code = returnData.code;
+				var msg = returnData.msg;
+				
+				if(result == "notLogin") {//차단 발신번호인 경우 등록 불가
+					alert("로그인후 진행이 가능합니다.");
+				}else if(returnData.result == "success") {
+					
+					if(code == "200"){
+						alert("등록된 이미지가 삭제되었습니다.");
+						$("#imgLink").val("");
+						$("#imgFile").val("");
+
+						$('#imgTitle').addClass('file_none')
+										.text("이미지 없음");
+
+						$('#imgLink').prop('disabled', false);  // 회색 처리 제거 + 입력 불가 제거
+						
+						$("#templateImageUrl").val("");
+						$('.kakao_image').css("display", "none");
+						$("#kakaoImg").attr("src", "");
+						$("#imageFileName").val("");	//이미지 파일명 삭제
+						$("#img_file_0").click();		//이미지 첨부 안함 선택
+						
+						
+
+						
+						
+						
+						return false;
+						
+					}else{
+						alert(msg);
+						return false;
+					}
+				}else{
+					alert("이미지 삭제에 오류가 발생하였습니다.");
+					return false;
+				}
+			}
+			,error: function (e) {
+				console.log("ERROR : ", e);
+				alert("이미지 삭제에 오류가 발생하였습니다.");
+			}
+		});
+	} */
+}
+
+//알림톡 내용 초기화 해주기
+function fnContentsReset(){
+	$("#inputTemplateContent").val("");
+	$(".template_text").text("내용 미리보기");
+	$('.nowChar').text("0 /");
+}
+
+//저장 템플릿 불러오기 선택시 
+function myTemplateSelect(ftId){
+	
+	var form = document.templateForm;
+	
+	form.friendId.value = ftId;
+	
+	form.action="/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do";
+	form.submit();
+	
+	
+}
+
+/* 
+function advTextChange(adFlagVal){
+	console.log('adFlagVal : ', adFlagVal);
+	if(typeof adFlagVal == "undefined" || adFlagVal == null || adFlagVal == ""){
+		
+		$("#ad_Y").prop('checked',true);
+		
+	}else if(adFlagVal == 'N'){//광고 표시 숨김처리
+		
+		$('.adFlag').hide();
+		$('.kakao_block_text').hide();
+		$('.adFlagAfter').hide();
+		
+	}else{
+		$('.adFlag').show();
+		$('.kakao_block_text').show();
+		$('.adFlagAfter').show();
+	}
+	
+}
+ */
+
+//친구톡 내용 템플릿으로 저장하기 - 내용 저장하기
+function myTemplateSave(){
+
+	var selectAgentCode = $("select[name='selectAgentCode']").val();	// 선택 채널ID
+	var yellowId = $("select[name='selectAgentCode'] option:selected").text().replaceAll('@','');			// 선택 채널명
+	var inputTemplateName = $("#inputTemplateName").val();				// 입력 템플릿 이름
+	var imageType = $("input[name=img_file_add]:checked").val();		// 첨부 이미지 종류(없음, 일반, 와이드 이미지)
+	var imageTitle = $("#imgTitle").text();								//첨부이미지 제목
+	var imageLink = $("#imgLink").val();								//첨부이미지 클릭시 이동 링크 주소
+	var inputTemplateContent = $("#inputTemplateContent").val();		// 템플릿 내용
+	
+	var inputTemplateImageName = $("#templateImageName").val();	// 템플릿 이미지 파일명
+	var inputTemplateImageUrl = $("#templateImageUrl").val();		// 템플릿 이미지 링크
+	
+	// 공통 유효성 검사 조회
+	if(selectAgentCode == null || selectAgentCode == ""){
+		alert("채널ID를 선택해 주세요");
+		return;
+	};
+	
+	if(inputTemplateName == null || inputTemplateName == ""){
+		alert("템플릿 명을 입력해 주세요");
+		$("#inputTemplateName").focus();
+		return;
+	};
+	
+	if(imageType == 'I' || imageType == 'W'){
+		
+		if(imageTitle == ''){
+			
+			alert("이미지 제목을 입력해 주세요.");
+			return false;
+			
+		}
+		
+	/* 	if(imageLink == ''){
+			
+			alert("이미지 클릭시 이동할 URL을 입력해 주세요.");
+			return false;
+			
+		}else{
+			
+			if(imageLink.search("http://") == -1 && imageLink.search("https://") == -1){
+				
+				alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다.");
+				return false;
+				
+			}
+			
+		} */
+		
+		if(inputTemplateImageUrl == ''){
+			
+			alert("이미지를 선택해 주세요.");
+			return false;
+			
+		}
+		
+	}
+	
+	
+	if(inputTemplateContent == null || inputTemplateContent == ""){
+		alert("템플릿 내용을 입력해 주세요.");
+		return;
+	};
+	
+	var bizForm = document.bizForm;
+	bizForm.senderKey.value = selectAgentCode;
+	//bizForm.yellowId.value = yellowId;
+	bizForm.templateName.value = inputTemplateName;
+	//bizForm.imageType.value = imageType;
+	
+	bizForm.imgLink.value = imageLink;
+	console.log('imageLink : ', imageLink);
+	console.log('bizForm.imgLink.value : ', bizForm.imgLink.value);
+	
+	bizForm.templateContent.value = inputTemplateContent;
+	
+	var data = new FormData(bizForm);
+	data.append("imgLink", imageLink);
+	data.forEach((value, key) => {
+		console.log(key, value);
+	});
+	
+	if(confirm("템플릿을 저장하시겠습니까?")){
+		
+		$.ajax({
+			type: "POST"
+			, url: "/web/mjon/kakao/template/insertKakaoFriendsTemplateDataAjax.do"
+			, data: data
+			, dataType: 'json'
+			, async: false
+			, processData: false
+			, contentType: false
+			, cache: false
+			, success: function (returnData, status) {
+				
+				var result = returnData.result;
+				
+				if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
+					alert("로그인후 진행이 가능합니다.");
+				}else if(returnData.result == "success") {
+					alert("템플릿 저장이 완료되었습니다.");
+					return false;
+				}else{
+					
+					alert("템플릿 저장에 오류가 발생하였습니다.");
+					return false;
+					
+				}
+			}
+			,error: function (e) {
+				console.log("ERROR : ", e);
+				alert("템플릿 저장에 오류가 발생하였습니다.");
+			}
+		});
+		
+	}
+	
+}
+
+//주소록 불러오기 버튼 클릭시
+$('.popupAddr').click(function(){
+	
+	if(loginVO == "" || loginVO == null){
+		alert("주소록 불러오기 서비스는 로그인 후 이용 가능합니다.");
+		location.href="<c:url value='/web/user/login/login.do'/>";
+		return false;
+	}
+	
+	$("#addrGroupLoad").load("/web/mjon/msgdata/selectAddrGroupListAjax.do", "" ,function(response, status, xhr){
+		//리스트 스크롤 처리해주기
+		$(".adr_pop_list").mCustomScrollbar({
+			axis: 'y',
+			scrollbarPosition: "outside",
+			theme: "dark",
+			autoHideScrollbar: false
+		});
+	});
+	
+});
+
+function fnEmptyId(){
+	
+	alert("로그인 후 이용이 가능합니다.");
+	return false;
+	
+}
+
+//분할전송 건수 데이터 체크
+function checkNumber(event) {
+	var divideCnt = $('#frmDivideCnt').val();
+	if(!(event.key >= 0 && event.key <= 9)) {
+		return false;
+	}
+	
+	var totCnt = divideCnt + "" + event.key;
+	if(Number(totCnt) > 5000){
+		alert("분할전송 건수는 5,000건을 초과할 수 없습니다.");
+		$('#frmDivideCnt').val("20");
+		return false;
+	}
+  
+  return true;
+}
+
+function fnSelectMinChk(){
+	
+	var resHour = $("#msgResHour option:selected").val();
+	var resMin = $("#msgResMin option:selected").val();
+	
+	if(resHour == '20'){
+		
+		if(resMin >= 50 && resMin <= 59){
+			
+			alert("친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다.");
+			$("#msgResMin").val("40").prop("selected", true);
+			
+		}
+		
+	}
+	
+}
+
+
+//친구톡 발송 금지 시간 처리
+function fn_noTimeSend(){
+	
+	var id = '${loginVO.id}';
+
+	if(id == ""){
+		
+		alert("로그인 후 이용이 가능합니다.");
+		return false;
+		
+	}
+	
+	alert("친구톡은 20:50 ~ 익일 08:00까지 발송할 수 없습니다.");
+	return false;
+	
+}
+
+//친구톡 데이터 전송 처리
+function fn_sendMsgData(){
+	
+	// 유효성 검사 실패 시 저장 동작 중단
+/* 	if (!validateLinks()) {
+		return false;
+	}
+	 */
+	
+	var senderKey = $("#selectAgentCode option:checked").val();
+	
+	if(senderKey == ''){
+		
+		alert("채널ID를 선택해 주세요.");
+		return false;
+		
+	}else{
+		
+		$("#inputSenderKey").val(senderKey);
+		
+	}
+	
+	//이미지 첨부 체크	
+	var imgChk = $("input[name=img_file_add]:checked").val();
+	if(!getFtImageType(imgChk)){
+		return false;
+	}
+	
+	//템플릿 버튼 갯수 체크 
+	var buttonCnt = $(".btn_kakao_type").length;
+
+	if(buttonCnt > 0){
+		//json 파일 필요 유무 셋팅
+		$("#bizJsonYn").val("Y");
+	}
+	
+	//친구톡 내용 체크
+	var tmpContents = $('#inputTemplateContent').val();
+
+	if(tmpContents == ""){
+		
+		alert("친구톡 내용을 입력해 주세요.");
+		return false;
+		
+	}
+	
+	var rtnStr = strChinJpnCheck(tmpContents);
+	
+	//문자내용에 이모지가 있는지 체크
+	if(!emojiCheck(tmpContents)) return false;
+	
+	if(rtnStr.length > 0){
+		
+		alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다.");
+		
+	}
+	
+
+	
+	var selectedData = tableL.getRows();
+	
+	if(selectedData == "" || selectedData == null){
+		
+		alert("받는사람 주소를 한 건 이상 입력해주세요.");
+		return false;
+	
+	}
+	
+	//예약문자 시간 체크
+	var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
+	
+	if(reserYn == 'Y'){
+		
+		var date = $(".resDate").val();//form.msgResDate.value;
+		var hour = $("#msgResHour option:selected").val();
+		var min = $("#msgResMin option:selected").val();
+		
+		if(date == ""){
+			
+			alert("예약전송 날짜를 선택해 주세요.");
+			return false;
+			
+		}else{
+			
+			var now = new Date();
+			var reqDate = date + " " + hour + ":" + min + ":00";
+			var gapDate = getGapDayTime(date, hour, min);
+			
+			if(gapDate < 0){ // 음수이면 이전날짜, 크면 이후 날짜.
+				alert("예약 날짜는 현재 시간 이후의 날짜 및 시간을 선택해 주세요.");
+				return false;
+			}else{
+				$("#reqDate").val(reqDate);	//예약일자 파라미터 저장
+			}
+		}
+
+	}else{
+		
+		$("#reqDate").val("");	//예약일자 파라미터 저장
+		
+	}
+	
+	
+	//대체문자 선택 및 내용 체크
+	var subMsgSendYn = "N";
+	if($("#send_fail_check").is(":checked")){
+		subMsgSendYn = 'Y'
+		$('#callFrom').val($('#callFromList').val()) 
+	}
+	$("#subMsgSendYn").val(subMsgSendYn);
+	if(subMsgSendYn == 'Y'){
+		$("#subMsgTxt").val( $('#smsTxtArea').val());
+	}
+		
+	
+	
+	//템플릿 내용 입력
+	$("#templateContent").val(tmpContents);
+	
+	//광고포함 여부
+/* 	var adFlag = $("input[name=adFlag]:checked").val();
+	$("#adFlag").val(adFlag); */
+	
+	
+	if (!validateButtons()) {
+		return;
+	}
+	
+	
+	
+	if(!confirm("친구톡을 발송하시겠습니까?")){
+		return false;
+	}
+	
+		
+
+	// 타블레이터 호출
+	var $selectedData = tableL.getData(); // 데이터 가져오기
+	
+	var data = $('#bizForm');
+	var formDataArray = data.serializeArray();
+	
+	// 배열을 객체로 변환
+	var formData = {};
+	$.each(formDataArray, function(index, field) {
+		formData[field.name] = field.value;
+	});
+
+	// 2. buttonVOList 수동으로 수집
+	var buttonList = [];
+	$('input[name^="buttonVOList"]').each(function() {
+		let nameAttr = $(this).attr('name');
+		let match = nameAttr.match(/buttonVOList\[(\d+)\]\.(\w+)/);
+		if (match) {
+			let index = parseInt(match[1]);
+			let key = match[2];
+			let value = $(this).val();
+		
+			if (!buttonList[index]) buttonList[index] = {};
+			buttonList[index][key] = value;
+		}
+	});
+
+	// 3. formData에 배열로 추가
+	formData["buttonVOList"] = buttonList;
+	  // 회색 처리 + 입력 불가
+
+	// 4. 기존의 buttonVOList[0].xxx 형태 제거
+	Object.keys(formData).forEach(function(key) {
+		if (/^buttonVOList\[\d+\]\./.test(key)) {
+		    delete formData[key];
+		}
+	});
+	
+	// VO에 정의되어있지 않는 필요없는 값은 제거
+	["img_file_add", "userMoney", "callToList"].forEach(function(key) {
+		  delete formData[key];
+	});
+
+	formData["imgLink"] = $('#imgLinkTemp').val();
+
+	// 빈 값 제거
+	removeEmptyValues(formData);
+	// 선택된 데이터 추가
+	formData["mjonBTSendVOList"] = $selectedData;
+	// JSON 데이터 확인
+	console.log("최종 formData:", JSON.stringify(formData));
+
+
+    // 프로그래스파 시간을 위한 계산
+    var estimtedTime = calculateEstimatedTime(tableL.getRows().length);
+	
+	
+	$.ajax({
+		type: "POST"
+// 		, url: "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax_advc.do"
+		, url: "/web/mjon/kakao/brandMsg/kakaoBrandMsgSendAjax_advc.do"
+		, data: JSON.stringify(formData)
+		, contentType: 'application/json'
+		, dataType: 'json'
+		, success: function (data) {
+            console.log('data : ', data);
+            
+            var status = data.status;
+            if("OK" == status){
+                var resultSts = data.object.resultSts;
+                var reserYn = data.object.reserYn;
+                var resText = (reserYn === 'Y') ? '예약' : '발송';
+                    
+                $('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+                $('.pop_msg_success .msg_text').html(resText+" 성공 : <strong>"+ resultSts + "</strong>건의<br>친구톡이 " + resText + " 되었습니다.");
+                
+            }else if("UNAUTHORIZED" == status){
+                alert(data.message);
+                location.reload();
+            }else{
+                alert(data.message);
+                return false;
+            }
+			
+			/* 
+			if(status == 'success'){
+				if("loginFail" == returnData.result){
+					
+					alert(returnData.message);
+					return false;
+					
+				}else  if('fail' == returnData.result){
+					
+					alert(returnData.message);
+					return false;
+					
+				}else if('authFail' == returnData.result){
+					
+					alert(returnData.message);
+					location.reload();
+					
+				} else if(status == 'success'){
+					
+					var kakaoSendCnt = returnData.resultSts;
+					
+					$('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+					
+					//예약발송 건의 경우 결과 팝업 문구 변경
+					if(reserYn == 'Y'){
+						$('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>친구톡이 예약 되었습니다.");
+					}else{
+						$('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>친구톡이 발송 되었습니다.");
+					}
+					
+					$('.mask').addClass('on');
+				}
+			} */
+		}
+		,beforeSend : function(xmlHttpRequest) {
+			//로딩창 show
+// 			$('.loading_layer').addClass('active');
+            progressStart(estimtedTime);
+		}
+		,complete : function(xhr, textStatus) {
+			//로딩창 hide
+// 			$('.loading_layer').removeClass('active');
+            progressComplete();
+		}
+		,error: function (e) {
+			console.log("ERROR : ", e);
+			alert("카카오 브랜드메시지 전송에 실패하였습니다.");
+		}
+	}); 
+	
+}
+
+//프로그레스바 
+var start, change;
+var progressInterval = null; // 전역 변수로 타이머 ID 관리
+function progressStart(time) {
+  // 기존 타이머 정지 및 초기화
+  if (progressInterval !== null) {
+      clearInterval(progressInterval); // 이전 타이머 정지
+      progressInterval = null; // 타이머 ID 초기화
+  }
+  resetProgressBar(); // 프로그레스바 초기화
+
+  // 프로그레스바 보이기
+  $(".progress_bar_wrap").css("display", "flex");
+
+  // 프로그레스바 요소 가져오기
+  var timeText = document.querySelector(".time_text");
+  var bar = document.querySelector(".change_bar");
+
+  // 초기 상태 설정
+  var width = 1;
+  var totalTime = time * 1000; // 총 실행 시간 (밀리초)
+  var cmpWid = totalTime / 100; // width 증가 간격 (밀리초)
+
+  // 새 타이머 시작
+  progressInterval = setInterval(changeWidth, cmpWid);
+
+  function changeWidth() {
+      if (width >= 100) {
+          // 프로그레스바 100% 도달
+          clearInterval(progressInterval); // 타이머 종료
+          progressInterval = null; // 타이머 ID 초기화
+
+          timeText.innerHTML = "100%";
+
+          setTimeout(function () {
+              // 100% 표시 후 "잠시만 기다려주세요" 변경
+              timeText.innerHTML = "잠시만 기다려주세요...";
+              $(".time_text").addClass("animation");
+          }, 1000);
+      } else {
+          // 프로그레스바 진행
+          width++;
+          bar.style.width = width + "%";
+          timeText.innerHTML = width + "%";
+      }
+  }
+}
+
+//선택된 데이터의 길이에 따라 예상 시간 계산 함수
+function calculateEstimatedTime(selectedCount) {
+  //기준값
+  // const processTimePerBatch = 130; // 130초
+  
+  
+  // 30만건 기준 10분으로 기준을 잡아서 
+  // 시간계산함
+  const processTimePerBatch = 600;
+  const batchSize = 300000;
+  
+  // 1건당 처리 시간
+  const timePerRecord = processTimePerBatch / batchSize;
+
+  // 예상 시간 계산
+  const estimatedTimeInSeconds = selectedCount * timePerRecord;
+
+  return estimatedTimeInSeconds.toFixed(2);
+}
+
+//빈 값이나 null 값을 제거하는 함수
+function removeEmptyValues(obj) {
+  Object.keys(obj).forEach(function(key) {
+      if (obj[key] === null || obj[key] === '') {
+          delete obj[key];
+      }
+  });
+}
+
+/**
+ * @description 대체문자 오류체크 funciton
+ */
+function fn_errorChk(){
+
+	// 대체문자가 없을 시 return false;
+	if($('#txtReplYn').val() === 'N')
+	{
+		alert('오류가 없습니다.');
+		return false;
+	}
+
+	// 치환 부분 변수명만 추출 = 배열
+	var varList = $("#inputTemplateContent").val().match(/#\{([^}]+)\}/g);
+	
+	var smsTxt = $('#smsTxtArea').val();
+	for(var i=0; i < varList.length; i++){
+		if(smsTxt.indexOf(varList[i]) < 0){
+			if(confirm(varList[i] + '값이 없습니다. 치환문자 없이 진행하시겠습니까?')){
+				fn_insertErrorYN('Y');
+			};
+			return false;
+		}
+		smsTxt = smsTxt.replace(varList[i], '');
+	};
+	alert('오류가 없습니다.');
+	fn_insertErrorYN('Y');
+}
+
+
+function fn_insertErrorYN(val){
+	$('#errorChk').val(val);
+}
+
+//링크 유효성 검증 함수
+function validateLinks() {
+
+	console.log('검사 대상 수:', $('.kakaoBtnList').length);
+	
+	let isValid = true;
+
+	$('.kakaoBtnList').each(function () {
+		const val = $(this).val().trim();
+
+		console.log('val : ', val);
+		if (val !== '' && !val.startsWith('http://') && !val.startsWith('https://')) {
+			alert(`"${val}" 은(는) http:// 또는 https:// 로 시작해야 합니다.`);
+			$(this).focus();
+			isValid = false;
+			return false; // each 루프 중단
+		}
+	});
+
+	return isValid;
+}
+
+
+
+
+//문자 바이트수 계산하기 함수
+function thisFnByteString(contents){
+	var totalByte = 0; 
+	//var content = contents;
+	var adverYn = $("input[name='send_adYn']:checked").val();
+	var adTxtLeng = 0;
+	var denyTxtLeng = 0;
+
+	$('#msgLeng').html("");
+	$('#limitLeng').html("");
+	
+	/* if ($("#ad_Y").is(":checked")) {
+		contents = "(광고)"+contents+"\n무료거부 0808800858"
+	} */
+	contents = adYChkAndMakeContents(contents);
+	console.log(contents);
+	var conLeng = conByteLeng(contents); // 내용 문자 입력 바이트 수 계산하기
+	
+		
+	$('#msgLeng').text(conLeng);
+	
+	//문자 길이 변수에 저장해주기
+// 	$('#smsLen').val(conLeng);
+	
+	var imgType = $('#sendFailImgSrc').attr('src');
+	
+	
+	if(imgType != null && "" != imgType){
+
+		setSendFailTemplate('P')
+	}
+	else if(conLeng > 90){
+		
+		$('#limitLeng').html("2000");
+		$('.msg_com').html("장문");
+		$('#msgType').val("6"); // 메세지 타입 설정
+		
+		$('.msg_com').removeClass("msg_short"); //단문 클래스 삭제하고
+		$('.put_left').removeClass("short"); //내용 입력 박스 클래스 삭제
+		$('.put_left').removeClass("photo"); //내용 입력 박스 클래스 삭제
+		$('.msg_com').addClass("msg_long"); // 장문 클래스 삽입
+		$("#subMsgType").val("LMS");
+		
+	}else{
+		
+		$('#limitLeng').html("90");
+		$('.msg_com').html("단문");
+		$('#msgType').val("4"); // 메세지 타입 설정
+		
+		$('.msg_com').removeClass("msg_long"); //단문 클래스 삭제하고
+		$('.put_left').removeClass("long"); //내용 입력 박스 클래스 삭제
+		$('.put_left').removeClass("photo"); //내용 입력 박스 클래스 삭제
+		$('.msg_com').addClass("msg_short"); // 장문 클래스 삽입
+		$("#subMsgType").val("SMS");
+		
+	}
+	
+	$('#msgLeng').html(conLeng + " / ");
+	totalFtPriceSum(tableL.getRows().length);
+		
+}
+
+function msgSuccessClose(obj){
+// 	$(obj).closest('.pop_msg_success').attr('style','');
+// 	location.reload(true);
+// 	$('html').scrollTop(0);
+
+	location.href = '/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do';
+}
+
+function getFtImageType(imgChk){
+	
+	if(imgChk == 'I' || imgChk == 'W'){
+		
+		var imgLink = $("#imgLink").val();
+		var imgFileName = $("#imageFileName").val();
+		
+		/* 
+		if(imgLink == ''){
+			
+			alert("친구톡 이미지 선택시 이동할 링크 주소를 입력해 주세요.");
+			return false;
+			
+		} */
+		
+		if(imgFileName == ''){
+			
+			alert("친구톡 이미지를 등록해 주세요.");
+			return false;
+			
+		}
+		
+		$("#imageType").val(imgChk);
+		
+		//json 파일 필요 유무 셋팅
+		$("#bizJsonYn").val("Y");
+	}
+	
+	return true;
+	
+}
+
+
+function goToKakaoTestPopUp(){
+	
+	if(loginVO == "" || loginVO == null){
+		alert("테스트 발송 서비스는 로그인 후 이용 가능합니다.");
+		location.href="<c:url value='/web/user/login/login.do'/>";
+		return false;
+	}
+	
+	//기업회원 체크
+	if(!usrDeptChk()){
+		return false;
+	}
+	
+	var form = document.bizForm;
+	var senderKey = $("#selectAgentCode option:checked").val();
+	var yellowId = $("#selectAgentCode option:checked").text();
+	
+	if(senderKey == ''){
+		alert("채널ID를 선택해 주세요.");
+		return false;
+	}else{
+		$("#inputSenderKey").val(senderKey);
+		$("#yellowId").val(yellowId);
+	}
+	
+	var imgChk = $("input[name=img_file_add]:checked").val();
+	if(!getFtImageType(imgChk)){
+		return false;
+	}
+	
+	//템플릿 버튼 갯수 체크 
+	var buttonCnt = $(".btn_kakao_type").length;
+
+	if(buttonCnt > 0){
+		//json 파일 필요 유무 셋팅
+		$("#bizJsonYn").val("Y");
+	}
+	
+	//친구톡 내용 체크
+	var tmpContents = $('#inputTemplateContent').val();
+
+	if(tmpContents == ""){
+		
+		alert("친구톡 내용을 입력해 주세요.");
+		return false;
+		
+	}else{
+		
+		//템플릿 내용 입력
+		$("#templateContent").val(tmpContents);
+		
+	}
+	
+	var rtnStr = strChinJpnCheck(tmpContents);
+	
+	//문자내용에 이모지가 있는지 체크
+	if(!emojiCheck(tmpContents)) return false;
+	
+	if(rtnStr.length > 0){
+		
+		alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다.");
+		
+	}
+	
+	
+	var selectedData = tableL.getRows();
+	
+	if(selectedData == "" || selectedData == null){
+		
+		alert("받는사람 주소를 한 건 이상 입력해주세요.");
+		return false;
+	}
+
+	form.method = "post"; 
+	window.open("about:blank", 'testSendPop', 'width=770, height=850, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
+	form.target = "testSendPop";
+	form.action = "/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do";
+	form.submit();
+}
+
+
+function msgResultLink(){
+	var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
+	location.href="/web/kakao/sent/selectKakaoSentView.do";
+}
+
+function updateButtons(){
+	
+}
+
+
+
+
+</script>
+
+<!-- 로딩바 -->
+<div class="loading_layer">
+	<div class="loading_container">
+		<div class="bar"></div>
+		<div class="text">Loading</div>
+	</div>
+</div>
+
+
+<div class="progress_bar_wrap">
+    <div class="progress_box">
+        <p class="time_text">0%</p>
+        <div class="bar">
+            <span class="change_bar"></span>
+        </div>
+    </div>
+    <div class="btn_wrap">
+    </div>
+
+</div>
+
+<div class="inner">
+	<div class="send_top">
+		<!-- tab button -->
+		<%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %>
+		<!-- // tab button -->
+		<div class="top_content kakaotalksend_cont current pay_tab_wrap">
+			<div class="heading">
+				<h2>브랜드메시지 전송</h2><!-- KakaoFriendsTalkMsgDataView -->
+<!-- 				<button type="button" class="button info">친구톡 사용방법</button> -->
+				<button type="button" class="button info" onclick="infoListPop('friendTalkSend','792','340');">사용안내</button>
+			</div>
+			
+			<!-- 유저 보유잔액 -->
+			<input type="hidden" id="oriUserMoney" value="<c:out value='${userMoney}' />">
+			
+			<!-- 각 금액 단가  -->
+			<input type="hidden" id="kakaoFtPrice" value="<c:out value='${sendPrice.kakaoFtPrice}' />"> <!-- 친구톡 단가  -->
+			<input type="hidden" id="kakaoFtImgPrice" value="<c:out value='${sendPrice.kakaoFtImgPrice}' />"> <!-- 친구톡 이미지 단가  -->
+			<input type="hidden" id="kakaoFtWideImgPrice" value="<c:out value='${sendPrice.kakaoFtWideImgPrice}' />"> <!-- 친구톡 와이드이미지 단가  -->
+			<input type="hidden" id="longPrice" value="<c:out value='${sendPrice.longPrice}' />"> <!-- mms 단가  -->
+			<input type="hidden" id="shortPrice" value="<c:out value='${sendPrice.shortPrice}' />"> <!-- sms 단가  -->
+			<input type="hidden" id="picturePrice" value="<c:out value='${sendPrice.picturePrice}' />"> <!-- sms 단가  -->
+			<input type="hidden" id="imgLinkTemp" name="imgLinkTemp" value="<c:out value='${resultTemplateVO.imgLink}'/>"/>
+			
+			<form id="bizForm" name="bizForm" method="multipart/form-data">
+				<input type="hidden" id="menuTopTab" name="menuTopTab" value="tabBrandMsg">
+				<input type="hidden" id="imageType" name="imageType" value="<c:out value='${resultTemplateVO.imageType}'/>"/>
+				<input type="hidden" id="inputSenderKey" name="senderKey" value="<c:out value='${resultTemplateVO.senderKey}'/>"/>
+				<input type="hidden" id="imageFileName" name="imageFileName" value="<c:out value='${resultTemplateVO.imageFileName}'/>">
+				<input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${resultTemplateVO.templateImageUrl}'/>">
+				<input type="hidden" id="tmpFriendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>">
+				<input type="hidden" id="templateName" name="templateName" value=""/>
+				<input type="hidden" id="adFlag" name="adFlag" value="<c:out value='${resultTemplateVO.adFlag}' default='Y'/>">
+				<input type="hidden" id="templateContent" name="templateContent" value=""/>
+				
+				<!-- 이미지 있을때 대체문자 발송 참고 이미지 -->
+				<input type="hidden" id="atchFileId" name="atchFileId" value="<c:out value='${resultTemplateVO.atchFileId}'/>"/>
+				
+				<!-- 예약발송 여부 -->
+				<input type="hidden" id="reserveYn" name="reserveYn" value="N"/>
+				<input type="hidden" id="reqDate" name="reqDate" value=""/>
+				
+				<!-- 변환문자 유무 -->
+				<input type="hidden" id="txtReplYn" name="txtReplYn" value="N"/>
+				<input type="hidden" id="varValList" name="varValList" value=""/>
+				
+				<!-- 수신목록 -->
+				<input type="hidden" id="callToList" name="callToList" value=""/>
+				
+				<!-- 스팸 문구 유무 -->
+				<input type="hidden" id="spamStatus" name="spamStatus" value="N"/>
+				<input type="hidden" id="atSmishingYn" name="atSmishingYn" value="<c:out value='${atSmishingYn}' />"/>
+				
+				<!-- 오류 체크 -->
+				<input type="hidden" id="errorChk" name="errorChk" value="N"/>
+				
+				<!-- 대체문자 여부 -->
+				<input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N"/>
+				<input type="hidden" id="subMsgType" name="subMsgType" value="SMS"/>
+				<input type="hidden" id="subMsgTxtReplYn" name="subMsgTxtReplYn" value="N"/>
+				<input type="hidden" id="subMsgTxt" name="subMsgTxt" value=""/>
+				
+				<!-- 발신번호정보 -->
+				<input type="hidden" id="callFrom" name="callFrom" value=""/>
+				
+				<!-- 친구톡 발송 단가 정보 -->
+<!-- 				<input type="hidden" id="eachPrice" name="eachPrice" value="0"/> -->
+<!-- 				<input type="hidden" id="totPrice" name="totalPrice" value="0"/> -->
+				
+				<!-- 친구톡 발송 json 파일 필요 유무 -->
+				<input type="hidden" id="bizJsonYn" name="bizJsonYn" value="N"/>
+				
+				<input type="hidden" id="yellowId" name="yellowId" value=""/>
+				
+				
+				<div class="send_general friend_talk_wrap kakao_wrap">
+					<div class="send_left">
+						<table class="tType1">
+							<colgroup>
+								<col style="width: 130px;">
+								<col style="width: auto;">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>채널ID</th>
+									<td>
+										<label for="selectAgentCode" class="채널ID 선택"></label>
+										<select class="select_gray_type" name="selectAgentCode" id="selectAgentCode" onchange="javascript:fnAgentCodeChg();">
+											<option value="">채널ID 선택</option>
+											<c:forEach var="kakaoProfileInfo" items="${resultProfileList}" varStatus="status">
+												<option value="${kakaoProfileInfo.senderKey}" <c:if test="${kakaoProfileInfo.senderKey eq resultTemplateVO.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option>
+											</c:forEach>
+										</select>
+									</td>
+								</tr>
+								<tr>
+	                                <th>템플릿명</th>
+	                                <td>
+										<div class="template_name_wrap">
+											<input type="text" id="inputTemplateName" name="inputTemplateName" value="<c:out value='${resultTemplateVO.templateName}'/>" placeholder="최대 50자, 템플릿 관리용">
+											
+											
+												<button
+													type="button"
+													class="btnType btnType8"
+													onclick="${not empty loginVO.id 
+														? "window.open('/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do','_blank','width=930, height=780, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')" 
+														: "alert('로그인 후 이용이 가능합니다.'); return false;"}">
+													템플릿 불러오기
+												</button>
+											
+<!-- 											<button type="button" class="btnType btnType8" onclick="window.open('/publish/popup_friendtalk_template_choice.html','_blank','width=930, height=780, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')">템플릿 불러오기</button> -->
+										</div>
+	                                </td>
+	                            </tr>
+								<tr>
+									<th>이미지 첨부</th>
+									<td>
+										<input type="radio" name="img_file_add" id="img_file_0" value="" checked="checked">
+										<label for="img_file_0">첨부 안함</label>
+										<input type="radio" name="img_file_add" id="img_file_1" value="I">
+										<label for="img_file_1">이미지 첨부</label>
+										<input type="radio" name="img_file_add" id="img_file_2" value="W">
+										<label for="img_file_2">와이드 이미지 첨부</label>
+										
+										<div class="img_file_add_wrap basic_img_add_wrap">
+											<p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p>
+											<ul class="info_text">
+												<li>- 권장사이즈 : 800px * 400px</li>
+												<li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li>
+												<li>- 파일형식 : jpg, png (최대 5MB)</li>
+												<li>- 이미지 첨부 시 메시지 내용은 최대 400자, 버튼 5개까지 입력할 수 있습니다.</li>
+											</ul>
+										</div>
+										<div class="img_file_add_wrap wide_img_add_wrap">
+											<p class="info_title_text"><span class="c_e40000">*</span> 와이드 이미지 첨부 안내</p>
+											<ul class="info_text">
+												<li>- 권장사이즈 : 800px * 600px</li>
+												<li>- 파일형식 : jpg, png (최대 5MB)</li>
+												<li>- 와이드 이미지 첨부시 메시지 내용은 최대 76자, 버튼 1개까지 입력할 수 있습니다.</li>
+											</ul>
+											
+											
+										</div>
+										<ul class="img_file_info_wrap">
+											<li>
+												<button type="button" class="btnType btnType8 btn_img_upload" onclick="javascript:upImgClick(); return false;">이미지 불러오기</button>
+												<input type="file" id="imgFile" accept=".jpg, .jpeg, .png" onchange="imgResizeInfo(event); return false;" style="display:none"/> 
+												<div class="img_file_wrap">
+													<p id="imgTitle"  class="file_name file_none">이미지 없음</p>
+													<button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+														<img src="/publish/images/btn_delete.png" alt="이미지 삭제" onclick="fnImageDel();">
+													</button>
+												</div>
+											</li>
+											<li>
+												<p>이미지 클릭시 이동할 URL</p> 
+												<input type="text" id="imgLink" name="imgLink" value="<c:out value='${resultTemplateVO.imgLink}'/>"  placeholder="(선택사항) https://" class="img_url">
+											</li>
+										</ul>
+											
+									</td>
+								</tr>
+								<tr>
+									<th>광고포함 여부</th>
+									<td>
+										<input type="checkbox" id="ad_Y" style="margin: -4px 5px 0 0;" checked="checked" value="Y">
+										<label for="ad_Y">광고성 정보 포함</label>
+									</td>
+								</tr>
+								<tr>
+									<th>내용</th>
+									<td class="kakao_template_text">
+										<div class="put_left short">
+											<div class="put_text_wrap">
+												<div class="ad_txt" id="adTxt">
+													<p>(광고) 채널ID</p>
+												</div>
+												<label for="inputTemplateContent" class="label"></label>
+												<textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."><c:out value="${resultTemplateVO.templateContent}"/></textarea>
+												<div class="text_length">
+													<div class="sub_ad_text">
+														<p>수신거부 : 홈 > 채널차단</p>
+													</div>
+													<div>
+														<p><span class="fwMd nowChar">0 /</span><span class="c_002c9a fwMd totChar">1000</span>자</p>
+													</div>
+												</div>
+											</div>
+										</div>
+										<div class="put_right">
+											<div class="btn_popup_wrap">
+												<button type="button" class="btnType btnType7" onclick="miniPopup(this)">특수문자</button>
+													<div class="send_miniPop spc_character">
+														<div class="tab_character">
+															<a href="#none" class="on">특수문자</a>
+															<a href="#none">웃음</a>
+															<a href="#none">슬픔</a>
+															<a href="#none">분노</a>
+															<a href="#none">사랑</a>
+															<a href="#none">그외</a>
+														</div>
+														<!-- 특수문자 -->
+														<div class="cnt_character on">
+															<div class="box_character">
+															<c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'D'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}"><c:out value="${symbolList.symbol}"/></a>
+																</c:if>
+															</c:forEach>
+															</div>
+														</div>
+														<!-- //특수문자 -->
+														
+														<!-- 웃음 -->
+														<div class="cnt_character emt_character">
+															<div class="box_character">
+																<c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'S'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+																</c:forEach>
+															</div>
+														</div>
+														<!-- //웃음 -->
+														
+														<!-- 슬픔 -->
+														<div class="cnt_character emt_character">
+															<div class="box_character">
+																<c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'C'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+																</c:forEach>
+															</div>
+														</div>
+														<!-- //슬픔 -->
+														
+														<!-- 분노 -->
+														<div class="cnt_character emt_character">
+															<div class="box_character">
+																<c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'A'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+																</c:forEach>
+															</div>
+														</div>
+														<!-- //분노 -->
+														
+														<!-- 사랑 -->
+														<div class="cnt_character emt_character">
+															<div class="box_character">
+																<c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'L'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+																</c:forEach>
+															</div>
+														</div>
+														<!-- //사랑 -->
+														
+														<!-- 그외 -->
+														<div class="cnt_character emt_character emt_etc ">
+															<div class="box_character">
+																<c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'E'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+																</c:forEach>
+															</div>
+														</div>
+														<!-- //그외 -->
+													<button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
+												</div>
+											</div>
+											<div class="btn_popup_wrap convers_wrap">
+												<button type="button" class="btnType btnType7" onclick="miniPopup(this)">특정문구 일괄변환<i class="qmMark"></i></button>
+												<div class="send_miniPop convers">
+													<div>
+														<div class="convers_top">
+															<span>특정문구 일괄변환이란?</span>
+															<p>주소록, 엑셀에 입력된 내용을 이용해 수신자마다 다른 내용의 메시지를 발송하는 기능</p>
+														</div>
+														<div class="convers_middle">
+															<a href="javascript:void(0)" class="changeWord" value="[*이름*]"><c:out value="[*이름*]"/></a>
+														</div>
+														<div class="convers_bottom">
+															<a href="javascript:void(0)" class="changeWord" value="[*1*]"><c:out value="[*1*]"/></a>
+															<a href="javascript:void(0)" class="changeWord" value="[*2*]"><c:out value="[*2*]"/></a>
+															<a href="javascript:void(0)" class="changeWord" value="[*3*]"><c:out value="[*3*]"/></a>
+															<a href="javascript:void(0)" class="changeWord" value="[*4*]"><c:out value="[*4*]"/></a>
+														</div>
+													</div>
+													<button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
+												</div>
+											</div>
+											<div class="btn_popup_wrap spc_wrap">
+												<button type="button" class="btnType btnType7" onclick="miniPopup(this)">이모티콘</button>
+												<div class="send_miniPop spc_character kakao_emoticon">
+													<%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
+													<button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
+												</div>
+											</div>
+											<div class="btn_popup_wrap template_call_wrap">
+											</div>
+											<div class="send_btnWrap">
+												<button
+													type="button"
+													class="btnType btnType9 btn_text_save"
+													onclick="${not empty loginVO.id 
+														? 'myTemplateSave()' 
+														: 'alert(\'로그인 후 이용이 가능합니다.\'); return false;'}">
+													템플릿 저장
+												</button>
+												<button type="button" class="btnType btnType9" onclick="javascript:fnContentsReset();">초기화</button>
+											</div>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<th>버튼</th>
+									<td class="template_button">
+										<select name="tmpBtnSelect" id="tmpBtnSelect" class="select_gray_type template_button_select">
+											<option value="button_type_0">버튼타입 선택</option>
+<!-- 											<option value="button_type_1">배송조회</option> -->
+											<option value="button_type_2">웹링크</option>
+											<option value="button_type_3">앱링크</option>
+<!-- 											<option value="button_type_5">메시지전달</option> -->
+										</select>
+										<button type="button" class="btnType btnType6" onclick="friendTemplateButtonAdd();">추가</button>
+										<div class="button_add_wrap" id="buttonAddWrap">
+	                                    	<c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
+	                                    	
+	                                    		<c:if test="${buttonList.linkType eq 'DS'}">
+	                                    			<!-- 배송조회 버튼  -->
+			                                    	<dl class="button_type_wrap type1">
+				                                    	<dt>배송조회</dt>
+				                                    	<dd class="button_type_input">
+				                                    		<input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/>
+				                                    		<input type="text" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+				                                    		<p class="cf_text">*이용가능 택배사 : KG로지스, 우체국택배,일양로지스, GTX로지스, FedEx, 경동택배, 합동택배, 롯데택배</p>
+				                                    	</dd>
+				                                    	<dd>
+				                                    		<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+				                                    	</dd>
+			                                    	</dl>
+	                                    		</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'WL'}">
+			                                    	<!-- 웹링크 버튼 -->
+			                                    	<dl class="button_type_wrap type2">
+			                                    		<dt>웹링크</dt>
+			                                    		<dd class="button_type_input">
+			                                    			<ul>
+			                                    				<li>
+			                                    					<input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/>
+			                                    					<input type="text" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>" placeholder="모바일 링크 입력">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>" placeholder="PC 링크 입력">
+			                                    				</li>
+			                                    			</ul>
+			                                    		</dd>
+			                                    		<dd>
+			                                    			<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+			                                    		</dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'AL'}">
+			                                    	<!-- 앱링크 버튼 -->
+			                                    	<dl class="button_type_wrap type3">
+			                                    		<dt>앱링크</dt>
+			                                    		<dd class="button_type_input">
+			                                    			<ul>
+			                                    				<li>
+			                                    					<input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/>
+			                                    					<input type="text" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>" placeholder="Android 링크 입력">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>" placeholder="IOS 링크 입력">
+			                                    				</li>
+			                                    			</ul>
+			                                    		</dd>
+			                                    		<dd>
+			                                    			<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+			                                    		</dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'BK'}">
+			                                    	<!-- 봇키워드 -->
+			                                    	<dl class="button_type_wrap type4">
+			                                    		<dt>봇키워드</dt>
+		                                    			<dd class="button_type_input">
+		                                    				<input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/>
+		                                    				<input type="text" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+		                                    			</dd>
+		                                    			<dd><button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button></dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'MD'}">
+			                                    	<!-- 메시지 전달 -->
+			                                    	<dl class="button_type_wrap type5">
+													   <dt>메시지전달</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" />
+													      <input type="text" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button>
+													   </dd>
+													</dl>
+												</c:if>	                                    	
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'BC'}">
+			                                    	<!-- 상담톡 전환 -->
+													<dl class="button_type_wrap type6">
+													   <dt>상담톡전환</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" />
+													      <input type="text" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button>
+													   </dd>
+													</dl>
+												</c:if>
+												
+												<c:if test="${buttonList.linkType eq 'BT'}">
+													<!-- 챗봇전환 -->
+													<dl class="button_type_wrap type7">
+													   <dt>챗봇전환</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" />
+													      <input type="text" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button>
+													   </dd>
+													</dl>
+												</c:if>
+											</c:forEach>
+	                                    </div>
+									</td>
+								</tr>
+								<tr>
+									<th>받는사람</th>
+									<td class="putText">
+										<div class="clearfix receipt_num">
+											<div class="receipt_num_top">
+												<label for="callTo" class="label">받는 번호입력</label>
+												<input type="text" value="" placeholder="번호를 입력하세요" id="callTo" name="callTo" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;">
+												<button type="button" class="btnType btnType6 addCallToF">번호추가</button>
+												<span><span class="vMiddle">*</span> 중복번호는 한번만 발송됩니다.</span>
+											</div>
+											<div class="receipt_num_midde">
+												<div class="listType list01 callList_box"  id="callList_box">
+													<div class="list_table list_head">
+														<div class="cb_wrap">
+															<label for="select_all" class="label"></label>
+															<input type="checkbox" id="select_all">
+														</div>
+														<div class="list_table_num">
+															<p>휴대폰</p>
+															<img src="/publish/images/sortUp.png">
+															<img src="/publish/images/sortDown.png">
+														</div>
+														<div class="list_table_name">
+															<p>이름</p>
+															<img src="/publish/images/sortUp.png">
+															<img src="/publish/images/sortDown.png">
+														</div>
+													</div>
+													<div class="list_body_wrap" id="wrap01_body">
+													</div>
+												</div>
+												<div class="put_right">
+													<div class="btn_popup_wrap spc_wrap">
+														<button type="button" data-tooltip="popup06" class="btnType btnType7 popupAddr">주소록 불러오기</button>
+													</div>
+													<div class="btn_popup_wrap">
+														<button type="button" data-tooltip="popup07" class="btnType btnType7">엑셀 불러오기</button>
+													</div>
+													<div class="btn_popup_wrap">
+														<button type="button" data-tooltip="popup03" class="btnType btnType7 tab1">최근 전송내역</button>
+													</div>
+													<div class="btn_popup_wrap">
+														<button type="button" data-tooltip="popup03" class="btnType btnType7 tab2">자주보내는 번호</button>
+													</div>
+													<!-- <div class="btn_popup_wrap check_validity_wrap">
+														<button type="button" class="btnType btnType7 check_validity">오류 검사<i class="qmMark error_qm"></i></button>
+														<div class="error_hover_cont send_hover_cont">
+															<p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p>
+															<span>(예시) 010-1234-0001(O) / 010-12345-0001(X)</span>
+														</div>
+													</div> -->
+												</div>
+											</div>
+											<div class="list_bottom clearfix">
+												<div class="remove_btnWrap">
+													<button type="button" class="btnType15 all_del"><i class="remove_img"></i>전체삭제</button>
+													<button type="button" class="btnType15 select_del"><i class="remove_img"></i>선택삭제</button>
+												</div>
+												<div class="list_bottom_right">
+													<p>총 <span class="c_e40000" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a" id="rowDupCnt">0</span>건</p>
+<!-- 														<button type="button" class="address_reg2">주소록에 등록</button> -->
+												</div>
+											</div>
+										</div>
+									</td>
+								</tr>
+								<tr>
+									<th colspan="2" class="billingAmount">
+										<div>
+											<div class="final_pay">
+												<div class="pay_info_list">
+													<p>발송금액 :</p>
+													<div class="info" id="repPriceTxt" style="display: none;">
+														단문 : <strong>20</strong>건<span>/</span>장문 :
+														<strong>150</strong>건<span>/</span>그림문자 :
+														<strong>30</strong>건
+													</div>
+												</div>
+												<p class="price"><span id="repPriceTxt"></span><span id="totalPriceTxt">0</span> 원<span></span></p>
+											</div>
+											<div class="pay_type clearfix">
+												<div>
+													<input type="radio" id="radio_bill_1" name="radio_bill" checked="checked">
+													<label for="radio_bill_1">보유잔액</label>
+													<label for="userMoney" class="label">보유잔액</label>
+													<fmt:formatNumber type="number" maxFractionDigits="3" value="${sendPrice.userMoney}" var="commaPrice" />
+													<input type="text" id="userMoney" name="userMoney" value="<c:out value='${commaPrice}'/>" readonly="">
+													<span class="won">원</span>
+													<button type="button" class="btnType btnType21" onclick="location.href='/web/member/pay/PayView.do'">충전</button>
+												</div>
+												<div></div>
+											</div>
+										</div>
+									</th>
+								</tr>
+								<tr>
+									<th colspan="2" class="replace_send_th">
+										<div class="title_th"><p>대체문자</p> 
+											<input type="checkbox" id="send_fail_check" name="send_fail_check" class="send_fail_check">
+											<label for="send_fail_check">친구톡 전송 실패 시 문자 전송</label>
+										</div>
+										<div class="replace_send_wrap">
+											<table class="tType1">
+												<colgroup>
+													<col style="width: 90px;">
+													<col style="width: auto;">
+												</colgroup>
+												<tbody>
+													<tr>
+														<th>발신번호</th>
+														<td>
+															<label for="callFromList" class="label"></label>
+															<select id="callFromList" name="callFromList" class="sel_number">
+																<c:choose>
+																	<c:when test="${not empty resultPhonList}">
+																		<c:forEach var="phonList" items="${resultPhonList}" varStatus="status">
+																			<option value="${phonList}">${phonList}</option>
+																		</c:forEach>
+																	</c:when>
+																	<c:otherwise>
+																		<option value="">등록된 발신 번호가 없습니다.</option>
+																	</c:otherwise>
+																</c:choose>
+															</select>
+															<button type="button" class="btnType btnType6" onclick="location.href='/web/user/sendNumberManage.do'">번호등록</button>
+														</td>
+													</tr>
+													<tr>
+														<th>내용</th>
+														<td class="putText">
+															<div class="clearfix">
+																<div class="put_left short">
+																	<!-- 업로드한 이미지의 썸네일 영역 -->
+																	<ul class="thumb_wrap liOnImg ui-sortable">
+																		<li class="delLi" id="sendFailImg" style="display: none">
+																			<div>
+																				<img src="" id="sendFailImgSrc" class="thumb_img edit_y" alt="thumb1">
+																			</div>
+<!-- 																			<button type="button" class="file_close"><img src="/publish/images/content/thumb_del.png" alt="첨부파일 삭제"></button> -->
+<!-- 																			<button type="button" class="file_close_on"><img src="/publish/images/content/thumb_del_on.png" alt="첨부파일 삭제"></button> -->
+																		</li>
+																		
+																	</ul>
+																	<label for="smsTxtArea" class="label"></label>
+																	<!-- //업로드한 이미지의 썸네일 영역 -->
+																	<div class="ad_txt" style="">
+																		<p>(광고)</p>
+																	</div>
+																	<textarea id="smsTxtArea" class="put_text"></textarea>
+																	<div class="text_length">
+																		<div class="deny_txt sub_ad_text">
+																			<p>무료거부 0808800858</p>
+																		</div>
+																		<div name="afterDeny">
+																			<p>
+																				<span class="fwMd" id="msgLeng">0 /</span>
+																				<span class="c_002c9a fwMd" id="limitLeng">90</span>byte
+																			</p>
+																			<span class="msg_com msg_short">단문</span>
+																		</div>
+																	</div>
+																</div>
+																<div class="put_right">
+																	<button type="button" class="btnType btnType9" id="failCheckInit">초기화</button>
+<!-- 																	<button type="button" class="btnType btnType7" onclick="javascript:fn_errorChk(); return false;">오류검사<i class="qmMark"></i></button> -->
+																</div>
+															</div>
+														</td>
+													</tr>
+												</tbody>
+											</table>
+										</div>
+									</th>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<div class="send_right">
+						<div class="phone">
+							<div class="phoneIn">
+								<p class="prev_p">
+									<img src="/publish/images/content/kakao_prev_icon.png" alt="">
+									<span id="spnYellowid">@채널ID</span>
+								</p>
+								<!-- 텍스트 미리보기 -->
+								<div class="text_preview">
+									<p class="friend_talk_title" id="talkTitle">
+<!-- 										<span>(광고)</span> 채널ID -->
+										<span>(광고)</span>
+									</p>
+									<div class="allimtalk_content">
+										<div class="kakao_image"  style="display:none;">
+											<img src="" id="kakaoImg" alt="">
+										</div>
+										<p class="template_text">내용 미리보기</p>
+										<div class="btnViewArea">
+											<c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
+	                                    		<button type="button" class="btn_kakao_type btnEmpty"  style="display:block;"><c:out value="${buttonList.name}"/></button>
+	                                    	</c:forEach>
+										</div>
+									</div>
+									<p class="kakao_block_text">수신거부 : 홈 > 채널차단</p>
+								</div>
+								<!-- //텍스트 미리보기 -->
+							</div>
+							<p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p>
+						</div>
+						<div class="phone_bottom">
+							<div class="send_rev">
+								<div class="send_content" style="padding-bottom: 0;">
+									<div class="rev_radio">
+										<ul>
+											<li>
+												<input type="radio" id="reserYnN" name="reserYn" value="N" checked="checked"><label for="reserYnN">즉시</label>
+											</li>
+											<li>
+												<input type="radio" id="reserYnY" name="reserYn" value="Y"><label for="reserYnY">예약</label>
+											</li>
+										</ul>
+									</div>
+									<div class="send_btn">
+									<%-- 친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지 --%>
+										<c:choose>
+											<c:when test="${sendStatus eq 'true'}">
+												<button type="button" class="btnType btnType11" onclick="javascript:fn_sendMsgData(); return false;">발송하기</button>
+											</c:when>
+											<c:otherwise>
+												<button type="button" class="btnType btnType11" onclick="javascript:fn_noTimeSend(); return false;">발송하기</button>
+											</c:otherwise>
+										</c:choose>
+										<button type="button" class="btnType btnType10"  onclick="javascript:goToKakaoTestPopUp(); return false;">테스트발송</button>
+									</div>
+								</div>
+								<div class="rev_selected" >
+									<div class="rev_top">
+										<span>날짜 :</span>
+										<div class="calendar_wrap">
+											<input type="text" class="startDate2 inp resDate calendar picker__input picker__input--active" title="검색 시작일" id="startDate2" name="startDate2" value="" data-datecontrol="true" readonly="" aria-haspopup="true" aria-expanded="true" aria-readonly="false" aria-owns="startDate2_root">
+										</div>
+										<div class="selBox">
+											<label for="msgResHour" class="label">시 선택</label>
+											<select class="selType1" id="msgResHour" name="msgResHour">
+												<c:forEach  var="hour"  begin="8" end="20" step="1" varStatus="status">
+													<c:choose>
+														<c:when test="${hour < 10}">
+															<option value="0${hour}">0${hour}시</option>
+														</c:when>
+														<c:otherwise>
+															<option value="${hour}">${hour}시</option>
+														</c:otherwise>
+													</c:choose>
+												</c:forEach>
+											</select>
+											<label for="msgResMin" class="label">분 선택</label>
+											<select class="selType1" id="msgResMin" name="msgResMin" onChange="fnSelectMinChk();">
+												<c:forEach var="min" begin="0" end="59" step="1">
+													<c:choose>
+														<c:when test="${min < 10}">
+															<option value="0${min}">0${min}분</option>
+														</c:when>
+														<c:otherwise>
+															<option value="${min}">${min}분</option>
+														</c:otherwise>
+													</c:choose>
+												</c:forEach>
+											</select>
+										</div>
+									</div>
+									<%-- <div class="rev_bottom">
+										<input type="checkbox" id="inputDivideChk" name="inputDivideChk">
+										<label for="inputDivideChk">분할전송</label>
+										<input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/>
+										<label for="divideCnt">건</label>
+										<select class="selType1" id="divideTime" name="divideTime">
+					 						<option value="5">05분</option>
+					 						<option value="10">10분</option>
+					 						<option value="15">15분</option>
+					 						<option value="20">20분</option>
+					 						<option value="30">30분</option>
+					 					</select>
+					 					<label for="divideTime">간격</label>
+									</div> --%>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- 문자발송 성공 레이어팝업 -->
+<div class="tooltip-wrap">
+	<div class="popup-com pop_msg_success">
+		<div class="popup_heading">
+			<p>친구톡 전송 결과</p>
+			<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+		</div>
+		<div class="layer_in">
+			<div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div>
+		</div>
+		<div class="popup_btn">
+			<button type="button" onclick="msgResultLink(); return false;">친구톡 발송결과 바로가기</button>
+			<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);">확인</button>
+		</div>
+	</div>
+</div>
+
+<!-- 주소록 불러오기 -->
+<div class="tooltip-wrap">
+	<div class="popup-com import_layer popup06 adr_call_popup" tabindex="0"
+		data-tooltip-con="popup06" data-focus="popup06"
+		data-focus-prev="popup06-close" style="width: 1000px">
+		<div class="popup_heading">
+			<p>
+				<span>주소록 불러오기
+			</p>
+			<button type="button" onClick="javascript:addrClose(); return false;">
+				<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기">
+			</button>
+		</div>
+		<div class="layer_in">
+			<div class="titBox titBox_pad">
+				<p>
+					- 주소록 수정 및 변경은 <span>[주소록 관리]</span>에서만 가능합니다.
+				</p>
+				<button type="button" class="adr_admin"
+					onClick="location.href='/web/mjon/addr/selectAddrList.do'">주소록
+					관리</button>
+			</div>
+			<div class="adr_wrap">
+				<form id="searchAddrGrpForm" name="searchAddrGrpForm" method="post"
+					style="display: flex; justify-content: space-between;">
+					<input type="hidden" id="searchAddrGrpId" name="searchAddrGrpId"
+						value="" /> <input type="hidden" id="type" name="type" value="all" />
+					<input type="hidden" id="searchKeyword" name="searchKeyword"
+						value="" /> <input type="hidden" name="searchCondition"
+						id="searchCondition" value="0" />
+					<div class="adr_pop_left">
+						<div class="adr_left_search">
+							<label for="searchKeyword" class="label">그룹명 검색</label> <input
+								type="text" name="searchGrpKeyword" id="searchGrpKeyword"
+								placeholder="그룹명 검색" onfocus="this.placeholder=''"
+								onblur="this.placeholder='그룹명 검색'" class="inputLight">
+							<button type="button"
+								onClick="javascrit:fnAddrGrpSearch(); return false;">
+								<img src="/publish/images/popup/search.png" alt="검색">
+							</button>
+						</div>
+						<div class="adr_pop_box">
+							<div id="addrGroupLoad"></div>
+						</div>
+						<!-- <div class="popup_btn">
+                                <button type="button" class="btnType" onClick="javascript:fnSelectAddrGrpList(); return false;">선택 그룹 추가</button>
+                            </div> -->
+					</div>
+					<div class="adr_pop_right">
+						<div class="clearfix">
+							<div class="btnWrap_last">
+								<label for="searchAddrCondition" class="label">카테고리 선택</label> <select
+									id="searchAddrCondition" name="searchAddrCondition"
+									class="selType2">
+									<option value='0'>전체</option>
+									<option value='1'>그룹명</option>
+									<option value='2'>이름</option>
+									<option value='3'>핸드폰번호</option>
+								</select> <label for="searchAddrKeyword" class="label">검색어 입력</label> <input
+									type="text" id="searchAddrKeyword" name="searchAddrKeyword"
+									placeholder="검색어를 입력하세요" onfocus="this.placeholder=''"
+									onblur="this.placeholder='검색어를 입력하세요'">
+								<button type="button" class="btnType btnType17"
+									onClick="javascrit:fnAddrSearch(); return false;">검색</button>
+							</div>
+							<!-- table -->
+							<div class="adr_excel adr_pop_list2 callAddr_box"
+								style="max-width: 722px"></div>
+							<!--// table -->
+						</div>
+						<div class="popup_btn_wrap2">
+							<!--                                <button type="button" onClick="javascript:addrToList(); return false;">추가</button> -->
+							<button type="button"
+								onClick="javascript:addrToList_advc('all'); return false;">전체추가</button>
+							<button type="button"
+								onClick="javascript:addrToList_advc('select'); return false;">선택추가</button>
+							<button type="button"
+								onClick="javascript:addrClose(); return false;">닫기</button>
+						</div>
+						<%-- 주소록 레이어 팝업 닫기 실행 코드 --%>
+						<input type="hidden" name="btnAddrClose" id="btnAddrClose"
+							class="tooltip-close closeAddr" data-focus="popup06-close" />
+					</div>
+				</form>
+			</div>
+		</div>
+	</div>
+</div>
+<!--// 주소록 불러오기 -->
+
+<!-- 엑셀 불러오기 -->
+<form id="excelForm" name="excelForm" method="post">
+	<div class="tooltip-wrap">
+<!-- 	<div class="popup-com import_layer popup07" tabindex="0" data-tooltip-con="popup07" data-focus="popup07" data-focus-prev="popup07-close"> -->
+        <div class="popup-com adr_layer popup07" tabindex="0" data-tooltip-con="popup07" data-focus="popup07" data-focus-prev="popup07-close" style="width: 1000px;">
+            <%@include file="/WEB-INF/jsp/web/kakao/msgdata/include/ftDataIncludeExcel.jsp" %>
+<%--           <%@include file="/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp" %> --%>
+			<!-- <div class="popup_heading">
+				<p><span>엑셀</span> 불러오기</p>
+				<button type="button" class="tooltip-close" data-focus="popup07-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in">
+				엑셀파일 불러오기
+				<div class="hascont">
+					<div class="titBox">
+						<p>- 최대 2만 건까지 등록할 수 있습니다.</p>
+						<p>- [엑셀 불러오기]시 문서의 A, B열을 불러옵니다.(지원하는 파일 형식 : xls, xlsx)</p>
+						<p>- 휴대폰 항목은 숫자, 하이픈(-)만 인식하며, 번호 앞에 0이 생략되어도 정상 등록됩니다.
+						</p>
+						<button type="button" class="excel_btn" onclick="location.href='/cmm/fms/FileDown.do?atchFileId=FILE_000000000011651&fileSn=1'"><i></i>샘플파일 다운로드</button>
+						<button type="button" class="excel_btn" onclick="location.href='/download/msg/엑셀주소록_등록양식.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button>
+					</div>
+					<div class="attachedFile">
+						<label for="excelNm" class="attachedFile_label">첨부파일</label>
+						<input type="text" id="excelNm" value="" readonly>
+						<input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExport(event); return false;" style="display:none"/>
+						<button type="button" class="btnType btnType6 c1">찾아보기</button>
+						<p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p>
+						<p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p>
+					</div>
+				</div>// 엑셀파일 불러오기
+				<div class="popup_btn_wrap2">
+					<button type="button" class="tooltip-close" data-focus="popup07-close"  data-focus-next="popup07" id="excelAdd">추가</button>
+					<button type="button" class="tooltip-close" data-focus="popup07-close"  data-focus-next="popup07">닫기</button>                      
+				</div>
+			</div> -->
+		</div>
+	</div><!--// 엑셀 불러오기 -->
+</form>
+
+
+<div class="tooltip-wrap">
+	<div class="popup-com history_layer popup03" tabindex="0"
+		data-tooltip-con="popup03" data-focus="popup03"
+		data-focus-prev="popup03-close">
+		<div class="popup_heading">
+			<p>
+				전송내역
+			</p>
+			<button type="button" class="tooltip-close"
+				data-focus="popup03-close" id="btnLatestAddPhoneClose">
+				<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기">
+			</button>
+		</div>
+		<div class="layer_in">
+			<!-- tab button -->
+			<ul class="tabType6">
+				<li class="tab active"><button type="button"
+						onclick="TabType(this,'1');">최근 전송내역</button></li>
+				<li class="tab"><button type="button"
+						onclick="TabType(this,'2');">자주보내는 번호</button></li>
+			</ul>
+			<!--// tab button -->
+			<!-- 최근 전송내역 -->
+			<div class="history_cont hascont current">
+				<div class="histroy_trans latestMsgArea" id="latestMsgArea">
+					<ul id="latestMsgUl">
+						<%-- <c:choose>
+                                <c:when test="${not empty resultLatestMsgList}">
+                                    <c:forEach var="latestMsgList" items="${resultLatestMsgList}" varStatus="status">
+                                        <li id="latestLi">
+                                            <input type="checkbox" id="addrChk_${status.count}" name="latAddrChk" value="<c:out value='${latestMsgList.callTo}'/>">
+                                            <label for="addrChk_${status.count}" class="label">최근 전송내역</label>
+                                            <p><c:out value="${latestMsgList.callTo}"/></p>
+                                            <button type="button" id="latestAddrDel">
+                                                <img src="/publish/images/popup/close3.png"  alt="전화번호 삭제">
+                                            </button>
+                                        </li>
+                                    </c:forEach>
+                                </c:when>
+                                <c:otherwise>
+                                    <li>
+                                        <p>최근 발송 내역이 없습니다.</p>
+                                    </li>
+                                </c:otherwise>
+                            </c:choose> --%>
+					</ul>
+				</div>
+				<div class="popup_btn_wrap2 hisroy_btn" style="width: 230px;">
+					<button type="button" id="latestAddPhoneAll">전체추가</button>
+					<button type="button" id="latestAddPhone">선택추가</button>
+					<button type="button" id="latestCancelPhone">선택취소</button>
+				</div>
+			</div>
+			<!--// 최근 전송내역 -->
+			<!-- 자주보내는 번호 -->
+			<div class="history_cont hascont">
+				<div class="histroy_trans" id="bookMarkMsgArea">
+					<ul id="bookMsgUl">
+						<li>
+							<p>데이터 로딩중입니다.</p>
+						</li>
+						<%-- <c:choose>
+                                <c:when test="${not empty resultBookMarkMsgList}">
+                                    <c:forEach var="bookMarkMsgList" items="${resultBookMarkMsgList}" varStatus="status">
+                                        <li id="bookMarkLi">
+                                            <input type="checkbox" id="bokAddrChk_${status.count}" name="bookAddrChk" value="<c:out value='${bookMarkMsgList.addrPhoneNo}'/>">
+                                            <label for="addrChk_${status.count}" class="label">최근 전송내역</label>
+                                            <p><c:out value="${bookMarkMsgList.addrPhoneNo}"/></p>
+                                            <button type="button" id="bookMarkAddrDel"><img src="/publish/images/popup/close3.png"  alt="전화번호 삭제"></button>
+                                        </li>
+                                    </c:forEach>
+                                </c:when>
+                                <c:otherwise>
+                                    <li>
+                                        <p>등록된 자주 보내는 번호 내역이 없습니다.</p>
+                                    </li>
+                                </c:otherwise>
+                            </c:choose> --%>
+					</ul>
+				</div>
+				<div class="popup_btn_wrap2 hisroy_btn" style="width: 230px;">
+					<button type="button" id="bookMarkAddPhoneAll">전체추가</button>
+					<button type="button" id="bookMarkAddPhone">선택추가</button>
+					<button type="button" id="bookMarkCancelPhone">선택취소</button>
+				</div>
+			</div>
+			<!--// 자주보내는 번호  -->
+		</div>
+	</div>
+</div>
+<!--// 전송내역 팝업 -->
+
+
+<form id="templateForm" name="templateForm" method="post">
+	<input type="hidden" id="friendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>"/>
+</form>(No newline at end of file)
Add a comment
List