Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Message Box
iconnone
titleНа этой странице:
typegeneric
Оглавление


В этой статье описан процесс получения данных из ответа от сервера. Ответом от сервера всегда являются Для использования ответа сервера в боте, сервер должен возвращать данные в формате JSON. 

Подсказка

Как создавать запросы к серверу для тестирования и тестировать запросы перед использованием в боте описано в этой статье.

...


Вот мы получили JSON файл следующего вида.

Блок кода
languagepy
themeDJango
firstline1
titleТело запроса в формате Json:
linenumberstrue
{
    "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

Разберем этот адрес по структуре, чтобы понять, как он строится:

  1. Для получения любой информации из JSON файла, при получении ответа от сервера, первым делом всегда пишется result, таким образом объявляется тело ответа. Адрес на этом этапе: «result».

    Image Added

  2. Элементы адреса разделяются между собой точками. Адрес на этом этапе: «result.».

  3. Обращаемся к списку с именем result. Адрес на этом этапе: «result.Вторым действием мы обращаемся к массиву calls, который в себе содержит 2 элемента.
    ПримечаниеИндексация в массивах начинается с 0, поэтому если в массиве 3 элемента, но индексироваться они будут следующим образом: 0, 1, 2result».

    Image Added

  4. Обращаемся к списку с именем user. Адрес на этом этапе: «result.result.user».

    Image Added

  5. Указываем поле, которое содержит интересующую нас информацию, сейчас таким полем является first_name. Оно содержит в себе значение: Ярослав. Адрес на этом этапе: «result.result.user.first_name».

    Image Added
Предупреждение

В связи с особенностями архитектуры системы, нет возможности успешно подтянуть значение переменных, которое равно true или false. При попытке подтянуть true, значение будет преобразовано в 1 и все отработает исправно, но если попробовать подтянуть false, то бот сломается, так как преобразует false в "", где "" – отсутствие символов. 

Попытка подтянуть значение поля ok, которое равно true, закончится неудачей:
В случае ok = true, будет подтянуто значение 1.
В случае ok = false, бот сломается, так как переменная окажется пустая.

Адрес поля ok: «result.ok»

Image Added

Таким образом полный адрес искомого элемента: «result.result.user.first_name».

При работе с массивом

Составим еще один адрес, он отличается тем, что содержит в себе массив.

Блок кода
languagepy
themeDJango
firstline1
titleТело запроса в формате Json:
linenumberstrue
{

     "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 Ивана Иванова, для этого выполните следующие действия:

  1. Объявите тело ответа. Адрес на этом этапе: «result».

    Image Added

  2. Между элементами адреса проставьте точки. Адрес на этом этапе: «result.».

  3. Укажите поле calls. Это поле является массивом. Массивы обозначаются квадратными скобками. Адрес на этом этапе: «result.calls».

    Image Added


  4. Все элементы массива обозначаются индексами. Укажите элемент массива, содержащий интересующую информацию. Адрес на этом этапе: «result.calls.1».

    Image Added
    Примечание

    Индексация в массивах начинается с 0, поэтому если в массиве 3 элемента, то индексироваться они будут следующим образом: 0, 1, 2.

  5. После того как попали в нужный элемент массива, укажите поле variables. Адрес на этом этапе: «result.calls.1.variables».

    Image Added

  6. Укажите последнее интересующее вас поле age. Адрес на этом этапе: «result.calls.1.variables.age».

    Image Added

Таким образом полный адрес искомого элемента: «result.calls.1.variables.age».

Подсказка

Для более удобного получения адреса искомого поля можете использовать этого бота.


Использование адреса поля в сценарии

Попробуем получить значение переменной first_name из одного из примеров выше уже в сценарии. Для этого создадим запрос к серверу и подтянем оттуда значение нужного поля.

Для сохранения нужных данных в переменную указываем полный адрес в JSON к искомым данным.

Image Added


Image Added




Раскрыть
titleТеги

как составить адрес поля, как разобраться в ответе сервера, как написать путь к информации в ответе от сервера.