알리고 SMS 문자 발송 API 사용법 및 Nodejs 예제 코드

알리고(ALIGO)SMS 문자 발송 API 를 활용하여 Nodejs 애플리케이션 예제 코드 및 구조에 대한 설명 기록

알리고 홈페이지 상단 이미지

알리고 SMS 문자 발송 API는 sms 문자 발송 서비스 중에 가장 저렴하고 손쉬운 방법으로 대량 문자를 발송 할 수 있을 것 같다고 판단하여 해당 서비스를 선택하게 되었습니다.

AWS, Google, AliCloud, NCloud 등 대형 업체들도 고려를 해봤지만 서비스 대상이 국내 한정이고 무엇보다 비용이 관건이어서 알리고를 선택 하게 되었습니다. 별도의 npm package 를 설치할 필요 없이 api key 를 발급 받고, rest api 로 호출 하는 방식이 가장 마음에 들었던 것 같네요ㅎㅎ

알리고(ALIGO) SMS 문자 발송 REST API 예제 curl

curl -X POST "https://apis.aligo.in/send/" \
	--data-urlencode "key=xxxxx" \
	--data-urlencode "user_id=xxxxx" \
	--data-urlencode "sender=025114560" \
	--data-urlencode "receiver=01111111111,01111111112" \
	--data-urlencode "destination=01111111111|홍길동,01111111112|아무개" \
	--data-urlencode "msg=%고객명%님! 안녕하세요. API TEST SEND" \
	--data-urlencode "title=API TEST 입니다" \
	--data-urlencode "rdate=20240414" \
	--data-urlencode "rtime=0013" \
	--data-urlencode "testmode_yn=Y" \
	--form image=@localfilename

개발 목표 및 애플리케이션 스펙

구글 스프레드 시트에 기입 되어 있는 클라이언트 연락처 및 대체 문구 예시 이미지

클라이언트의 휴대폰 목록 및 클라이언트 마다 각기 다른 대체 문구를 정리해 놓을 장소가 필요 했고, 클라이언트 리스트를 기반으로 ALIGO API 를 호출하여 지정한 연락처로 SMS 문자가 발송되는 프로그램 개발을 목표 하였습니다.

주어진 시간은 단 2시간으로 최대한 빠르게 애플리케이션 개발이 필요한 상황이었기에 100% 자동화가 아닌, 애플리케이션을 실행 시켜주는 주체(개발자)가 있어야 애플리케이션이 작동 되는 구조라는 점 참고 부탁드립니다.

(실제로 2시간 만에 개발, 테스트, 문자 수신 확인까지 진행하게 됨!)

애플리케이션 개발에 필요한 도구 및 패키지

문자 발송 API 애플리케이션 핵심 코드

  1. axios 를 활용한 ALIGO API 호출 코드
import axios from "axios";
import { ALIGO_API_KEY, ALIGO_USER_ID } from "../consts/api.const";

const ALIGO_API_URL = "https://apis.aligo.in";
export const sendMessageByAligo = async (sender: string, receiver: string, message: string) => {
  try {
    const BASE_URL = `${ALIGO_API_URL}/send`;
    const data: any = {};
    const headers: any = {
      params: {
        key: ALIGO_API_KEY,
        user_id: ALIGO_USER_ID,
        sender,
        receiver,
        msg: message
        // testmode_yn: "Y" // 실제 sms 발송은 되지 않고, 응답으로 성공 여부 및 알리고 페이지에서 발송 결과까지만 조회가 가능한 옵션이다.
      }
    };
    const res = await axios.post(BASE_URL, data, headers);
    return res.data;
  } catch (e) {
    throw e;
  }
};

2. google-spreadsheet npm 패키지를 활용하여 데이터 가공 및 반환 코드

import { GoogleSpreadsheet } from "google-spreadsheet";

import { ACCOUNT } from "../consts/sambu.account.key";

import { SMS_USER_LIST } from "../consts/spread.sheet.id";
import { JWT } from "google-auth-library";
import { ICustomer } from "../types/customer";

export const getSheetUserList = async (): Promise<ICustomer[]> => {
  try {
    const serviceAccountAuth = new JWT({
      email: ACCOUNT.client_email,
      key: ACCOUNT.private_key,
      scopes: ["https://www.googleapis.com/auth/spreadsheets"]
    });

    const doc = new GoogleSpreadsheet(SMS_USER_LIST, serviceAccountAuth);
    await doc.loadInfo();
    const sheet = doc.sheetsByIndex[0];
    const rows = await sheet.getRows({ offset: 0, limit: 1000 });
    const result: ICustomer[] = [];
    rows.forEach((s: any) => {
      const customer: ICustomer = { phoneNumber: s._rawData[0], saleType: s._rawData[1] };
      result.push(customer);
    });
    return result;
  } catch (e: any) {
    console.log(e);
    throw e;
  }
};

3. 즉시 실행 함수를 기반으로 애플리케이션을 실행하는 app.ts 코드

// app.ts

import { sendMessageBySheetUserList } from "./services/aligo.service";

(async () => {
  await sendMessageBySheetUserList();
})();

4. 알리고 SMS 문자 발송 애플리케이션 프로젝트 코드 링크

문제 해결 과정 – 구글 스프레드 시트

구글 클라우드 콘솔 API 및 서비스 페이지

스프레드 시트 패키지 Auth 인증 영역에서 약간의 삽질을 하게 되었다.

아무 생각없이 API 키를 기반으로 패키지를 사용하려 했으나, 애플리케이션 작동과 동시에 Auth 인증 실패 에러가 발생이 되어 확인 해보니 스프레드 시트 API의 경우 대부분 서비스 계정을 생성하여 해당 계정을 대상 스프레드 시트에 접근 가능한 권한을 추가 해준 후 계정 생성 당시 내려 받은 json 파일을 기반으로 client_email, private_key 를 JWT 에 바인딩 하여 토큰을 생성해 주는 방식이 일반적이었다.

이상으로 알리고 SMS 문자 발송 API 를 활용하여 대량 문자 발송이 가능한 애플리케이션 개발 기록을 마무리 하겠습니다.

Leave a Comment