shopee-v2-api
Version:
296 lines (262 loc) • 6.72 kB
JavaScript
/* -------------------------------------------------------------------------- */
/* Imports */
/* -------------------------------------------------------------------------- */
const FormData = require('form-data');
const _ = require('lodash');
/* -------------------------------------------------------------------------- */
/* Constants */
/* -------------------------------------------------------------------------- */
const {
constants
} = require('./constants');
/* -------------------------------------------------------------------------- */
/* Common / Auth */
/* -------------------------------------------------------------------------- */
const {
buildSignKey,
buildUrl,
get,
post,
postFile,
RefreshToken
} = require('./auth');
/* -------------------------------------------------------------------------- */
/* API */
/* -------------------------------------------------------------------------- */
/* ------------------------------- Chat ------------------------------ */
/**
* 대화 목록
* @param {*} userShop
* @param {*} direction
* @param {*} type
* @param {*} pageSize
* @param {*} nextTimestamp
* @returns
*/
exports.GetConversationList = async (userShop, direction = 'latest', type = 'all', pageSize = 60, nextTimestamp = null) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/sellerchat/get_conversation_list';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id,
direction: direction,
type: type,
page_size: pageSize,
nextTimestamp: nextTimestamp
});
// request && response data
const responseData = await get(url);
return responseData;
} catch (err) {
throw err;
}
}
/**
* 대화 정보
* @param {*} userShop
* @param {*} conversationId
* @returns
*/
exports.GetConversationOne = async (userShop, conversationId) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/sellerchat/get_one_conversation';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id,
conversation_id: conversationId
});
// request && response data
const responseData = await get(url);
return responseData;
} catch (err) {
throw err;
}
}
/**
* 메세지 목록
* @param {*} userShop
* @param {*} conversationId
* @param {*} offset
* @param {*} pageSize
* @returns
*/
exports.GetMessage = async (userShop, conversationId, offset, pageSize = 60) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/sellerchat/get_message';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id,
conversation_id: conversationId,
offset: offset,
pageSize: pageSize
});
// request && response data
const responseData = await get(url);
return responseData;
} catch (err) {
throw err;
}
}
/**
* 메세지 등록
* @param {*} userShop
* @param {*} toId
* @param {*} messageType: text, image, sticker, item, order
* @param {any} content: {text: 'text', image_url: 'image_url', sticker_id: 'sticker_id', sticker_package_id: 'sticker_package_id', item_id: 'item_id', order_sn: 'order_sn'}
* @returns
*/
exports.SendMessage = async (userShop, toId, messageType = 'text', content) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/sellerchat/send_message';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id,
});
// request && response data
const responseData = await post(url, JSON.stringify({
to_id: toId,
message_type: messageType,
content: content
}));
return responseData;
} catch (err) {
throw err;
}
}
/**
* 채팅 이미지 업로드
* @param {*} userShop
* @param {*} imageFile
* @returns
*/
exports.uploadChatImage = async (userShop, imageFile) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/sellerchat/upload_image';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id,
});
// form data
const formData = new FormData();
formData.append('file', imageFile, currentTimeStamp.toString());
// request && response data
const responseData = await postFile(url, formData);
return responseData;
} catch (err) {
throw err;
}
}
/**
* 자동 응답 메세지 등록
* @param {*} userShop
* @param {*} toId
* @param {*} content : {text: 'text'}
* @returns
*/
exports.SendAutoReplyMessage = async (userShop, toId, content) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/sellerchat/send_autoreply_message';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id,
});
// request && response data
const responseData = await post(url, JSON.stringify({
to_id: toId,
content: content
}));
return responseData;
} catch (err) {
throw err;
}
}