Урок 21 Web-запросы — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
Строка 103: Строка 103:
 
* '''Тип ответа''': Текст
 
* '''Тип ответа''': Текст
 
* '''Ответ в переменную''': переменная "'''ответ'''" (строковая)
 
* '''Ответ в переменную''': переменная "'''ответ'''" (строковая)
 +
 +
 +
[[Файл:Урок21-004.png|center]]
 +
  
 
*<u>Компонент "Парсер региона"</u>.  
 
*<u>Компонент "Парсер региона"</u>.  

Версия 10:07, 22 апреля 2014

Наверх К предыдущему уроку

В этом уроке рассказывается про использование компонентов "Web-запрос" и "Парсер".


Введение

Часто при обработке звонка возникает необходимость обращения к внешним сервисам с целью получения дополнительной информации по абоненту. Например, это может быть запросом в Российский план нумерации для того, чтобы узнать из какого региона звонит клиент. Или обращение в CRM-систему для получения имени ответственного менеджера. Описанные задачи решаются с помощью запросов к соответствующим web-системам. Подобным образом решается также интересная задача по распознаванию речи абонента в момент звонка и выполнение, так называемой, голосовой маршрутизации для составления заявок.

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

Внешняя система, получив запрос, выполняет необходимые действия и возвращает обратно сообщение с результатом. Получив такой ответ от внешней системы, возникает потребность в его разборе. Синтаксический анализ полученных сообщений и выделение нужной информации называется парсингом. В Oktell для этого предназначен отдельный компонент "Парсер", который может анализировать XML или JSON структуры, а также использовать язык "Регулярных выражений".

Разберемся подробнее с работой web-запросов на примере.


Использование Web-запросов в сценариях

Задача: При входящем звонке по номеру телефона определить из какого региона звонит абонент и маршрутизировать звонок в соответствиии с полученной информацией.

Сценарий выглядит следующим образом:


Урок21-001.png


Разберем компоненты сценария поподробнее.

  • Компонент "CallerID" . Определяет телефонный номер абонента и записывает его в переменную num. В компоненте переменной "num(строковая)" присваивается значение функции "Номер абонента (CallerId)".
  • Компонент "Запрос в Россвязь". Отправляет Web-запрос в сервис Россвязи для определения региона по номеру абонента.
  • В поле "Подключение" введите адрес сервиса, при необходимости укажите прокси-сервер и базовую авторизацию.


Урок21-002.png


  • В поле "Тип контента" вводится заголовок contenttype, которая подставляется в запрос. По умолчанию, используется application/x-www-form-urlencoded.
  • В поле "Метод" вы можете выбрать HTTP-метод передачи запроса.

Запрос GET передает данные серверу, используя URL. Все необходимые параметры перечисляются непосредственно в строке подключения через знак вопроса "?". Для разделения параметров используется символ "&". Длина URL ограничена 1024 символами, это и будет верхним ограничением для данных, которые можно отослать с помощью GET.

ВНИМАНИЕ: Строка Подключения (URL) в компоненте всегда отправляется в формате UTF-8.

Пример GET-запроса (передача параметров param1 и param2, имеющих значения value1 и value2 соответственно):

http://www.oktell.ru?param1=value1&param2=value2

Запрос POST передает данные серверу, используя тело HTTP запроса. POST может отправлять гораздо большие объемы данных. Лимит устанавливается веб-сервером и обычно равен около 2MB. Все необходимые параметры перечисляются в поле "Запрос", для разделения параметров используются используется символ "&".

ВНИМАНИЕ: Если указать в поле "Тип запроса" - XML, то возможна передача XML-структуры. Передача XML недоступна для метода GET.

В отличии, от метода GET, POST может отправлять данные не только в кодировке UTF-8. В поле "Кодировка запроса" вы можете выбрать Windows-1251, Unicode и другие форматы.

Несмотря на то, что передача данных методом GET проходит быстрее, передача данных методом POST более безопасна, так как секретные данные (например пароль) не отображаются напрямую для пользователя (в отличии от URL, который виден почти всегда).

Для большей наглядности, на следующем рисунке показан пример настройки компонента для отправки запроса с помощью методов GET и POST. В примере, на сервер http://www.oktell.ru отправляются два параметра param1 и param2 со значениями value1 и value2 соответственно:

Урок21-003.png

Методы PUT, HEAD, DELETE применяются редко и в данном уроке не рассматриваются.

  • В поле "Дополнительные заголовки" вы всегда можете добавить один или несколько заголовков запроса. Для разделения заголовков используйте перенос строки, например,
HeaderName1: Value1
HeaderName2: Value2

Аналогично заполняется поле "Дополнительные cookie".

  • Настройка "Режим работы" позволяет установить один из четырех вариантов: Ожидание результата, Асинхронный запуск, Обрыв по таймауту или Выход по таймауту.

Для задачи определения региона по номеру абонента используется режим "Ожидание результата", так как сценарий не должен переходить к следующим компонентам без определения региона. Однако может случиться ситуация, когда сервер Россвязи будет перегружен. В таком случае, запросы могут обрабатываться длительное время (например, 10-20 секунд), что скажется отрицательно на качестве обслуживания. Решением проблемы будет установить режим "Выход по таймауту" с переключением на менеджеров по остальным регионам.

  • Получив ответ от внешней системы, можно указать переменную, в которую он будет сохранен. Переменная указывается в поле "Ответ в переменную". Также вы можете указать кодировку, в которой ожидаете получить сообщение. По умолчанию, кодировка выбирается автоматически (опция "Авто (метаданные, заголовок)").
  • Также вы можете указать переменную для хранения кода ошибки в поле "Код ошибки в переменную". Переменную можно проанализировать в случае, если сценарий перешел по ветке "Переход, неудача".


В сценарии компонент "Запрос в Россвязь" имеет следуюшие настройки:

  • Подключение: http://www.rossvyaz.ru/activity/num_resurs/registerNum/
  • Тип контента: application/x-www-form-urlencoded
  • Метод: POST
  • Тип запроса: Аргумент
  • Запрос: выражение, в которое подставляется код города и семизначный номер телефона абонента. Данные получаются с помощью операции substr (получение части строки), применяемой над переменной num (номером телефона абонента).
'act=search&abcdef='+substr([num],1,3)+'&number='+substr([num],4,7) 

В результате запроса:

  • в параметр act подставляется значение search
  • в параметр abcdef подставляется код города (3 символа, начиная с первого)
  • в параметр number подставляется семизначный номер телефона (7 символов, начиная с четвертого)
  • Кодировка запроса: UTF-8
  • Режим работы: Ожидание результата
  • Тип ответа: Текст
  • Ответ в переменную: переменная "ответ" (строковая)


Урок21-004.png


  • Компонент "Парсер региона".
  • Компонент "Ошибка".
  • Компонент "Ответ".
  • Компонент "Москва и Московская область?".
  • Компонент "По Москве".
  • Компонент "Татарстан?".
  • Компонент "По Татарстану".
  • Компонент "По остальным регионам".


Наверх К предыдущему уроку