Message Box | ||||||
---|---|---|---|---|---|---|
| ||||||
|
В этой статье описан процесс получения данных из ответа от сервера. Ответом от сервера всегда являются Для использования ответа сервера в боте, сервер должен возвращать данные в формате JSON.
Подсказка |
---|
Как создавать запросы к серверу для тестирования и тестировать запросы перед использованием в боте описано в этой статье. |
...
Вот мы получили JSON файл следующего вида.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
{ "callsok": [true, "result": { "phoneuser": "79996662211", { "externalIdid": ""426232239, "additionalData": "", "variablesis_bot": {false, "firstNamefirst_name": "НикитаЯрослав", "lastName": "Сергеев", "age": "33" } } "last_name": "Ярославович", { "phoneusername": "79996662233yaryarich", "externalIdlanguage_code": "ru", "additionalData": ""}, "variablesstatus": { "firstName": "Иван"creator", "lastName": "Иванов", "age": "26" } "is_anonymous": false } ] }} |
Составление адреса поля
При работе со списком
Предположим, нам требуется подтянуть номер телефона Ивана Ивановаимя. Чтобы обратиться обратиться к этой информацииэтому полю, требуется нужно прописать полный адрес до неенего. Таким адресом будет result.callsresult.1user.phonefirst_name.
Разберем этот адрес по структуре, чтобы понять, как он строится:
- Для получения любой информации из JSON файла, при получении ответа от сервера, первым делом всегда пишется result, таким образом объявляется тело ответа. Адрес на этом этапе: «result».
- Элементы адреса разделяются между собой точками. Адрес на этом этапе: «result.».
- Обращаемся к списку с именем result. Адрес на этом этапе: «result.Вторым действием мы обращаемся к массиву calls, который в себе содержит 2 элемента.
Индексация в массивах начинается с 0, поэтому если в массиве 3 элемента, но индексироваться они будут следующим образом: 0, 1, 2result».Примечание - Обращаемся к списку с именем user. Адрес на этом этапе: «result.result.user».
- Указываем поле, которое содержит интересующую нас информацию, сейчас таким полем является first_name. Оно содержит в себе значение: Ярослав. Адрес на этом этапе: «result.result.user.first_name».
Предупреждение |
---|
В связи с особенностями архитектуры системы, нет возможности успешно подтянуть значение переменных, которое равно true или false. При попытке подтянуть true, значение будет преобразовано в 1 и все отработает исправно, но если попробовать подтянуть false, то бот сломается, так как преобразует false в "", где "" – отсутствие символов. Адрес поля ok: «result.ok» |
Таким образом полный адрес искомого элемента: «result.result.user.first_name».
При работе с массивом
Составим еще один адрес, он отличается тем, что содержит в себе массив.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
{ "namecalls": "02.02 тестирование", "botId": "44e62ac6-6c08-4ad1-923d-5ee3299dd737", "dialplanId": "d71c9c44-e942-4c6c-9ccc-ea5a043efb75", "backgroundNoise": "/background/office.wav", "amd": { "enabled": true, "mode": "BACK", "file": null }, "defaultCallerId": { "type": "Custom ", "data": "79996662211", "additional": null }, "defaultRedirect": { "type": "hangup", "data": null, "additional": null }, "scheduledAt": null, "intensity": 1, "webhookUrl": "https://webhook.site/12345678", "allowedTimeRange": { "from": 32500, "to": 79000 }, "phoneNormalization": "ru", "detectGenderByVoice": true, "isTest": false, "recallRules": { "BUSY": { "enabled": true, "tries": 3, "interval": 900 }, "NO_ANSWER": { "enabled": true, "tries": 3, "interval": 1800 }, "MACHINE": { "enabled": true, "tries": 2, "interval": 1800 }, "CONGESTION": { "enabled": true, "tries": 3, "interval": 900 }, "NOT_SUCCESSFUL": { "enabled": false, "tries": null, "interval": null, "duration": 0 } } }[ { "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 к искомым данным.
Раскрыть | ||
---|---|---|
| ||
как составить адрес поля, как разобраться в ответе сервера, как написать путь к информации в ответе от сервера. |