Краткое пошаговое руководство получению отчётов о информировании абонентов

В качестве клиента используем бесплатную программу SOAP UI, но принцип работы сохраняется и при использовании других продуктов. В том числе и при разработке ПО на .NET (Microsoft придумала стандарт SOAP и их средства как никакие другие подходят для этого). Программа существует под все популярные платформы и не имеет ограничений использования.

Руководство по программе можно найти на официальном сайте

В SOAP UI создаём новый проект и в качестве Initial WSDL используем ссылку из документации: http://kmis.callbox.biz/?wsdl

В этот момент SOAP UI (как и библиотека .NET) выгрузит из WSDL все приложения. Их три:

  1. get_report - получение статистики
  2. notification - оповещение абонента
  3. upload_audio - загрузка файла на сервис

Также программа выгрузит все методы для всех приложений. На текущий момент в каждом приложении 1 метод.

При переходе к редактированию метода Request приложения get_report откроется полный текст запроса с комментариями к нему:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:kmis="kmis.services" xmlns:ser="services.custom_types" xmlns:sch="http://spyne.io/schema">
   <soapenv:Header/>
   <soapenv:Body>
      <kmis:get_report>
         <kmis:request_data>
            <ser:customer_id>?</ser:customer_id>
            <ser:request_ids>
               <!--1 or more repetitions:-->
               <sch:request_id>?</sch:request_id>
            </ser:request_ids>
         </kmis:request_data>
      </kmis:get_report>
   </soapenv:Body>
</soapenv:Envelope>

Вопросительные знаки требуют ввода данных.

Первая строка с вопросительным знаком идентифицирует пользователя системы:

<ser:customer_id>?</ser:customer_id>

Вместо вопросительного знака необходимо в данную строку подставить UUID, выданный администратором системы. Пример корректного заполнения:

<ser:customer_id>394ffb3b-20f5-4046-b6b2-758103698fe7</ser:customer_id>

Следующий блок определяет все UUID запросов, по которым необходимо получить информацию.



Пример корректного заполнения блока:

            <ser:request_ids>
               <!--1 or more repetitions:-->
               <sch:request_id>7a9ef363-1977-437e-b134-cfdffec658f7</sch:request_id>
            </ser:request_ids>

В ответ на этот запрос сервер сообщит статус этого запроса:

<soap11env:Envelope xmlns:s0="services.custom_types" xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="kmis.services">
   <soap11env:Body>
      <tns:get_reportResponse>
         <tns:get_reportResult>
            <s0:audio_reports>
               <s0:CallReport>
                  <s0:request_id>7a9ef363-1977-437e-b134-cfdffec658f7</s0:request_id>
                  <s0:recipient_phone>7212921006</s0:recipient_phone>
                  <s0:status>success</s0:status>
                  <s0:attempt_count>1</s0:attempt_count>
                  <s0:received_date>2017-08-11T17:22:41.091847+06:00</s0:received_date>
                  <s0:last_attempt>2017-08-13T17:44:58.703631+06:00</s0:last_attempt>
                  <s0:call_duration>14</s0:call_duration>
               </s0:CallReport>
            </s0:audio_reports>
            <s0:ts_reports/>
         </tns:get_reportResult>
      </tns:get_reportResponse>
   </soap11env:Body>
</soap11env:Envelope>

Разберём ответ по строкам:
Первая строка возвращает ID запроса:

<s0:request_id>7a9ef363-1977-437e-b134-cfdffec658f7</s0:request_id>

Вторая строка возвращает номер абонента, для которого было адресовано это оповещение:

<s0:recipient_phone>7212921006</s0:recipient_phone>

Третья строка возвращает статус оповещения:

<s0:status>success</s0:status>

Подробнее статусы описаны в документации
Следующая строка показывает количество совершённых попыток:

<s0:attempt_count>1</s0:attempt_count>

Следующая строка показывает точное время получения запроса на оповещение:

<s0:received_date>2017-08-13T17:44:41.091847+06:00</s0:received_date>

Сделующая строка показывает точную дату и время последней попытки:

<s0:last_attempt>2017-08-13T17:44:58.703631+06:00</s0:last_attempt>

Последняя строка показывает общую продолжительность разговора:

<s0:call_duration>14</s0:call_duration>