Интеграция учетной системы 1С с IP-АТС OkTell через HTTP API открывает широкие возможности для автоматизации работы регистратур, отделов продаж и сервисных служб. Рассмотрим подробно, как настроить взаимодействие между платформой 1С и сервером OkTell, разберем причины возникновения распространенных ошибок и выясним, как совершать исходящие звонки, не используя стандартное приложение Oktell Desktop Client.
Для начала взаимодействия с сервером OkTell нам необходимо создать объект HTTPСоединение. Важно правильно передать параметры авторизации и адрес сервера. Разберем наиболее корректный способ инициализации запроса, который позволяет избежать ошибок при передаче учетных данных.
Рассмотрим пример кода для инициализации соединения и отправки простого запроса к API:
&НаСервере
Процедура ВыполнитьЗапросКОктелл()
// Определяем параметры подключения
АдресСервера = "192.168.1.100"; // IP вашего сервера OkTell
ПортСервера = 4055; // Стандартный порт HTTP-сервера OkTell
Логин = "Администратор";
Пароль = "ВашПароль";
// Создаем соединение. Таймаут лучше ставить с запасом (10-20 секунд)
HTTPСоединение = Новый HTTPСоединение(АдресСервера, ПортСервера, Логин, Пароль, , 15);
// Формируем строку запроса для получения версии сервера (тестовая команда)
СтрокаЗапроса = "/getversion";
HTTPЗапрос = Новый HTTPЗапрос(СтрокаЗапроса);
Попытка
Результат = HTTPСоединение.Получить(HTTPЗапрос);
Если Результат.КодСостояния = 200 Тогда
Сообщить("Успешное подключение! Версия сервера: " + Результат.ПолучитьТелоКакСтроку());
ИначеЕсли Результат.КодСостояния = 404 Тогда
Сообщить("Ошибка 404: Ресурс не найден. Проверьте права пользователя и настройки веб-сервера.");
КонецЕсли;
Исключение
Сообщить("Ошибка связи: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
В данном примере мы используем метод Получить объекта HTTPСоединение. Обратите внимание, что передача логина и пароля внутри самой строки URL (через @) часто приводит к ошибкам интерпретации спецсимволов, поэтому использование параметров конструктора HTTPСоединение является предпочтительным и более безопасным методом.
Часто программисты сталкиваются с тем, что даже при верном адресе сервера возвращается ошибка 404. Проанализируем причины этой ситуации. В системе OkTell недостаточно просто включить HTTP-сервер; необходимо выполнить тонкую настройку прав доступа для пользователя, от имени которого выполняется запрос.
Основные шаги для устранения ошибки 404:
/getversion или /execsvcscript, должны вызываться от корня.Одной из главных задач интеграции является совершение звонка нажатием одной кнопки в 1С. В OkTell существует встроенный метод wp_autocallstart, но у него есть существенный недостаток: он требует активной сессии в приложении Oktell Desktop Client. Если ваша задача — работать через обычный IP-телефон или сторонний софтфон, нам потребуется другой подход.
Рассмотрим по шагам, как организовать звонок через серверный служебный скрипт execsvcscript. Этот метод позволяет серверу самостоятельно управлять звонком, не опираясь на запущенный клиентский софт.
1. Создание сценария в OkTell:
В редакторе сценариев OkTell создайте новый Служебный сценарий (например, с именем SvcScript1). Внутри сценария используйте компонент «Пуск вызова». В настройках компонента укажите:
startparam1).startparam2).2. Вызов сценария из 1С:
Теперь мы можем отправить HTTP-запрос, который запустит этот сценарий на выполнение. Посмотрим на пример кода:
&НаСервере
Процедура ПозвонитьИз1С(ВнутреннийНомер, НомерТелефона)
Адрес = "192.168.1.100";
Порт = 4055;
// Важно: кодируем параметры для URL, чтобы избежать проблем с символами
ПараметрыЗапроса = "name=SvcScript1"
+ "&startparam1=" + ВнутреннийНомер
+ "&startparam2=" + НомерТелефона
+ "&async=1"
+ "&timeout=10";
СтрокаЗапроса = "/execsvcscript?" + ПараметрыЗапроса;
HTTPСоединение = Новый HTTPСоединение(Адрес, Порт, "Логин", "Пароль");
HTTPЗапрос = Новый HTTPЗапрос(СтрокаЗапроса);
Результат = HTTPСоединение.Получить(HTTPЗапрос);
Если Результат.КодСостояния = 200 Тогда
Сообщить("Запрос на звонок успешно отправлен на сервер.");
КонецЕсли;
КонецПроцедуры
В этой схеме сервер сначала совершит вызов на внутреннее устройство сотрудника (IP-телефон или MicroSIP), и как только сотрудник снимет трубку, система начнет набор внешнего номера. Это полностью избавляет от необходимости держать открытым тяжелое приложение Oktell Client.
Чтобы интерфейс 1С был интерактивным, полезно знать текущее состояние сотрудников: свободен ли менеджер, разговаривает ли он или находится на перерыве. Для этого мы можем использовать метод getusersstates.
Этот метод возвращает XML-структуру со статусами всех пользователей. Разберем, как обработать эти данные в 1С:
&НаСервере
Функция ПолучитьСтатусПользователя(ИскомыйВнутреннийНомер)
// ... инициализация соединения ...
Запрос = Новый HTTPЗапрос("/getusersstates");
Ответ = HTTPСоединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Пока ЧтениеXML.Прочитать() Цикл
// Логика обхода XML узлов для поиска нужного пользователя
// В XML будут узлы с атрибутами ID, StateName, ExtNumber
Если ЧтениеXML.Имя = "User" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Внутренний = ЧтениеXML.ПолучитьАтрибут("ExtNumber");
Если Внутренний = ИскомыйВнутреннийНомер Тогда
Статус = ЧтениеXML.ПолучитьАтрибут("StateName");
Возврат Статус; // Например: "Разговор", "Свободен"
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат "Неизвестно";
КонецФункции
При реализации интеграции обратите внимание на следующие моменты, которые помогут сделать систему стабильной:
КодироватьСтроку с параметром СпособКодированияСтроки.URLInURIVariable при формировании параметров запроса. Это критично, если в именах сценариев или логинах используются кириллические символы.name метода execsvcscript вместо названия сценария (которое может измениться) лучше использовать его уникальный идентификатор (GUID), который можно найти в свойствах сценария в конфигураторе OkTell.Используя приведенные выше методики, мы можем построить гибкую и надежную систему телефонии, полностью интегрированную в бизнес-процессы медицинской организации или любого другого предприятия, использующего 1С.