Интеграция 1С 8.2 и Asterisk (упр. формы)




Пример интеграции на управляемых формах.
Работа с телефонией в тонком клиенте.

Решение сделано на основе внешней компоненты ROM-Asterisk.dll от simplit

Огромное спасибо пользователю Олег Ризванов за его труд и бесценные комментарии.

 

Итак, перейдем к делу.

 

В: что это такое ?

О: Подсистема на управляемых формах, которую можно интегрировать почти в любую конфигурацию (как в типовую, так и в самопал).

 

В: Как это работает?

О: При запуске конфигурации инициализируется внешняя dll, далее через неё идёт подключение к АТС Asterisk. Возможность хранить для каждого конкретного пользователя 1С свои настройки для подключения к АТС (которых может быть несколько)

 

В: а если я захочу что-то исправить?

О: Разработка не представляет из себя ничего сложного. Функционал бесплатной панели телефонии для 1С и Asterisk перекочевал в модуль упр.приложения, пару общих модулей, а также добавлен один справочник (настройки подключения к АТС) и один регистр сведений (настройки АТС для пользователей)

 

В: как установитьинтегрировать?

О: Как сказано выше — разработка не представляет из себя ничего сложного. Можете «сравнитьобъединить…», а можете и ручками. Последний вариант, конечно предпочтительнее. Т.к. будете знать, куда копать если захотите что-то допилить, а работы всего на пару минут

 

Рассмотрим интеграцию подсистемы «Телефония» на типовой УТ 11. Блок объединения конфигурации рассматривать не будем — там всё просто.

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

Если для пользователя не заданы настройки

 

Далее, заходим в подсистему телефония и задаем настройки:

— в справочнике «Виды АТС» указываем настройки подключения к IP АТС

— в регистре сведений «Настройки пользователей АТС» указываем связку какой пользователь какую АТС использует, его персональный внутренний номер и контекст

После этого перезапускаем 1С.

Система попробует подключить внешнюю компоненту (dll). По умолчанию забит путь C:WindowsSystem32, если dll-ки там нет, то конфигурация попытается самостоятельно сохранить туда файлик ROM-Asterisk.dll

 

После этого, нужно запуститься в толстом клиенте. Это необходимо для того, чтобы 1C зарегистрировала внешнюю компоненту в реестре Windows (можете зарегить самостоятельно, тогда запуск в толстом клиенте не потребуется).

Опять запускаем 1С (теперь можно в тонком клиенте), если всё прошло успешно — вы увидите внизу всплывающие окна, о том что всё ОК 🙂

В противном случае, система выдаст вам сообщение об ошибке.

Алгоритм такой:

1) проверка настроек для данного пользователя

2) подключение внешней компоненты

3) инициализация объекта

4) подключение к АТС

 

Если какой-то этап завален, дальше не взлетит. О чём вам скажут сообщения об ошибке.

В: Как звонить (совершать исходящие вызовы)?

О: В общем модуле «вТелефонияКлиент» есть экспортная процедура «Звонить» с одним единственным параметром, куда передаётся номер телефона. Завязывайте на неё любую кнопку в вашей конфигурации

 

Обработку входящего звонка допиливайте самостоятельно в модуле упр.приложения через процедуру «ОбработкаВнешнегоСобытия»

Далее, обработка звонков ограничивается только вашей фантазией. Можно завязать любое логирование событий, вплоть до фиксирования длительности звонка и т.д. и т.п.

Enjoy 🙂

P.S. на самую лучшую в мире разработку не претендую, вполне возможны косячки Tongue Out

24 Comments

  1. oleg.rizvanov

    Вообще-то, я Олег Ризванов, а не Олег Ривзанов 🙂

    Reply
  2. CeHbKA

    (1)упс, очепятался :[

    исправил 🙂

    Reply
  3. CagoBHuK

    Управляемые формы подразумевают работы и в Linux-клиенте в том числе. Ваша разработка работает в нем? А в браузере?

    Reply
  4. CeHbKA

    (3)

    1 — управляемые формы работают в линухе и веб-клиенте

    2 — внешняя компонента (она же ROM-Asterisk.dll) написана с помощью COM-технологии

    3 — внешняя компонента не работает в веб-клиенте и в линухе тоже, потому что она COM

    Надеюсь ответил на все вопросы 🙂

    Reply
  5. CagoBHuK

    (4) В таком случае принципиальных отличий от прочих разработок на эту тему не вижу. Серьезное ограничение — работа только в винде. Плюса не заслуживает.

    Reply
  6. CeHbKA

    Вы кажется невнимательно читаете. Причем, очень часто. Внешняя компонента — не моя разработка.

    А по поводу плюса — от Вас и не надо 😉

    Reply
  7. Жолтокнижниг

    а что нового по сравнению с панелью от simplit, очередная гуёвая переработка?

    Reply
  8. CeHbKA

    (7) в описании к публикации есть вся необходимая информация. Гуёвая или негуёвая — каждый для себя решает сам. Качайте — смотрите.

    Reply
  9. oleg.rizvanov

    Тихо и незаметно Simplit выпустил NativeAPI-версию ROM-Asterisk + новый релиз COM-версии

    Из нового:

    — Поддерживается сторона сервера

    — Можно нарастить глубину очереди событий

    — Можно перенаправлять ошибки во внешнее событие

    Возможно, стоит пересобрать эту обработку под ROM-Asterisk-Native?

    Reply
  10. CeHbKA

    (9) oleg.rizvanov, ого-го! Нифигасебе 🙂

    Вот это новость 🙂

    Возможно, стоит пересобрать эту обработку под ROM-Asterisk-Native?

    Конечно стоит, ща шапку подредактирую и займусь в свободное время

    Спасибо!

    Reply
  11. necsoft

    Доброй ночи!

    Беру демо конфу — все работает. Встраиваю в свою (самописная) через сравнение и объединение и вылетает на Функция Login(Логин,Пароль), а именно при выполнении Если глТелефония.Подключено=1 Тогда

    // Авторизация в Asterisk Manager API
    //
    // Возвращаемое значение: 1-команда отправлена, 0-нет
    //
    &НаКлиенте
    Функция Login(Логин,Пароль)
    //    ДокументОбъект = РеквизитФормыВЗначение(«Объект»);
    Если ПустаяСтрока(Логин) Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = «Login(). Не указан параметр <Логин>»;
    Сообщение.Сообщить();
    Возврат 0;
    КонецЕсли;
    
    Если ПустаяСтрока(Пароль) Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = «Login(). Не указан параметр <Пароль>»;
    Сообщение.Сообщить();
    Возврат 0;
    КонецЕсли;
    
    Если глТелефония.Подключено=1 Тогда
    CRLF = Chars.CR + Chars.LF;
    СтрокаКоманды= «Action: Login»+CRLF+
    «Username: «+Логин+CRLF+
    «Secret: «+Пароль+CRLF+CRLF;
    Возврат ВыполнитьКоманду(СтрокаКоманды);
    КонецЕсли;
    
    КонецФункции // Login

    Показать

    Буду благодарен за помощь!

    Reply
  12. CeHbKA

    (11) necsoft, видимо объединили так 🙂

    Посмотрите отладчиком, что из себя представляет значение глТелефония во время ошибки

    Reply
  13. Rustig

    (0) добрый день. где можно скачать внешнюю компоненту ROM-Asterisk.dl ?

    Reply
  14. CeHbKA

    (13) Rustig, привет

    компонента вшита в конфигурацию + в шапке есть ссылка на сайт разработчика компоненты

    Reply
  15. alex_tmn

    (11)Доброго дня, подскажите, не нашли ли вы решение вашей проблемы?

    В моей конфигурации аналогичная проблема

    Reply
  16. user718181

    Что за «профессионал» писал эту обработку? Ошибка на ошибке. ПодключитьОбработчикОжидания(«вТелефонияКлиент.Автоподключение»,30,Ложь); в глобальном модулe не работает.

    Reply
  17. user718181

    ОтключитьОбработчикОжидания(«ПереподключитьТелефонию») — в модуле управляемого приложения это что вообще? Даже процедуры такой нет в конфе

    Reply
  18. CeHbKA

    (16) писал я. 5 лет назад.

    Из всех скачавших, ошибка на ошибке, только у вас.

    Если не нравится — сделайте сами.

    Если можете сами — зачем вам чужое?

    P.S. вежливость — залог успеха

    P.P.S. не думал, что подобные вещи до сих пор актуальны

    P.P.P.S. удачи вам в нелёгкой работе, дальше будет ещё «веселее» 🙂

    Reply
  19. user718181

    (18) Самому и пришлось писать, потому — что в том виде, как это выложено — это не взлетит

    Reply
  20. Rustig

    (19) возьмите стержень кода, остальное доделаете, будьте Профи!

    Reply
  21. maksimov1c

    (11)Доброго дня удалось решить проблему? тоже самое зависает и все

    Reply
  22. maksimov1c

    Почему он не отрабатывает Если глТелефония.Подключено=1 Тогда изначально глТелефония — это наша dll, после того как отладчиком смотришь «глТелефония.Подключено» , глТелефония стает пустой.

    Reply
  23. maksimov1c
     ТекущийРежим = глТелефония.РежимПрослушивания;
    // корректируем принимаемый параметр
    Режим = ?(Режим<0,0,Режим);
    Режим = ?(Режим>1,1,Режим);
    Если Режим — ТекущийРежим > 0 Тогда
    глТелефония.РежимПрослушивания(Режим);
    КонецЕсли;
    Возврат глТелефония.РежимПрослушивания;
    

    Показать

    Зависает dll зарег

    Reply
  24. maipochta

    Библиотека инициализируется на клиенте, т.е. клиент обязательно на Windows, а сервер 1с можно на Linux использовать? Или все только на Windows?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *