Google Apps Script 연동 시 SMS 발송 실패: Unexpected token '<' (HTML 응답 수신) #55
-
사용 중인 프로그래밍 언어 및 버전Google Apps Script (JavaScript 엔진) SDK 버전쏠라피 공식 SDK를 사용하지 않고, Google Apps Script의 UrlFetchApp을 통해 REST API를 직접 호출하고 있습니다. (SDK 버전 해당 없음) 운영 환경기타 (설명란에 자세히 기재해주세요) 질문/문제 설명Google Apps Script에서 쏠라피 SMS 발송 API(https://api.solapi.com/messages/v4/send)를 연동하여 문자 메시지를 보내려 합니다. API 요청 시 HTTP 응답 코드는 200 OK를 받지만, 응답 본문이 예상하는 JSON 형식이 아닌 **쏠라피 웹사이트의 HTML 문서(<!doctype html>...)**로 반환됩니다. 이로 인해 JSON 파싱 단계에서 Unexpected token '<', "<!doctype "... is not valid JSON 오류가 발생합니다. 이는 실제 메시지 발송 실패로 이어지고 있습니다. 코드 예시/**
* 구글 시트에서 전화번호와 메시지를 읽어 솔라피를 통해 SMS를 발송하는 함수.
*/
// ⚠️ 중요: 여기에 본인의 솔라피 API 키와 시크릿 키를 입력하세요.
const SOLAPI_API_KEY = "YOUR_SOLAPI_API_KEY"; // 본인 키로 변경
const SOLAPI_SECRET_KEY = "YOUR_SOLAPI_SECRET_KEY"; // 본인 키로 변경
/**
* 솔라피를 통해 문자 메시지를 발송하는 핵심 함수.
* @param {string} to - 수신자 전화번호 (하이픈 없이 숫자만).
* @param {string} text - 발송할 메시지 내용.
* @param {string} from - 발신자 전화번호 (사전 등록된 발신번호).
* @returns {object} - API 응답 객체.
*/
function sendSMS(to, text, from) {
const url = "https://api.solapi.com/messages/v4/send"; // 솔라피 SMS 발송 API 엔드포인트
const headers = {
"Authorization": "Bearer " + Utilities.base64Encode(SOLAPI_API_KEY + ":" + SOLAPI_SECRET_KEY),
"Content-Type": "application/json;charset=utf-8"
};
const payload = {
"message": {
"to": to,
"from": from, // 발신자 전화번호 (솔라피에 등록된 번호여야 함)
"text": text,
"type": "SMS" // 단문 메시지 (SMS)
}
};
const options = {
"method": "post",
"headers": headers,
"payload": JSON.stringify(payload),
"muteHttpExceptions": false // 상세 에러 확인용
};
try {
const response = UrlFetchApp.fetch(url, options);
const responseCode = response.getResponseCode();
const responseBody = response.getContentText();
Logger.log("API 응답 코드: " + responseCode);
Logger.log("API 응답 본문: " + responseBody); // 이 부분이 HTML로 출력됩니다.
if (responseCode === 200) {
return JSON.parse(responseBody); // 여기서 SyntaxError 발생
} else {
throw new Error("SMS 발송 실패: " + responseBody);
}
} catch (e) {
Logger.log("API 호출 중 오류 발생: " + e.message);
throw e;
}
}
/**
* 구글 시트에서 데이터를 읽어와 개별적으로 SMS를 발송하는 메인 함수.
*/
function sendMessagesFromSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const dataRange = sheet.getDataRange();
const values = dataRange.getValues();
// ⚠️ 중요: 발신자 전화번호를 여기에 입력하세요. (등록된 번호로 변경)
const SENDER_PHONE_NUMBER = "01012345678"; // 본인 등록 번호로 변경
for (let i = 1; i < values.length; i++) {
const row = values[i];
const recipientNumber = String(row[0]).replace(/[^0-9]/g, '');
const messageContent = String(row[1]);
if (recipientNumber && messageContent) {
try {
Logger.log(`행 ${i + 1}: ${recipientNumber} 에게 메시지 발송 시도...`);
sendSMS(recipientNumber, messageContent, SENDER_PHONE_NUMBER);
} catch (e) {
Logger.log(`행 ${i + 1}: ${recipientNumber} 발송 실패: ${e.message}`);
}
}
}
Logger.log("모든 메시지 발송 시도 완료.");
}시도한 해결 방법API Key 및 Secret Key를 여러 번 확인하여 정확히 입력했습니다. 기대하는 결과쏠라피 API 호출 시 정상적인 JSON 응답(성공 메시지 또는 구체적인 API 오류 메시지)을 받아 JSON 파싱 오류 없이 메시지가 정상적으로 발송되기를 기대합니다. 확인사항
|
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 2 replies
-
|
안녕하세요, 솔라피 기술지원팀입니다. 보내주신 코드를 확인했을 때, 잘못된 방식으로 인증을 진행해주셔서 오류가 발생하는 것으로 확인됩니다. 감사합니다. |
Beta Was this translation helpful? Give feedback.
안녕하세요, 솔라피 기술지원팀입니다. 보내주신 코드를 확인했을 때, 잘못된 방식으로 인증을 진행해주셔서 오류가 발생하는 것으로 확인됩니다.
아래의 글을 참고하셔서 올바른 코드로 변환 후 재시도 부탁드립니다.
Google Apps Script 연동예시
감사합니다.