Схема получения данных
Если у вашего смартапа есть необходимые разрешения, то данные пользователя будут доступны в объекте $request.payload.profile_data
:
state: Welcome
q!: где ты находишь ся?
a: Вот тут {{$request.payload.profile_data.geo.location}}!
Формат запроса
Чтобы получить геоданные в сессии диалога, используйте сообщение "messageName": "GET_PROFILE_DATA"
.
Этот тип сообщения нужно использовать на том шаге сценария, когда вам потребуется запросить разрешение клиента и получить геоданные.
- Пример
- Описание
{
"messageId": 1605196199186625000,
"sessionId": "0062530b-5521-42cc-90b0-a9d65dea4e98",
"uuid": {
"userId": "ec8a9097-1508-4bec-8d97-67f2329c03e0",
"userChannel": "B2C"
},
"messageName": "GET_PROFILE_DATA",
"payload": {}
}
Идентификатор сообщения
Идентификатор сессии
uuid
object
Идентификатор пользо вателя
Идентификатор канала коммуникации
Название сообщения
Пустое тело сообщения
Формат ответа
Ответ возвращается в сообщении TAKE_PROFILE_DATA
.
- Пример
- Описание
{
"messageId": 1605196199186625000,
"sessionId": "0062530b-5521-42cc-90b0-a9d65dea4e98",
"uuid": {
"userId": "ec8a9097-1508-4bec-8d97-67f2329c03e0",
"userChannel": "B2C"
},
"messageName": "TAKE_PROFILE_DATA",
"payload": {
"device": {},
"profile_data": {
"geo": {
"reverseGeocoding": {
"country": "Российская Федерация",
"region_id": 20666588000,
"region": "Ненецкий автономный округ",
"subregion_id": 23575664000,
"subregion": "Заполярный район",
"city_id": 27720392000,
"city": "Верхний Шар"
},
"location": {
"accuracy": 100,
"lat": 50.125,
"lon": 70.0124,
"timestamp": 1432233446145000,
"source": "gps"
}
}
},
"status_code": {
"code": 1,
"description": "SUCCESS"
}
}
}
SUCCESS
— Данные существуют и получено согласие пользователя. Соответствует коду001
CLIENT DENIED
— Пользователь отклонил автозаполнение. Соответствует коду101
FORBIDDEN
— Этот смартап не может использовать сервис SmartGeo. Соответствует коду102
Идентификатор сообщения
Идентификатор сессии
uuid
object
Идентификатор пользо вателя
Идентификатор канала коммуникации
Название сообщения
payload
object
Тело сообщения
Данные об устройстве
profile_data
object
Данные профиля пользователя
geo
object
Данные о положении устройства пользователя
reverseGeocoding
object
Декодированные данные о положении устройства пользователя
Страна
Идентификатор региона
Название региона
Идентификатор субрегиона
Название субрегиона
Идентификатор города
Название города
location
object
Координаты устройства
Точность опредления положения
Широта
Долгота
Unix-время
Название источника данных
status_code
object
Возможные значения: [1
, 101
, 102
]
Код ответа
Возможные значения: [SUCCESS
, CLIENT DENIED
, FORBIDDEN
]
Описание ответа. Возможные значения:
Коды ошибок
Код | Текст ошибки | Описание |
---|---|---|
001 | SUCCESS | Данные существуют и получено клиентское согласие |
100 | EMPTY DATA | Данные отсутствуют в профиле |
101 | CLIENT DENIED | Клиент отклонил автозаполнение |
102 | FORBIDDEN | Запрещенный вызов от смартапа для GET_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 в сценарий на этапе, когда требуются геоданные.
Шаг 2 — создайте сценарий обработки ответа:
- Данные получены.
- Не удалось получить данные.
- Отклонено пользователем.
Для Code
Подробнее в разделе SmartGeo в Code.