В этой статье описан процесс получения данных из ответа от сервера. Для использования ответа сервера в боте, сервер должен возвращать данные в формате JSON.
Как создавать запросы к серверу для тестирования описано в этой статье.
Вот мы получили JSON файл следующего вида.
{ "ok": true, "result": { "user": { "id": 426232239, "is_bot": false, "first_name": "Ярослав", "last_name": "Ярославович", "username": "yaryarich", "language_code": "ru" }, "status": "creator", "is_anonymous": false } }
Составление адреса поля
Предположим, нам требуется подтянуть имя. Чтобы обратиться к этому полю, нужно прописать полный адрес до него. Таким адресом будет result.result.user.first_name.
Разберем этот адрес по структуре, чтобы понять, как он строится:
- Для получения любой информации из JSON файла, при получении ответа от сервера, первым делом всегда пишется result, таким образом объявляется тело ответа. Адрес на этом этапе: «result».
- Элементы адреса разделяются между собой точками. Адрес на этом этапе: «result.».
- Обращаемся к списку с именем result. Адрес на этом этапе: «result.result».
- Обращаемся к списку с именем user. Адрес на этом этапе: «result.result.user».
- Указываем поле, которое содержит интересующую нас информацию, сейчас таким полем является first_name. Оно содержит в себе значение: Ярослав. Адрес на этом этапе: «result.result.user.first_name».
В связи с особенностями архитектуры системы, нет возможности успешно подтянуть значение переменных, которое равно true или false. При попытке подтянуть true, значение будет преобразовано в 1 и все отработает исправно, но если попробовать подтянуть false, то бот сломается, так как преобразует false в "", где "" – отсутствие символов.
Попытка подтянуть значение поля ok, которое равно true, закончится неудачей:
В случае ok = true, будет подтянуто значение 1.
В случае ok = false, бот сломается, так как переменная окажется пустая.
Адрес поля ok: «result.ok»
Составим еще один адрес, он отличается тем, что содержит в себе массив.
{ "calls": [ { "phone": "79996662211", "externalId": "", "additionalData": "", "variables": { "firstName": "Никита", "lastName": "Сергеев", "age": "33" } }, { "phone": "79996662233", "externalId": "", "additionalData": "", "variables": { "firstName": "Иван", "lastName": "Иванов", "age": "26" } } ] }
В этом случае нужно получить значение поля age Ивана Иванова, для этого выполните следующие действия:
- Объявите тело ответа. Адрес на этом этапе: «result».
- Между элементами адреса проставьте точки. Адрес на этом этапе: «result.».
- Укажите поле calls. Это поле является массивом. Массивы обозначаются квадратными скобками. Адрес на этом этапе: «result.calls».
- Все элементы массива обозначаются индексами. Укажите элемент массива, содержащий интересующую информацию. Адрес на этом этапе: «result.calls.1».
Индексация в массивах начинается с 0, поэтому если в массиве 3 элемента, то индексироваться они будут следующим образом: 0, 1, 2.
- После того как попали в нужный элемент массива, укажите поле variables. Адрес на этом этапе: «result.calls.1.variables».
- Укажите последнее интересующее вас поле age. Адрес на этом этапе: «result.calls.1.variables.age».
Таким образом полный адрес искомого элемента: «result.calls.1.variables.age».
Для более удобного получения адреса искомого поля можете использовать этого бота.
Использование адреса поля в сценарии
Попробуем получить значение переменной first_name из одного из примеров выше уже в сценарии. Для этого создадим запрос к серверу и подтянем оттуда искомый JSON.
Для сохранения нужных данных в переменную указываем полный адрес в JSON к искомым данным.