Схема получения данных
Используйте API SmartProfile для:
- получения существующих данных пользователя: ФИО, адреса, телефона, адреса электронной почты и даты рождения;
- изменения ранее указанного адреса, телефона и адреса электронной почты;
- уточнения адреса.
Если у вашего смартапа есть необходимые разрешения, то данные пользователя будут доступны в объекте $request.data.eventData.profile_data.
:
state: Welcome
q!: оформи заказ
a: Данные для заказа {{$request.payload.profile_data}}!
Форматы запроса
Получение данных
Чтобы получить клиентские данные, после добавления товара в корзину используйте сообщение "messageName": "GET_PROFILE_DATA"
. Этот тип сообщения можно использовать при оформлении, составлении и подтверждении заказа.
- Пример
- Описание
Изменение данных
Чтобы пользователь мог изменить данные из своего профиля, используйте сообщение "messageName": "CHOOSE_PROFILE_DATA"
. Этот тип сообщения можно использовать только после получения данных при оформлении заказа — "GET_PROFILE_DATA"
.
Пользователи могут изменить адрес, телефон и электронную почту:
- для изменения адреса используйте
"fields": [ "address" ]
; - для изменения телефона используйте
"fields": [ "phone_number" ]
; - для изменения электронной почты используйте
"fields": [ "email" ]
; - для изменения адреса, телефона и электронной почты используйте
"fields": [ "address", "phone_number", "email" ]
.
- Пример
- Описание
Уточнение данных
Если вашему сценарию не хватает данных (например, пользователь не указал в адресе код домофона), используйте сообщение "messageName": "DETAILED_PROFILE_DATA"
. Этот тип сообщения можно использовать только после получения данных при оформлении заказа — "GET_PROFILE_DATA"
.
Получить дополнительные данные можно только по адресу. Для этого используйте "fields": [ "address" ]
.
- Пример
- Описание
Формат ответа
При успешном выполнении возвращается сообщение TAKE_PROFILE_DATA
.
Формат ответа на запросы GET_PROFILE_DATA
, CHOOSE_PROFILE_DATA
и DETAILED_PROFILE_DATA
:
- Пример
- Описание
{
"messageId": "1605196199186625000",
"sessionId": "0062530b-5521-42cc-90b0-a9d65dea4e98",
"messageName": "TAKE_PROFILE_DATA",
"uuid": {
"userId": "ec8a9097-1508-4bec-8d97-67f2329c03e0",
"userChannel": "B2C"
},
"payload": {
"device": {},
"profile_data": {
"customer_name": "Иван",
"surname": "Иванов",
"patronymic": "Иванович",
"birthDate": "01.01.2000",
"phone_number": "+79161234567",
"email": "ivanov@site.ru",
"address": {
"location": {
"latitude": "56.77",
"longitude": "23.88"
},
"address_string": "Кутузовский пр-т 32",
"country": "Россия",
"region": "Регион",
"city": "Москва",
"settlement": "Поселок",
"district": "Район",
"street": "Кутузовский проспект",
"house": "32",
"building": "1",
"floor": "12",
"entrance": "3",
"apartment": "134",
"door_code": "134",
"alias": "Название адреса",
"comment": "Комментарий",
"address_type": "Тип адреса"
}
},
"status_code": {
"code": 1,
"description": "success"
}
}
}
Коды ошибок
Код | Текст ошибки | Описание |
---|---|---|
001 | SUCCESS | Данные существуют и получено клиентское согласие |
100 | EMPTY DATA | Данные отсутствуют в профиле |
101 | CLIENT DENIED | Клиент отклонил автозаполнение |
102 | FORBIDDEN | Запрещенный вызов от смартапа для GET_PROFILE_DATA |
103 | FORBIDDEN REQUEST | Запрещенный вызов от смартапа для CHOOSE_PROFILE_DATA и DETAILED_PROFILE_DATA в случае отсутствия клиентского согласия |
104 | Access Denied | Запрещенный вызов от смартапа для CHOOSE_PROFILE_DATA и DETAILED_PROFILE_DATA в случае отсутствия прав на изменение или уточнение данных |
Примеры встраивания в смартап
Для SaluteJS
Коды ответов и их описание:
var PROFILE_STATUS_CODE = {
'1': {
value: '1',
comment: 'Данные существует и получено клиентское согласие',
},
'101': {
value: '101',
comment: 'Клиент не согласен на передачу геоданных',
},
'102': {
value: '102',
comment: 'Запрещенный вызов от навыка, у вас не подключен сервис SmartGeo',
},
};
Функция чтения ответа сервиса SmartGeo:
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;
} 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 {}
Функция создания запроса на получение геоданных:
function commandGetProfileData() {
var body = {};
sendCommandCustomMessageName(body, MESSAGE_NAME.GET_PROFILE_DATA);
}
Функция отправки сообщения с заданным 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,
});
}
var MESSAGE_NAME = {
GET_PROFILE_DATA: 'GET_PROFILE_DATA',
TAKE_PROFILE_DATA: 'TAKE_PROFILE_DATA',
};
Для Graph
Шаг 1 — добавьте Блок SmartGeo в сценарий на этапе, когда требуются геоданные. Предварительно подключите сервис SmartProfile, т.к. без него нельзя получить доступ к данным пользователя.
Шаг 2 — создайте сценарий обработки ответа:
- Данные получены.
- Не удалось получить данные.
- Отклонено пользователем.
Для Code
Подробнее в разделе SmartProfile в Code.