Столкнувшись с отказом от поддержки 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С. Но пока строка фильтра только одна, в ближайших версиях попробую сделать список, чтобы получать от туда не одно событие по фильтру, а выборку по списку, а остальное игнорировать.
Другие мелкие изменения. Более подробно "новости" интерфейса описаны в инструкции.