Как получить номер входящего вызова из SAP CDT в Python?

Я работаю в службе поддержки, и мы используем SAP Communication Desktop в качестве нашего программного обеспечения для телефонов, хотя не знаю, насколько это распространено в отрасли.

Я разрабатываю программу Python для автоматизации повторяющихся частей моей работы (написание билетов, поиск номеров в ServiceNow и т. д.). Все работает нормально, когда я ввожу данные вручную, но я хотел бы автоматизировать процесс и просто получить Python. информация из SAP при поступлении вызова. Номер вызова также отображается рядом с панелью задач, и я попытался найти его в средстве просмотра событий Windows, но пока не смог его найти.

Возможно ли это сделать в Python?

введите здесь описание изображения

Ильмари


person Ilmari Kumpula    schedule 27.10.2017    source источник


Ответы (1)


Вы можете использовать Интерфейс онлайн-взаимодействия SAP (OII)< /эм>.

Это API, который позволяет клиентским приложениям (например, CDT) взаимодействовать с BCM (выполнять звонки и т. д.).

Заставьте своего клиента подключиться к OII и отправить запрос на подписку IciContainerInterface, указав свой номер строки.

Затем OII будет отправлять события, содержащие информацию (например, номер звонка) для каждого телефонного звонка, относящегося к вашему номеру линии, в ваше приложение.

инструкции

Загрузите WSDL со своего OII:

http://IP-адрес/OII/IciItemService.asmx?WSDL

Используйте WSDL для создания классов OII

Получить экземпляр соединения OII:

    private Optional<IciContainerServiceSoap> getContainerPort() {
    return containerSubscriber.map(s -> {
        IciContainerServiceSoap port = s.getIciContainerServiceSoap12();
        BindingProvider binding = (BindingProvider) port;
        binding.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
                createServerUrl(s.getServiceName().getLocalPart(), serverAddress, serverPort));

        return port;
    });
}

 public static String createServerUrl(@NotNull String localPart, @NotNull String serverAddress, int port) {
        StringBuilder sb = new StringBuilder();

        sb.append("http://");
        sb.append(serverAddress);

        if (port == 0) port = 80;

        if (port != 80) {
            sb.append(":");
            sb.append(String.valueOf(port));
        }

        sb.append("/oii/");
        sb.append(localPart);
        sb.append(".asmx");

        return sb.toString();
    }


    /*
    * Address and port on which your client app's webservice will be   
    * listening for events sent by OII.
    */
         public static String createAppURL() throws UnknownHostException {
        //   

   Example:  http://xxx.xxx.xxx.xxx:7007/sapws/services/cct?wsdl
            return "http://" + getHostName() + ":" + getListenPort() + "/sapws/services?wsdl";
        }

Отправить запрос на подписку:

getContainerPort().map(p -> p.subscribe(appURL, getAppId(), "1", container)).orElseThrow(IllegalStateException::new);

Теперь ваше приложение будет получать события PhoneCallChanged в виде пакетов SOAP на порт, указанный в идентификаторе приложения (7007).

Обратите внимание, что я использую Java. Я уточню, если нужно. Удачи!

person user2818782    schedule 01.02.2018