Связь Asterisk и 1С, внешняя компонента
Разработка - Разработка внешних компонент
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Столкнувшись с отказом от поддержки 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.2018
Дошли руки немного обновить компоненту
Новая версия. Изменения:
- Компонента состоящая из двух библиотек обьеденина в одну. Т.е. теперь это одна dll, для подключения к 1С. Так же она подписана для уникальности имен. Что должно избавить от проблемы регистрации в системе. Теперь она регистрируется одним файлом. Проверено на Win 10 проблем с регистрацией не возникло. В связи с обьедниенением изменено имя, теперь AsteriskOne. Но внутри именование оставлено прежним, чтобы не переделывать код подключения в 1С.
- В предыдущей версии, когда Asterisk получал много сообщений, они могли теряться, т.к. глубина буфера для них не регулировалось. В связи с этим были добавлены методы
GetEventBufferDepth(); - Позволяет получить текущую глубину буфера для сообщений Asterisk
SetEventBufferDepth(int bufferdepth); - Позволяет установить текущую глубину буфера для сообщений Asterisk
CleanBuffer(); - Очистить буфер
Подбирать размер буфера нужно экспериментальным путем, т.к. это зависит от загрузки Asterisk.
- Добавлена возможность отправлять строковые AMI команды напрямую в Asterisk, затем обрабатывать ответы от него.
Т.к. структура данной компоненты уже несколько другая, добавляю ее как отдельную, чтобы сохранить возможность скачивания старой.
----------------------------------------------
01.03.2016
Новая версия. Изменения:
- Добавлена обработка события CDR, это событие которое выдает сообщение по окончению звонка с информацией о нем, длина, время снятия трубки и другое, далее будет попытка получить файл с записью или путь к нему, после записи звонка. Для того, чтобы событие работало в Астериске должны быть права на чтение CDR и включено отправление CDR в Manager т.е. передача через AMI
- Теперь обработку регулярными выражениями не нужно влючать дополнительно, если строка выражения заполнена оно накладывается если нет то нет.
-Добавлены текстовые комментарии на руском для событий кроме не обрабатываемых (Unhandled), включаются свойством Enabletextlabel, является вытесняющим при формировании сообщения.
- Добавлен обработчик всех событий Астериска, т.е. я например могу не знать всех событий которые нужно отловить и передать в 1С, тогда можно использовать это событие, при включении туда "валится" все, что сообщает сервер, можно фильровать по рег. выражению, как сообщения в событии, так и выбирать выдачу в 1С. Но пока строка фильтра только одна, в ближайших версиях попробую сделать список, чтобы получать от туда не одно событие по фильтру, а выборку по списку, а остальное игнорировать.
Другие мелкие изменения. Более подробно "новости" интерфейса описаны в инструкции.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка внешних компонент POS терминал Рабочее место Розничная торговля Разработчик Пользователь 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)
Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.
18300 руб.
30.05.2017 57934 12 71
Разработка внешних компонент Телефония, SIP Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)
5246 руб.
04.05.2018 52217 128 68
Разработка внешних компонент Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)
Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).
5084 руб.
12.05.2020 34982 147 100
Разработка внешних компонент Системный администратор Разработчик Стажер Бесплатно (free)
Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!
14.01.2025 8255 bayselonarrend 17
Разработка внешних компонент Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.
04.12.2024 13853 kovalevdmv 29
Разработка внешних компонент Разработчик 1С:Предприятие 8 Бесплатно (free)
А давайте запилим 8.3.26 до релиза, или оповещение с сервера...
19.02.2024 13262 starik-2005 39
Разработка внешних компонент Механизмы платформы 1С Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.
26.01.2024 13368 starik-2005 40
Инструментарий разработчика Разработка внешних компонент Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Пример взаимодействия 1С с Apach Kafka посредством внешней компоненты, разработанной на основе официальной библиотеки librdkafka (the Apache Kafka C/C++ client library).
22.11.2023 9427 156 ivan1703 26
- получение данных от компоненты по событиям Dial, Bridge, Hangup, Varset (для записи разговоров), Status;
- фильтры входящих событий по регулярным выражениям;
- выполнение произвольной команды в астериске.
Тут все это доступно? С удовольствием бы перешел на вашу компоненту, если это есть.
- получение данных от компоненты по событиям Dial, Hangup
- фильтры входящих событий по регулярным выражениям;
- отбор в сообщении для 1С по рег. выражению, чтобы не обрабатывать сообщение в 1С.
Например
regasm.exe "C:\Asterisk\AddIn.dll" /tlb /codebase
С какой версией Астериска у вас работает компонента?
У меня при подключении выдает ошибку:
Данные: 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)
Обработка заработала, спасибо! Удалось подключиться к Asterisk. В тестовой обработке при нажатии на кнопку |Событие|, идет вызов метода asEv() (в описании метода указано" Тестовое, не исп"). В результате компонента оповещает внешним событием форму обработки, и выводит одно из последних событий.
Вопрос: как сделать так, чтобы компонента оповещала форму о событиях по мере их поступление? вызывать asEv() по в обработчике ожидания? Тогда с каким интервалом, чтобы гарантировано не пропустить ничего?
Вроде, в тестовой обработки, все что нужно для этого - сделано:
Компонента.EnableCDREvent();
Компонента.EnableTextLabel = Истина;
Компонента.EnableUnhandledEvent();
что делать дальше?
Если работает тестовое asEv(), и событие приходит в 1С значит компонента работает.
Для того чтобы приходило оповещение о CDR (Компонента.EnableCDREvent()), должен быть соответствующим образом настроен Астериск, чтобы он отправлял CDR в Manager (например у меня по умолчанию не было), как это сделать должен знать спец. по Астериску, либо искать в Интернете. Лучше сначала попробовать на событии Dial например, оповещение должно приходить по звонку.
До этого использовали ROM_Asterisk.dll
Сервер Asterisk соответственно - настроен.
После вызова метода РежимПрослушивания(1) старой компоненты(ROM_Asterisk), внешние события сыпались автоматом.
Здесь же,этого не происходит.
В чем еще может быть причина?
Как уже писал для получения CDR через мою компоненту, необходима настройка Asterisk.
Для теста попробуйте убрать CDR и получить хотя-бы звонок
Компонента.EnableDialEvent();
Или инициализировать событие звонок при коннекте
Компонента.Connect("",,"","",Истина,Ложь);
Событие должно поступать в обработчик 1С, он должен быть прописан в свойствах формы как ВнешнееСобытие
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Сообщить("Источник: " + Источник);
Сообщить("Событие: " + Событие);
Сообщить("Данные: " + Данные);
КонецПроцедуры
Строки фильтрации должны быть пусты. Звонок фикс. стандартно и должно работать. Если нет, смотреть права пользователя который подключается на Asterisk`e
Убрал CDR, оставил только EnableDialEvent(). Результата - нет. Внешние события не приходят.
Звонить пробовал, звонок - проходит. при этом внешних событий, по прежнему нет.
Куда теперь копать?
Спасибо.
У меня обработка ТЕСТ видит только события звонок и положить трубку, так же было замечено, что если через Connect передать два последних параметра ложь и ложь, то потом никакими процедурами подключить прослушивание звонков нельзя. Вопрос: почему в процедуре Connect нет для CDR параметра? Можно ли добавить? Получается, что все события EnableEvent не включают прослушивание, а включается оно только Connect.
Попробуйте получить последнее исключение после включения, Компонента.LastExceptionMessage, может, ошибки внутри компоненты возникают.
Вопрос: почему в процедуре Connect нет для CDR параметра?
Потому, что так сделал на начальном этапе, но когда начало расти решил отказаться и все сделать методами вкл. откл., чтобы поток сообщений можно было регулировать.
Еще планирую убрать вывод с символьными метками, т.к. они могут пересекаться с символами рег. выражений и на мой взгляд это лишнее.
Вместо этого будет добавлен "Дикий вывод", т.е. на вход к фильтрации или без нее будет подаваться строка со всеми данными из Asterisk, т.к. можно настраивать параметры различные (в частности CDR), которые предугадать и описать не возможно.
...................
Результат = Компонента.Connect("_____,_____,______,________,ложь,ложь);
сообщить(Компонента.EnableDialEvent());
Сообщить(Компонента.LastExceptionMessage);
....................
Вывод на экран два сообщения:
Да
//пустое сообщение
Кнопка Событие выводит в строке Данные пустую строку
Пишу в процедуре вместо тех трех строк:
.....................
Результат = Компонента.Connect("_____,_____,______,________,истина,ложь);
..................
Кнопка Событие возвращает в строке Данные информацию о звонке.
Тестировала кучу раз. Не получается. Вывод: я не могу пользоваться CDR
Ответьте пож. на вопрос feoddor.
Спасибо
У кого не возникают события, выложите если можно права подключающегося пользователя из Астериск, версию Астериск.
Так же было бы интересно возникают-ли события при подключению к Астериск через Телнет под данным пользователем.
Я постараюсь в ближайшее время выложить программку которая получает данные с компоненты без 1С, но нужно время, чтобы от туда лишнее убрать.
выдает ошибку
ManagerError {DateReceived:16:51:05; Message:Invalid channel; Response:Error}
номера телефонов в тесте компоненты указываю внутренние двухзначные.
Если Не ПодключитьВнешнююКомпоненту("AddIn.SkaAsterisk") Тогда
Предупреждение("Не удалось загрузить компоненту");
Возврат Ложь;
КонецЕсли;
Вылезает сообщение "Не удалось загрузить компоненту". AddIn.SkaAsterisk в реестре зарегестрирован. В чем дело может быть?
Компонента AddIn.dll в архиве сабжа - неподписанная. У нее нет строгого имени. Поэтому у нас она не регилась bat-ом из архива же.
Делаем вот что: скачиваем Visual Studio Community. Там есть инструмент - командная строка разработчика. В этой командной строке выполняем последовательность команд, описанную здесь :
Далее меняем батник, как сказал сам автор темы - добавляем параметр codebase. Теперь он выглядит так:
@ECHO OFF
REM The following directory is for .NET 4.0
set DOTNETFX4=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX4%
echo ---------------------------------------------------
regasm.exe "AddIn.dll" /tlb /codebase
echo ---------------------------------------------------
ну и запускаем его из под командной строки. В моем случае - все зарегилось и 1с компоненту увидела. но почему-то не может к ней подключиться. копаю дальше. квест однако.
Регистрировать нужно в 2х ветках. Вот пример моего. Запускается из каталога с регистрируемой DLL
@echo off
setlocal
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "%~dp0NetObjetToIDispatch45.dll" /codebase
%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe "%~dp0NetObjetToIDispatch45.dll" /codebase
NetObjetToIDispatch45.dll замени на свою DLL
И запускай от админа
Изначально 1С не видела компоненту. Но после подписи сборок (пост 45) компонента обнаружилась 1С'кой. Однако работать не хочет. Ошибка:
Текст ошибки |
|---|
| Данные: System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.IO.FileLoadException: Не удалось загрузить файл или сборку "Asterisk.NET, Version=1.6.3.1, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Требуется сборка со строгим именем. (Исключение из HRESULT: 0x80131044)
в 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?
Всем спасибо за попытку помочь!
Но ИМХО сейчас смысла развивать ее нет, так как есть RESTfull Interface (ARI) и достаточно 1С научить работать с WebSocket, чтоб избавится от всего (ну или хоть от части) геморроя который разработчики получали вместе с ROM-Asterisk.
Да, и такую компоненту сделал именно создатель ROM-Asterisk, и продает ее за деньги ROM-WebSocket:
На гетхабе исходники лежат, а вот самой компоненты нет в открытом доступе?
Понятно что можно скомпилировать, но все же продакшн от создателя всегда надежнее собственного компилирования.... Вдруг параметры не те, или еще что :)
Хоть кому-нибудь удалось получить автоматически событие при входящем звонке? Если "да", то как?
при поднятии трубки в 1С у оператора ставится статус "Разговариваю по телефону", потом статус "Свободен"
а также автоматически создаётся, заполняется и открывается документ "Обращение" :)
как не помню уже, уже нету 7.7
Данные: 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 есть
При выполнении Connect не могу передать последние 2 логических параметра.
В семерке нет логического типа, но обычно для com-объектов true замещаем на -1, а false на 0. А тут, если указать 0, 1 либо -1 выдает ошибку:
Текст ошибки |
|---|
| System.ArgumentException: Невозможно преобразовать объект типа "System.Int32" к типу "System.Boolean".
в System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) в System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) в System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) в AddIn.AddIn.CallAsFunc(Int32 methodNum, Object& retValue, Object[]& pParams) |
Также свойства, имеющие логический тип (IsConnected, к примеру), возвращают пустое значение.
Event: Dial
SubEvent: Begin
в новой версии убрали SubEvent и стало :
Event: DialBegin
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 449903
Создание 28.01.16 18:10
Обновление 30.08.21 09:53
Просмотры 56949
Загрузки 300
Рейтинг
60
Комментарии 87
Код открыт Нет
Рубрики Разработка внешних компонент Телефония, SIP
Кому
Системный администратор
,
Разработчик
Тип файла Архив с данными
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Windows
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)