티스토리 뷰

뿌리오를 통해 카카오알림톡을 보내는 소스코드를 받았다.

 

뿌리오에서 제공하는 소스코드는 Java와 PHP 2가지였다.

뿌리오 측에 node.js용 소스코드는 없다고 문의했더니 현재까지는 없다고 답을 받았다.

 

node.js 용은 없어서 아래와 같이 node.js 용으로 바꿔보았다.

 

아래의 소스코드를 가지고 실제로 연동에 성공했다.

 

 

const axios = require('axios');
const base64 = require('base-64');
const crypto = require('crypto');

const TIME_OUT = 5000;

const API_KEY = '';
const PPURIO_ACCOUNT = '';
const SENDER_PROFILE = '';
const TEMPLATE_CODE = '';
const URI = 'https://message.ppurio.com';


/**
 * Access Token 요청 (24시간 유효)
 */
async function getToken() {
    const basicAuthorization = `Basic ${base64.encode(`${PPURIO_ACCOUNT}:${API_KEY}`)}`;
    try {
        const response = await axios.post(`${URI}/v1/token`, {}, {
            headers: {
                Authorization: basicAuthorization,
                'Content-Type': 'application/json',
            },
            timeout: TIME_OUT,
        });

        // 응답 데이터 전체 출력
        console.log('Token Response:', response.data);

        // 토큰이 응답 데이터에 포함되어 있는지 확인
        if (response.data && response.data.token) {
            console.log('Access Token:', response.data.token); // 토큰 값 출력
            return response.data.token; // 토큰 값만 반환
        } else {
            // 토큰 값이 없는 경우 에러 처리
            throw new Error(`Invalid token response: ${JSON.stringify(response.data)}`);
        }
    } catch (error) {
        console.error('Error fetching token:', error.response?.data || error.message);
        throw error;
    }
}



/**
 * 카카오(알림톡) 발송 요청 (발송 정보 파라미터로 전달)
 * @param {string} account 뿌리오 계정
 * @param {string} senderProfile 발신자 프로필명
 * @param {string} templateCode 알림톡 템플릿 코드
 * @param {Array} target 수신자 정보 배열
 * @param {Array} resend 대체 발송 정보 배열
 */

async function sendMessage(account, senderProfile, templateCode, target, m_resend) {
    const apiUrl = 'https://message.ppurio.com/v1/kakao'; // 카카오 알림톡 API URL
    const token = await getToken(); // getToken 함수 호출하여 발급받은 토큰 저장

    let resend = {
    messageType: 'SMS', // 메시지 유형
    from: '', // 발신 번호
    content: '', // 메시지 내용
    subject: '', // 메시지 제목
	};

    const sendData = {
        account, // 뿌리오 계정 ID
        messageType: 'ALT', // 메시지 유형: 알림톡(ALI)
        senderProfile, // 발신자 프로필
        templateCode, // 템플릿 코드
        duplicateFlag: 'N', // 중복 수신 번호 제거 여부
        targetCount: target.length, // 수신자 수
        targets: target, // 수신자와 치환 변수 정보
        refKey: crypto.randomBytes(16).toString('hex'), // 고유 참조 키 생성
		isResend: 'Y', // 대체 발송 여부 설정
        resend, // 대체 발송 정보
    };

    const headers = {
        Authorization: `Bearer ${token}`, // Bearer 타입 인증 토큰 추가
        'Content-Type': 'application/json', // JSON 형식으로 데이터 전송
    };

    // 요청 데이터와 헤더 확인
    console.log('Send Data:', JSON.stringify(sendData, null, 2));
    console.log('Headers:', headers);

    try {
        const response = await axios.post(apiUrl, sendData, { headers }); // 알림톡 발송 요청 전송
        console.log('Response:', response.data); // API 응답 출력
    } catch (error) {
        if (error.response) {
            console.error('Error Response:', error.response.data); // 서버에서 반환한 에러 메시지
        } else {
            console.error('Error:', error.message); // 네트워크 또는 기타 오류
        }
    }
}

// sendMessage와 getToken 함수 내보내기
module.exports = {
    sendMessage,
    getToken
};

 

 

소스코드를 다운로드 하실 수 있도록 파일 공유합니다.

 

sourcecode.txt
0.00MB

 

댓글