Схема получения данных
Если у вашего смартапа есть необходимые разрешения, то данные пользователя будут доступны в объекте $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.