Описание API SmartGeo

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

Если у вашего смартапа есть необходимые разрешения, то данные пользователя будут доступны в объекте $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",
  "messageName": "GET_PROFILE_DATA",
  "uuid": {
    "userId": "ec8a9097-1508-4bec-8d97-67f2329c03e0",
    "userChannel": "B2C"
  },
  "payload": {
  }
}

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

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

Пример:

{
  "messageId": "1605196199186625000",
  "sessionId": "0062530b-5521-42cc-90b0-a9d65dea4e98",
  "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"
    }
  },
  "uuid": {
    "userId": "ec8a9097-1508-4bec-8d97-67f2329c03e0",
    "userChannel": "B2C"
  }
}

Коды ошибок

Код и текст ошибки Описание
001
SUCCESS
Данные существуют и получено согласие клиента
101
CLIENT DENIED
Клиент отклонил автозаполнение
102
FORBIDDEN
Этот смартап не может использовать сервис SmartGeo

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

Для 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'
};

Для SmartApp Graph

Шаг 1 — добавьте блок SmartGeo в сценарий на этапе, когда требуются геоданные.

Шаг 2 — создайте сценарий обработки ответа:

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

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

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