SmartProfile Integration
Yeti-or opened this issue · 0 comments
Yeti-or commented
https://developer.sberdevices.ru/docs/ru/smartservices/smartprofile-api
We need:
- user address
- user phone number
Example of SmartProfile usage using SmartCode:
// Коды ответов и их описание
var PROFILE_STATUS_CODE = {
'1': {
'value': '1',
'desc': 'SUCCESS',
'comment': 'Данные существует и получено клиентское согласие'
},
'100': {
'value': '100',
'desc': 'EMPTY DATA',
'comment': 'Данные отсутствуют в профиле'
},
'101': {
'value': '101',
'desc': 'CLIENT DENIED',
'comment': 'Клиент отклонил автозаполнение'
},
'102': {
'value': '102',
'desc': 'FORBIDDEN',
'comment': 'Запрещенный вызов от навыка для GET_PROFILE_DATA'
},
'103': {
'value': '103',
'desc': 'FORBIDDEN REQUEST',
'comment': 'Запрещенный вызов от навыка для CHOOSE_PROFILE_DATA и DETAILED_PROFILE_DATA в случае отсутствия клиентского согласия.'
},
'104': {
'value': '104',
'desc': 'Access Denied',
'comment': 'Запрещенный вызов от навыка для CHOOSE_PROFILE_DATA и DETAILED_PROFILE_DATA в случае запроса на изменение/детализирование данных отстуствующих в Access Rights для навыка.'
}
};
// Названия возможных сообщений (messageName)
var MESSAGE_NAME = {
'DETAILED_PROFILE_DATA' : 'DETAILED_PROFILE_DATA',
'CHOOSE_PROFILE_DATA' : 'CHOOSE_PROFILE_DATA',
'GET_PROFILE_DATA' : 'GET_PROFILE_DATA',
'TAKE_PROFILE_DATA' : 'TAKE_PROFILE_DATA'
};
// Возможные поля для каждого типа сообщений, где это предусмотрено
var FIELDS_GET_FROM_PROFILE = {
'DETAILED_PROFILE_DATA': {
'phone_number': 'phone_number',
'address': 'address',
},
'CHOOSE_PROFILE_DATA': {
'phone_number': 'phone_number',
'address': 'address'
}
};
// Функция, которая отправляет сообщение с заданным messageName
function sendCommandCustomMessageName(items, messageName) {
var response = $jsapi.context().response;
var payload = items;
response.replies = response.replies || [];
response.replies.push({
'type': "raw",
'messageName': messageName,
'body': payload
});
}
// Функция для чтения ответа сервиса SmartProfile
function readMessageTakeProfileData() {
var answer = {
'status': false,
'code': null
};
var request = $jsapi.context().request.rawRequest;
var payload = request.payload;
var statusCode = payload.status_code;
if (statusCode.code.toString() === PROFILE_STATUS_CODE["1"].value) {
// все получили
answer.status = true;
answer.code = statusCode.code;
answer['code_desc'] = PROFILE_STATUS_CODE[statusCode.code.toString()].comment;
answer['profile_data'] = readProfileData(payload.profile_data);
} else if (statusCode.code &&
statusCode.code.toString() in PROFILE_STATUS_CODE) {
// пришел известный статус код, но резльтат не success
var errorDesc = PROFILE_STATUS_CODE[statusCode.code.toString()].comment;
answer.code = statusCode.code;
answer['code_desc'] = errorDesc;
} else {
// Пришел неизвестный статус код
}
/*
* формат ответа:
* {
* status: <bool>, // required
* code: <number>, // optional
* code_desc: <string>, // optional
* profile_data: { // optional
* 'customer_name': <string>, // optional
* 'phone_number': <string>, // optional
* 'address': <object> // optional
* }
* }
*/
return answer;
}
// Необязательная функция, проверяет наличие определенных полей. Ели их нет - создает и делает пустые значения внутри
function readProfileData(profileData) {
var customerName = profileData.customer_name || '';
var phoneNumber = profileData.phone_number || '';
var address = profileData.address || {};
return {
'customer_name': customerName,
'phone_number': phoneNumber,
'address': address
};
}
// Функция для создания запроса изменения адреса в сервис SmartProfile
function commandChooseProfileData(arrayOfData) {
// arrayOfData = ['address', phone_number]
var body = {'fields': [] };
if (arrayOfData === undefined ||
(Array.isArray(arrayOfData) && arrayOfData.length === 0)) {
body.fields = [
FIELDS_GET_FROM_PROFILE.CHOOSE_PROFILE_DATA.address,
FIELDS_GET_FROM_PROFILE.CHOOSE_PROFILE_DATA.phone_number
];
} else {
body.fields = arrayOfData;
}
sendCommandCustomMessageName(body, MESSAGE_NAME.CHOOSE_PROFILE_DATA);
}
// Функция для создания запроса доуточнения/изменения текущего адреса в сервис SmartProfile
function commandDetailedProfileData(arrayOfData) {
// arrayOfData = ['address', phone_number]
var body = {'fields': [] };
if (arrayOfData === undefined ||
(Array.isArray(arrayOfData) && arrayOfData.length === 0)) {
body.fields = [
FIELDS_GET_FROM_PROFILE.DETAILED_PROFILE_DATA.address,
// FIELDS_GET_FROM_PROFILE.DETAILED_PROFILE_DATA.phone_number
];
} else {
body.fields = arrayOfData;
}
sendCommandCustomMessageName(body, MESSAGE_NAME.DETAILED_PROFILE_DATA);
}
// Функция для создания запроса полчения текущего выбранного пользователем адреса в сервисе SmartProfile
function commandGetProfileData() {
var body = {};
sendCommandCustomMessageName(body, MESSAGE_NAME.GET_PROFILE_DATA);
}