Столкнувшись с отказом от поддержки ROM-Asterisk, и ее проблемами в работе с 1С:Предприятием 8.3.6.
Для своих задач было решено написать свою компоненту с блек-джеком как минимум.
Компонента написана на C# для .Net 4й фреймворк. Компонента состоит из 2х библиотек Asterisk.NET.dll — для взаимодействия с Asterisk и AddIn.dll — обертка для 1С.
На текущий момент компонента умеет:
- Подключаться и отключаться от Asterisk, он предварительно должен быть настроен
- Получать внутри события Dial — Звонок и Hangup — Положить трубку и отправлять их во ВнешнееСобытие 1С, т.е. работает асинхронно и 1С не подвисает.
- Фильтровать события внутри компоненты с помощью регулярных выражений, чтобы в 1Ску не поступало лишних.
- Выбирать из сообщений только нужную информацию, с помощью рег. выражений, чтобы потом не обрабатывать в 1Ске
- При событии Звонок передается "ОпределенныйНомер;Откуда;Куда" могут быть включены добавочные символы разделители, для выборки вида "!ОпределенныйНомер;@Откуда;#Куда"
- Звонить на внешние и внутренние номера по каналу трубки, т.е. на телефоне пользователя раздается звонок, он снимает трубку и соеденяется с набранным в 1Ске номером.
В архиве компонента, пример для 1С (1С:Предприятие 8.3 (8.3.6.2363) тестировалось), программа для тестировани регулярных выражений, инструкция по установке и описание методов и свойств.
Компонента в любом случае будет развиваться, т.к. необходима для внутреннего пользования, но если она будет интересна, то жду ваших замечаний и предложений. Сейчас самое начало ее развития, поэтому критику прошу конструктивную, т.к. пока она под локальные задачи, но есть желание ее развивать и сделать более универсальной.
————————————————
12.09.2024
Дошли руки немного обновить компоненту
Новая версия. Изменения:
— Компонента состоящая из двух библиотек обьеденина в одну. Т.е. теперь это одна dll, для подключения к 1С. Так же она подписана для уникальности имен. Что должно избавить от проблемы регистрации в системе. Теперь она регистрируется одним файлом. Проверено на Win 10 проблем с регистрацией не возникло. В связи с обьедниенением изменено имя, теперь AsteriskOne. Но внутри именование оставлено прежним, чтобы не переделывать код подключения в 1С.
— В предыдущей версии, когда Asterisk получал много сообщений, они могли теряться, т.к. глубина буфера для них не регулировалось. В связи с этим были добавлены методы
GetEventBufferDepth(); — Позволяет получить текущую глубину буфера для сообщений Asterisk
SetEventBufferDepth(int bufferdepth); — Позволяет установить текущую глубину буфера для сообщений Asterisk
CleanBuffer(); — Очистить буфер
Подбирать размер буфера нужно экспериментальным путем, т.к. это зависит от загрузки Asterisk.
— Добавлена возможность отправлять строковые AMI команды напрямую в Asterisk, затем обрабатывать ответы от него.
Т.к. структура данной компоненты уже несколько другая, добавляю ее как отдельную, чтобы сохранить возможность скачивания старой.
———————————————-
01.03.2024
Новая версия. Изменения:
— Добавлена обработка события CDR, это событие которое выдает сообщение по окончению звонка с информацией о нем, длина, время снятия трубки и другое, далее будет попытка получить файл с записью или путь к нему, после записи звонка. Для того, чтобы событие работало в Астериске должны быть права на чтение CDR и включено отправление CDR в Manager т.е. передача через AMI
— Теперь обработку регулярными выражениями не нужно влючать дополнительно, если строка выражения заполнена оно накладывается если нет то нет.
-Добавлены текстовые комментарии на руском для событий кроме не обрабатываемых (Unhandled), включаются свойством Enabletextlabel, является вытесняющим при формировании сообщения.
— Добавлен обработчик всех событий Астериска, т.е. я например могу не знать всех событий которые нужно отловить и передать в 1С, тогда можно использовать это событие, при включении туда "валится" все, что сообщает сервер, можно фильровать по рег. выражению, как сообщения в событии, так и выбирать выдачу в 1С. Но пока строка фильтра только одна, в ближайших версиях попробую сделать список, чтобы получать от туда не одно событие по фильтру, а выборку по списку, а остальное игнорировать.
Другие мелкие изменения. Более подробно "новости" интерфейса описаны в инструкции.
Добрый день!
Из хотелок:
1. Запись разговора — получение файла записи в 1С
2. Конференция
3. Подключение к разговору — т.н. «прослушка» разговора онлайн
Реально?
«… ее проблемами в работе с 1С:Предприятием 3.6…» это чего за платформа?
(2) 8.3.6 конечно же
Вот кто бы OpenSource версию опубликовал, да на C++ — цены бы не было..
(0)http://infostart.ru/public/236223/ не? не пробовали? И я так понимаю это COM-компонента?
(4) Infactum, Могу выложить свою реализацию, но в плюсах я не большой специалист
(1) siddy, Посмотрим как писал развитие в планах
(5) Жолтокнижниг, 1. Не пробовал, спасибо, интересно будет посмотреть.
2. Да это Com, с волшебным NativeAPI и как его связать с .Net C# сейчас разбираюсь.
(7) Есть мнение, что никак. C# только COM.
а оно будет работать в 1С 7.7 ?
В компоненте ROM-Asterisk используем следующее:
— получение данных от компоненты по событиям Dial, Bridge, Hangup, Varset (для записи разговоров), Status;
— фильтры входящих событий по регулярным выражениям;
— выполнение произвольной команды в астериске.
Тут все это доступно? С удовольствием бы перешел на вашу компоненту, если это есть.
Библиотеки AddIn.dll и Asterisk.NET.dll 32-х или 64-х разрядные? После успешной регистрации в ОС 64-х Windows 8.1 не удается подключить компоненту в обработке «ТестКомпоненты». Регил под правами админа, в 1С зашел тоже под правами админа. Что я делаю не так?
(11) xorg_c, попробуйтеhttp://infostart.ru/public/69986/
(8) Жолтокнижниг, буду пробовать обертку на C++ и другие варианты.
(11) xorg_c, Библиотеки собраны под любой процессор. Если честно, то на 32х я не пробовал еще. Для x64 проверялось на Win7 и Win10. Возможно там в файлах регистрации есть недочет. Совместно к ключу /tlb нужно добавить /codebase
Например
regasm.exe «C:AsteriskAddIn.dll» /tlb /codebase
(10) gubanoff, Пока нет. Но есть планы на развитие. Что есть сейчас.
— получение данных от компоненты по событиям Dial, Hangup
— фильтры входящих событий по регулярным выражениям;
— отбор в сообщении для 1С по рег. выражению, чтобы не обрабатывать сообщение в 1С.
BigTaur, пробовал, при добавлении в Components пишет: «Один или несколько файлов не содержат ни компонентов, ни библиотек типов. Установить их нельзя.» Так же пробовал через обертку уже зарегистрированных компонентов. Они добавились , но при обращении к ним через «ПодключитьВнешнююКомпоненту(IDComp)» выдает «ложь». Собери пжаста для 64-х серва
(16) xorg_c, Какая точно операционка, напиши, я посмотрю.
Добрый день.
А набор доп номера/ов у вас реализован?
К примеру звоним 123-45-67 потом пауза и 0, пауза и 2
Добрый день.
С какой версией Астериска у вас работает компонента?
У меня при подключении выдает ошибку:
Данные: Asterisk.NET.Manager.ManagerException: Unknown Asterisk version 1.8.27
at Asterisk.NET.Manager.ManagerConnection.determineVersion()
at Asterisk.NET.Manager.ManagerConnection.login(Int32 timeout)
at AddIn.SkaAsterisk.Connect(String Asterisk_Host, Int32 Asterisk_Port, String Asterisk_Login, String Asterisk_Loginpwd, Boolean DialEvent, Boolean HangupEvent)
(20) alexander.nesterenko,
Выложил версию с исправлением данной ошибки, при проверке версии Asterisk’а. Попробуйте, если не трудно напишите заработало или нет, т.к. у меня не ваша версия.
(21)
Обработка заработала, спасибо! Удалось подключиться к Asterisk. В тестовой обработке при нажатии на кнопку |Событие|, идет вызов метода asEv() (в описании метода указано» Тестовое, не исп»). В результате компонента оповещает внешним событием форму обработки, и выводит одно из последних событий.
Вопрос: как сделать так, чтобы компонента оповещала форму о событиях по мере их поступление? вызывать asEv() по в обработчике ожидания? Тогда с каким интервалом, чтобы гарантировано не пропустить ничего?
Вроде, в тестовой обработки, все что нужно для этого — сделано:
Компонента.EnableCDREvent();
Компонента.EnableTextLabel = Истина;
Компонента.EnableUnhandledEvent();
что делать дальше?
(22) alexander.nesterenko,
Если работает тестовое asEv(), и событие приходит в 1С значит компонента работает.
Для того чтобы приходило оповещение о CDR (Компонента.EnableCDREvent()), должен быть соответствующим образом настроен Астериск, чтобы он отправлял CDR в Manager (например у меня по умолчанию не было), как это сделать должен знать спец. по Астериску, либо искать в Интернете. Лучше сначала попробовать на событии Dial например, оповещение должно приходить по звонку.
(23)
До этого использовали ROM_Asterisk.dll
Сервер Asterisk соответственно — настроен.
После вызова метода РежимПрослушивания(1) старой компоненты(ROM_Asterisk), внешние события сыпались автоматом.
Здесь же,этого не происходит.
В чем еще может быть причина?
Здравствуйте!
У меня обработка ТЕСТ видит только события звонок и положить трубку, так же было замечено, что если через Connect передать два последних параметра ложь и ложь, то потом никакими процедурами подключить прослушивание звонков нельзя. Вопрос: почему в процедуре Connect нет для CDR параметра? Можно ли добавить? Получается, что все события EnableEvent не включают прослушивание, а включается оно только Connect.
(24) alexander.nesterenko, К сожалению не знаю как работает ROM_Asterisk.dll и учитывая, что ее поддержка прекращена вероятно не узнаю именно поэтому пришлось заниматься собственной разработкой на основе различных решений.
Как уже писал для получения CDR через мою компоненту, необходима настройка Asterisk.
Для теста попробуйте убрать CDR и получить хотя-бы звонок
Компонента.EnableDialEvent();
Или инициализировать событие звонок при коннекте
Компонента.Connect(«»,,»»,»»,Истина,Ложь);
Событие должно поступать в обработчик 1С, он должен быть прописан в свойствах формы как ВнешнееСобытие
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Сообщить(«Источник: » + Источник);
Сообщить(«Событие: » + Событие);
Сообщить(«Данные: » + Данные);
КонецПроцедуры
Строки фильтрации должны быть пусты. Звонок фикс. стандартно и должно работать. Если нет, смотреть права пользователя который подключается на Asterisk`e
(25) Julz, Странно, специально сделал проверку вкл., откл событий все события включаются и отключаются с помощью методов Enable[EventName]Event компоненты. Включение производил после коннекта к Астериску.
Попробуйте получить последнее исключение после включения, Компонента.LastExceptionMessage, может, ошибки внутри компоненты возникают.
Вопрос: почему в процедуре Connect нет для CDR параметра?
Потому, что так сделал на начальном этапе, но когда начало расти решил отказаться и все сделать методами вкл. откл., чтобы поток сообщений можно было регулировать.
Так же в ходе тестирования обнаружил, что когда событий одновременно много, то часть из них «теряется», вероятно 1Ска не успевает их обрабатывать, либо они как-то одновременно приходят, этот момент сейчас изучается.
Еще планирую убрать вывод с символьными метками, т.к. они могут пересекаться с символами рег. выражений и на мой взгляд это лишнее.
Вместо этого будет добавлен «Дикий вывод», т.е. на вход к фильтрации или без нее будет подаваться строка со всеми данными из Asterisk, т.к. можно настраивать параметры различные (в частности CDR), которые предугадать и описать не возможно.
Пишу процедуру Соединить в форме тестовой обработки:
……………….
Результат = Компонента.Connect(«_____,_____,______,________,ложь,ложь);
сообщить(Компонента.EnableDialEvent());
Сообщить(Компонента.LastExceptionMessage);
………………..
Вывод на экран два сообщения:
Да
//пустое сообщение
Кнопка Событие выводит в строке Данные пустую строку
Пишу в процедуре вместо тех трех строк:
…………………
Результат = Компонента.Connect(«_____,_____,______,________,истина,ложь);
………………
Кнопка Событие возвращает в строке Данные информацию о звонке.
Тестировала кучу раз. Не получается. Вывод: я не могу пользоваться CDR
(26) пишу от имени alexander.nesterenko (именно я занимаюсь разработкой).
Убрал CDR, оставил только EnableDialEvent(). Результата — нет. Внешние события не приходят.
Звонить пробовал, звонок — проходит. при этом внешних событий, по прежнему нет.
Куда теперь копать?
Спасибо.
Уважаемый BigTaur.
Ответьте пож. на вопрос feoddor.
Спасибо
(28)
Приветствую!
Присоединяюсь к 30 и 31.
Плюс ещё вопрос: Почему компонента постоянно перелогинивается?
ПыСы Компонента.asEv() — отрабатывает норм.
А вот при приходе звонка — ничего не проявляется.
Я так понимаю, что автор «пропал». Печально очень.
🙂 Нет, «не пропал», но сыграли аврал на работе и пока времени не хватает.
У кого не возникают события, выложите если можно права подключающегося пользователя из Астериск, версию Астериск.
Так же было бы интересно возникают-ли события при подключению к Астериск через Телнет под данным пользователем.
Я постараюсь в ближайшее время выложить программку которая получает данные с компоненты без 1С, но нужно время, чтобы от туда лишнее убрать.
Добрый день, все работает хорошо, но я с толкнулся с проблемой мне нужно сделать подключение через сервер но подключитьвнешнююкомпаненту не работает в серверном режиме, новый comобъект ругается что AddIn.SkaAsterisk не зареган Connector= Новый COMОбъект(«AddIn.SkaAsterisk»);по причине:-2147221164(0x80040154): Class not registered, но я его зарегистрировал кто нибудь на сервер не переводи??( windows server 2003)
Версия Asterisk: 5.211.65-12
Права пользователя- ALL (точнее все галки, кроме ALL)
Я правильно понял, что компонента работает с Астериском по AMI?
В таком случае пакеты на приеме могут теряться по причине малого размера буфера очереди событий.
Обратите внимание на
HRESULT SetEventBufferDepth(long lDepth)
Добрый день! Под Win7 платформа 8.3.8 все запустилось и работает отлично. Под Win8 получаю ошибку «Не удалось загрузить компоненту», Microsoft.NET установлен, компонента в системе зарегистрирована. Что я сделал не так?
Добрый день, судя по bat-ку нужен именно
NET Framework v 4.0.30319 ?
на гитхабе не хотите выложить?
(40) TeMochkiN, могу выложить свою, на Native API публиковать тут не хочу, ибо не очень написано как по мне, но с нашей задачей в организации справляется)
Будет ли работать эта компонента по протоколу SCCP? Еще вопрос: при отправке команды звонка, соединение сразу проходит или нужно снимать трубку?
проконсультируйте плиз. слушать астериск получается, а звонки выполнять нет.
выдает ошибку
ManagerError {DateReceived:16:51:05; Message:Invalid channel; Response:Error}
номера телефонов в тесте компоненты указываю внутренние двухзначные.
Скачали обратку и прилагающиеся файлы. Windows10,64 разрядная. Зарегистрировали dll-ки, сгенерился файл AddIn.tlb. При запуске прилагающейся обработки 1С при попытке подключить компоненту вот в этом фрагменте:
Если Не ПодключитьВнешнююКомпоненту(«AddIn.SkaAsterisk») Тогда
Предупреждение(«Не удалось загрузить компоненту»);
Возврат Ложь;
КонецЕсли;
Вылезает сообщение «Не удалось загрузить компоненту». AddIn.SkaAsterisk в реестре зарегестрирован. В чем дело может быть?
Разобралась, напишу, вдруг кому пригодится.
http://itw66.ru/blog/c_sharp/502.html
Компонента AddIn.dll в архиве сабжа — неподписанная. У нее нет строгого имени. Поэтому у нас она не регилась bat-ом из архива же.
Делаем вот что: скачиваем Visual Studio Community. Там есть инструмент — командная строка разработчика. В этой командной строке выполняем последовательность команд, описанную здесь :
Далее меняем батник, как сказал сам автор темы — добавляем параметр codebase. Теперь он выглядит так:
@ECHO OFF
REM The following directory is for .NET 4.0
set DOTNETFX4=%SystemRoot%Microsoft.NETFrameworkv4.0.30319
set PATH=%PATH%;%DOTNETFX4%
echo —————————————————
regasm.exe «AddIn.dll» /tlb /codebase
echo —————————————————
ну и запускаем его из под командной строки. В моем случае — все зарегилось и 1с компоненту увидела. но почему-то не может к ней подключиться. копаю дальше. квест однако.
Откуда запускаешь, С клиента 32,64 разрядного, С сервера?
Регистрировать нужно в 2х ветках. Вот пример моего. Запускается из каталога с регистрируемой DLL
@echo off
setlocal
%SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe «%~dp0NetObjetToIDispatch45.dll» /codebase
%SystemRoot%Microsoft.NETFramework64v4.0.30319RegAsm.exe «%~dp0NetObjetToIDispatch45.dll» /codebase
NetObjetToIDispatch45.dll замени на свою DLL
И запускай от админа
(46) Добрый день! Не помогает ни Ваш совет, ни рекомендации из поста (45). Под Win7 компонента прекрасно работает, нет никаких нареканий. Попытки запустить под Win10 продолжаются уже несколько месяцев.
Изначально 1С не видела компоненту. Но после подписи сборок (пост 45) компонента обнаружилась 1С’кой. Однако работать не хочет. Ошибка:
в AddIn.SkaAsterisk.Connect(String Asterisk_Host, Int32 Asterisk_Port, String Asterisk_Login, String Asterisk_Loginpwd, Boolean DialEvent, Boolean HangupEvent)
— Конец трассировки внутреннего стека исключений —
в System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
в AddIn.AddIn.CallAsFunc(Int32 methodNum, Object& retValue, Object[]& pParams)
Подскажите кто-нибудь как добиться работы под Win10?
Пиши изготовителю
(48) Списывались… К сожалению он прекратил работу над этим проектом(
Надо смотреть зависимости. Возможно не все сборки подписаны либо прав не хватает на папку.
Часто если из архива нужно флаг только для чтения или чего там убрать. Посмотри
Разблокировать
http://www.oszone.net/27842/Windows_10_unblock_file
(50) Проверил. По Вашему совету. Блокировок не обнаружил. Флаг «Только чтение» снял. Все заново проделал: отменил регистрацию, заново подписал, зарегистрировал. Ошибка та же. Видимо все-таки компоненты как-то не так подписываются. Хотя по инструкции (45) выдает успешно подписаны и регистрация проходит успешно.
(51) А нельзя в Win10 изменить политики безопасности? Чтобы отключать строгую подпись компонент?
Посмотриhttp://stackoverflow.com/questions/30920186/nunit-unable-to-find-assembly-but-console-app-can
На всякий случай обнови .Net Frameworkhttps://www.microsoft.com/ru-ru/download/details.aspx?id=49981
Хотя сейчас 4.6.2
(54)(55) Включил логирование по по советам из ссылки. Ситуация такая: библиотека AddIn.dll из этого проекта подключается успешно. А вот именно Asterisk.NET.dll не может подключить по причине отсутствия строго имени — подписать ее корректно не имея исходников не получается. Дальнейшее гугление и ответы из стаковерфлоу говорят о том, что нужно связываться с разработчиком,получать исходники и подписывать ее у себя. Если я все правильно понял. Сейчас еще раз пытаюсь связаться с разработчиком. Если побежу проблему отпишусь.
Всем спасибо за попытку помочь!
Можешь попробоватьhttps://github.com/AsterNET/AsterNET
.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
и
На примере
1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp
Классный шаблон
Поддерживается ли платформа 1С:Предприятие 8.3 (8.3.8.2027)?
(59) Ограничений по платформе нет. Есть проблема с подключением компоненты по Win10. Под Win7 все работает на последней версии платформы
Подскажите а как установить фильтр по телефону? Ну что бы выплывали не все события звонков а только для нужного аппарата?
На windows server 2016 и платформе 1С 8.3.10 работать будет?
Данная компонента может работать с 1С 7.7 ?
(65) В 7.7 не проверялась. Но т.к. это com-компонента, а 7.7 умеет подключаться по com. То по идее должно работать.
ROM-Asterisk изначально была ущербна так как в нее как из ведра лилась вся инфа с Asteriskа. Но раз уж на то пошло то на гитхабе есть ее форк который нормально работает с 8.3.6 и выше (тестировалась на windows server 2016 / 1С 8.3.10 и 1С 8.3.11):
https://github.com/shachneff/BROM-Asterisk-Native
Но ИМХО сейчас смысла развивать ее нет, так как есть RESTfull Interface (ARI) и достаточно 1С научить работать с WebSocket, чтоб избавится от всего (ну или хоть от части) геморроя который разработчики получали вместе с ROM-Asterisk.
https://simplit.com.ua/blog/?p=1018
Да, и такую компоненту сделал именно создатель ROM-Asterisk, и продает ее за деньги ROM-WebSocket:
Коллеги!
Хоть кому-нибудь удалось получить автоматически событие при входящем звонке? Если «да», то как?
С уважением.
(68) я сделал на 1С 7.7
при поднятии трубки в 1С у оператора ставится статус «Разговариваю по телефону», потом статус «Свободен»
а также автоматически создаётся, заполняется и открывается документ «Обращение» 🙂
как не помню уже, уже нету 7.7
Я никак не могу получить событие «поднятие трубки» (или, если я правильно понимаю «Bridge Link») События «Звонок» и «Положили трубку» приходят исправно.
Добрый день. Я так понимаю что у кого то приходят внешние события при звонке, а у кого нет. Кто нибудь знает причину?
Нашел проблему почему не было внешних событий в 1С от данной компаненты. dll надо регистрировать с ключем /tlb, а не с /codebase.
Может кто-нибудь прислать библиотеку на Dobryak2010@ngs.ru
Кто нибудь разобрался как с этой библиотекой позвонить на доп.номер, к примеру 88001000800 с доп.номером 2 )
обработка выпадает с ошибкой:
Данные: Asterisk.NET.Manager.AuthenticationFailedException: Authentication failed
в Asterisk.NET.Manager.ManagerConnection.login(Int32 timeout)
в AddIn.SkaAsterisk.Connect(String Asterisk_Host, Int32 Asterisk_Port, String Asterisk_Login, String Asterisk_Loginpwd, Boolean DialEvent, Boolean HangupEvent)
Айпи адрес сервера, порт, логин и пароль всё проверил на несколько раз…Учётка в Ami есть
По Авторизации разобрался, а вот позвонить не получается на городской номер, звонок проходит только на внутренний.
(78)сорри, за вложенность … не специально 🙂
На гетхабе исходники лежат, а вот самой компоненты нет в открытом доступе?
Понятно что можно скомпилировать, но все же продакшн от создателя всегда надежнее собственного компилирования…. Вдруг параметры не те, или еще что 🙂
Скажите плиз, какую панель телефонии рекомендуете использовать?
Добрый день всем. Где можно взять компоненту ROM-Asterisk.dll для 1cv77?
(81) Именно про ROM-Asterisk.dll не подскажу, но Com компонента она на то и com, что методы у нее внутри, нужно только подключить ее. 1Cv77 работу с Com умеет, так, что теоретически может заработать и моя. Правда не проверял, но если будет интерес напишите можно будет попробовать проверить на подключение и авторизацию.
Возможна интеграция в нашу конфигурацию? Хеликс:Автомойка и шиномонтаж, редакция 2.0 (2.0.20.1) управляемые формы+ нужен отчет