ym88659208ym87991671
API SmartGeo | Документация для разработчиков
Skip to main content

API SmartGeo

Обновлено 13 сентября 2022

Схема получения данных

Если у вашего смартапа есть необходимые разрешения, то данные пользователя будут доступны в объекте $request.payload.profile_data:

state: Welcome
q!: где ты находишься?
a: Вот тут {{$request.payload.profile_data.geo.location}}!

Формат запроса

Чтобы получить геоданные в сессии диалога, используйте сообщение "messageName": "GET_PROFILE_DATA".

Этот тип сообщения нужно использовать на том шаге сценария, когда вам потребуется запросить разрешение клиента и получить геоданные.

messageId
string

Идентификатор сообщения

sessionId
string

Идентификатор сессии

object
messageName
string

Название сообщения

Value: "GET_PROFILE_DATA"
payload
object

Пустое тело сообщения

{
  • "messageId": 1605196199186625000,
  • "sessionId": "0062530b-5521-42cc-90b0-a9d65dea4e98",
  • "uuid": {
    },
  • "messageName": "GET_PROFILE_DATA",
  • "payload": { }
}

Формат ответа

Ответ возвращается в сообщении TAKE_PROFILE_DATA.

messageId
string

Идентификатор сообщения

sessionId
string

Идентификатор сессии

object
messageName
string

Название сообщения

Value: "TAKE_PROFILE_DATA"
object

Тело сообщения

{
  • "messageId": 1605196199186625000,
  • "sessionId": "0062530b-5521-42cc-90b0-a9d65dea4e98",
  • "uuid": {
    },
  • "messageName": "TAKE_PROFILE_DATA",
  • "payload": {
    }
}

Примеры встраивания в смартап

Для 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 — создайте сценарий обработки ответа:

  • Данные получены.
  • Не удалось получить данные.
  • Отклонено пользователем.

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней