Вход | Регистрация
    1  2  3   
1С:Предприятие :: 1С:Предприятие 8 общая

Пример интеграции 1С и АТС типа Asterisk штатными средствами 1С

Пример интеграции 1С и АТС типа Asterisk штатными средствами 1С
Я
   ChMikle
 
19.10.20 - 15:21
У кого-нибудь есть в свободном доступе что-то типа http://catalog.mista.ru/public/1025458/
Или примеры работы в виде кода ?
   ChMikle
 
101 - 23.10.20 - 10:41
(101) Заработало , спасибо огромное всем кто откликнулся !!!  
ЗЫ не тот IP в первом тесте указал !:))
   ChMikle
 
102 - 23.10.20 - 10:42
Йохохо хотелось бы отдельно выразить благодарность за отзывчивость !!!!
   ChMikle
 
103 - 23.10.20 - 10:46
Есть еще пара вопросов в продолжение этой темы . Получается при вызове надо взять трубку от звонящего или в приложении подтвердить звонок , а как-то можно все это приженить через 1С . Т.е. тупо сидит оператор с микрофоном и наушниками , нажимает кнопку позвонить , вызывается команда звонка по телефонному номеру
   Йохохо
 
104 - 23.10.20 - 11:50
   ChMikle
 
105 - 23.10.20 - 11:53
(104) записать разговор и потом куда-то сохранить , это должно быть 2 команды ? Что-то типа записать , и потом сохранить куда-то ? где посмотреть параметры , а еще лучше пример использования этих команд ?
   Йохохо
 
106 - 23.10.20 - 12:28
(105) астер пишет, у меня поверх freepbx и это мышкой настраивается, у вас как админ настроил, в команды астера я не углублялся
   ChMikle
 
107 - 23.10.20 - 12:33
(106) т.е пишется в астериксе, а можно по каким-то параметрам эту запись из астерикса получить , так получается ?
   Йохохо
 
108 - 23.10.20 - 12:37
(107) астер вроде не умеет отдавать, надо брать из папки как то
   ChMikle
 
109 - 23.10.20 - 12:37
(108) он пишет в папку ?
   Йохохо
 
110 - 23.10.20 - 12:39
(109) /vsr/spool/asterisk/monitor и там год/ме сяц/дата
   Йохохо
 
111 - 23.10.20 - 12:42
имя примерно такое
exten-Внутренний-Внешний-20201023-114301-1603442556.62.wav
   ChMikle
 
112 - 23.10.20 - 12:43
(111) понял , пошел ковырять .
ЗЫ еще раз спасибо за помощь :)
   ChMikle
 
113 - 23.10.20 - 15:35
ИМХО , должна быть команда в астерикс по AMI которая воспроизводила бы запись разговора по ID ?
   ChMikle
 
114 - 23.10.20 - 15:55
вроде нашел 
Функция ЗаписьПрослушать(Знач ИмяФайла="") Экспорт;
    CRLF=Chars.CR+Chars.LF;
    Протокол="SIP/";
    ВнутреннийНомер="902";
    Приоритет="1";
    Таймаут="30000";
 
    ИмяФайла=СтрЗаменить(ИмяФайла,".gsm","");
    ИмяФайла=СтрЗаменить(ИмяФайла,".wav","");
    Приемник="s";
    Источник=Протокол+ВнутреннийНомер;
    КонтекстЗаписи="1c-playfile";
    ИДНомера="1c-playfile";
    СтрокаПерем="MSG1="+ИмяФайла+",COUNT=1";
 
    ТекстКоманды="Action: Originate"+CRLF+
    "Channel: "+Источник+CRLF+
    "Context: "+КонтекстЗаписи+CRLF+
    "Exten: "+Приемник+CRLF+
    "Priority: "+Приоритет+CRLF+
    "Callerid: "+ИДНомера+CRLF+
    "Timeout: "+Таймаут+CRLF+
    "Variable: "+СтрокаПерем+CRLF;
 
    Телефония.ВыполнитьКоманду(ТекстКоманды);
 
КонецФункции// ЗаписьПрослушать
   ChMikle
 
115 - 23.10.20 - 16:22
ИмяФайла  указывать весь путь с подкаталогами до записи или только непосредственно имя файла wav ?
   ChMikle
 
116 - 23.10.20 - 17:53
"Variable: "+СтрокаПерем+CRLF+CRLF; последняя строка в примере должна быть :) . и Все заработало
   ChMikle
 
117 - 23.10.20 - 17:53
Имя файла - короткое без всего пути
   ChMikle
 
118 - 26.10.20 - 10:32
подскажите, а как получить имя файла в котором будет храниться запись текущего разговора . VarSet событие , но что-то с синтаксисом отправки не разберусь.
http://wiki.simplit.info/doku.php/solution/operator/mixmonitor
пишут пример как получить , но что-то ругается на синтаксис .

ТекстКоманды= "Event: VarSet"+ПС+
              "Variable: MIXMONITOR_FILENAME"+ПС+
              "Value: /var/spool/asterisk/monitor/1234567890.gsm"+ПС+            
          ТекстКоманды = ТекстКоманды + ПС + ПС;
Флаг = ОбъектКомпоненты.ВыполнитьКоманду(ТекстКоманды);
   Йохохо
 
119 - 26.10.20 - 11:24
(118) это же событие, а не команда
   ChMikle
 
120 - 26.10.20 - 11:26
(119) а как правильно из библиотеки получить эти данные, я правильно понимаю, что вначале надо выполнить команду Звонок , а потом каким-то образом событие имя файла отработать ?
   polosov
 
121 - 26.10.20 - 11:27
(118) Мы вытаскиваем имя из БД по callid
   ChMikle
 
122 - 26.10.20 - 11:29
а что такое БД и пример кода можете выложить ?
   polosov
 
123 - 26.10.20 - 11:36
(122) Астериск работает на своей базе данных (MySQL как правило). Там хранятся разные параметры, логи и много полезного.
   ChMikle
 
124 - 26.10.20 - 11:39
(123) а как получить данные-то , как-то событие надо отправить в объект ?
   polosov
 
125 - 26.10.20 - 11:44
(124) Подключиться к БД (через ADODB, к примеру) и выполнить запрос по таблице cdr
Select * from cdr where callid='ТвойИдентификатор'
   ChMikle
 
126 - 26.10.20 - 11:45
(125) по идее проще должно быть , астериск возвращает событие , только синтаксис в 1С для библиотеки не могу найти
   polosov
 
127 - 26.10.20 - 11:49
(126) Вообще у астериск есть Rest-интерфейс. Можно данные тягать так. За подробностями иди в документацию по астериск своей версии.
   ChMikle
 
128 - 26.10.20 - 11:52
(127) не густо вот что накопал http://wiki.simplit.info/doku.php/solution/operator/mixmonitor , вроде просто все должно быть , а не выходит каменный цветок.
   Йохохо
 
129 - 26.10.20 - 12:00
я когда то хотел через апач+ https://cwiki.apache.org/confluence/display/HTTPD/DirectoryListings решать проблемы с доступом к файлам, а потом хватило cdr от freepbx
(128) они там не качают файл а проигрывают в локальный номер
   ChMikle
 
130 - 26.10.20 - 12:05
(129) стремно как-то, да и имя файла как получить ?
 
 Рекламное место пустует
   ChMikle
 
131 - 26.10.20 - 12:05
(129) >> они там не качают файл а проигрывают в локальный номер
ДА мне так и надо.
   ChMikle
 
132 - 26.10.20 - 12:50
в обработку внешнего события не попадают даннные
   polosov
 
133 - 26.10.20 - 13:33
(132) В какой конфе ты все делаешь?
   ChMikle
 
134 - 26.10.20 - 13:57
конфа самописная , добавил на форму обработкувнешнегособытия() на клиенте, если я правильно понял , то если режим фильтрации включить , то 1С будет отлавливать внешние события со стороны Астериск  , высеивая по названию, можно получить имя файла и его расположение.
   polosov
 
135 - 26.10.20 - 15:03
(134) Не совсем так. Посмотри как это реализовано в типовых. Там есть глобальный обработчик, который оповещает открытые окна.
   ChMikle
 
136 - 26.10.20 - 15:07
(135) да там вроде как и при описании компоненты пишут в первую очередь срабатывает обработчик на форме , потом уже в глобальный обработчик
   polosov
 
137 - 26.10.20 - 15:13
(136) Может фильтр не правильный задан. Какой устанавливаешь?
   ChMikle
 
138 - 26.10.20 - 15:29
я могу обработку выслать , напоковырять , так проще будет
   Йохохо
 
139 - 26.10.20 - 15:40
требуется разрешение dialplan, но с ним тоже нет ивента с Variable: MIXMONITOR_FILENAME, хотя запись произошла, и вообще имени файла нету
   ChMikle
 
140 - 26.10.20 - 15:47
(139) dialPlan выставлен в yes для номера , вот где-то рядом решение , почему в обработчик внешнего события не переходит после звонка . я загружаю компоненту, авторизируюсь,звоню,после окончания должен сработать обработчик внешнего события , где будут необходимые данные ?
   Йохохо
 
141 - 26.10.20 - 15:48
(140) я соединился просто телнетом и сделал звонок который был записан, но события не было
   ChMikle
 
142 - 26.10.20 - 15:50
может что надо в астериске еще настроить , пишут обмен в формате utf-8
   ChMikle
 
143 - 27.10.20 - 09:15
UP
   Йохохо
 
144 - 27.10.20 - 09:26
пора узнать версию астериска)
   Йохохо
 
145 - 27.10.20 - 09:29
и вообще какая задача решается прослушиванием звонка? мб это можно по другому
   ChMikle
 
146 - 27.10.20 - 09:34
(144) Asterisk 15.7.4
(145) Когда менеджер поговорил с клиентом , получать полное имя файла и заносить его в реестр сведений , типа журнала звонков. А после при желании , можно на запись в журнале кликнуть , получить обратный звонок на прослушку записи. Блок прослушки записи с командой Астерск уже готов , а вот полное имя файла получать можно через событие описанное выше. делать папку записей звонков как сервер http или шариться по папке перебором файлов как-то стремно :(
   stopa85
 
147 - 27.10.20 - 09:43
(146) А этот файл с Астериска никак не вытащить? У меня вообще журнал вызовов дублируется в 1С. И записи разговоров хранятся как приложеные файлы. Оч.удобно для RLS и когда у тебя этих серверов astreisk куча. и не только.
   Йохохо
 
148 - 27.10.20 - 09:44
(146) скриптик написать который принимает внутренний номер и внешний и отдает полный пусть, в имени есть время. вроде делается на netcat + баш. Но вероятно более рационально настроить cdr и оттуда получать ссылку на прослушивание или просто удовлетвориться вебмордой cdr
   Fedor-1971
 
149 - 27.10.20 - 09:46
(146) Посмотри в консоле Астериска, там будет событие записи в файл, разреши отправлять это событие во внешнюю компоненту
Как вариант, Астериск присваивает ID каждому звонку и, по умолчанию, при записи файла включает его в название
Когда мониторишь звонок выцепи ID, и по маске спокойно получишь файл

На сколько я помню, есть параметр в настройках, что-то типа маска сохраняемого файла
   Йохохо
 
150 - 27.10.20 - 09:47
(149) нету события, права на него есть а события нет, и гугл говорит что оно было в *11, а в 15 я уже не нашел, но мб плохо искал
   ChMikle
 
151 - 27.10.20 - 09:55
(149) >>разреши отправлять это событие во внешнюю компоненту
Как это сделать , можно поподробнее ?
(148) угу
(150) м.б. где-то как-то в астериске настраивать регистрировать событие создания файла записи ?
   ChMikle
 
152 - 27.10.20 - 10:02
(147) это уже на крайний случай , ситуация выглядит так что например : в таблице значений ищут значение перебором строк, вместо того чтобы использовать функцию найти :)
   Fedor-1971
 
153 - 27.10.20 - 10:03
(151) в одном из файлов настройки Астериска прописываются события для фиксации (Call, answer, busy и т.д. или all - всё что ни попадя), давно игрался, подзабылось уже. Кроме того, внешняя компонента 1С то же настраивалась на all.

Попробуй получить трассу событий из Астериск в 1С, возможно, там получится выцепить запись в файл
   Йохохо
 
154 - 27.10.20 - 10:07
(153) manager.conf read=dialplan, но события нет
(152) решение polosov рабочее, настраиваем cdr и оттуда тащим через рест апи
   ChMikle
 
155 - 27.10.20 - 10:08
(153) я правильно понимаю, что после окончания звонка , должно произойти внешнее событие , которое должно перехватить 1С и по наименованию события получить список аргументов (данных) имя файла -один из них. Просто вчера ковырялся , обработка внешнего события не не реагирует : то ли нет событий от астериск , то ли еще что-то ...
   ChMikle
 
156 - 27.10.20 - 10:09
Но ведь должно же работать :)))
   Йохохо
 
157 - 27.10.20 - 10:17
я пока так понял, что какая то важная деталь с каналами, и монитор_файлнейм улетает куда то не туда
   Fedor-1971
 
158 - 27.10.20 - 10:23
(155) типа да. Если нужно что-то получить, это должен отдать Астериск и уметь обработать событие в 1С,
  типа Dialplan - имеет ID звонка (есть нюансы если переключали на другого сотрудника), время начала звонка, время ответа, длительность разговора, время когда трубку положили (это было раньше, что сейчас отдаёт Астериск не скажу).
  Запись в файл была отдельным событием но ID звонка оставался тем же
   ChMikle
 
159 - 27.10.20 - 10:37
(157) либо какую-то еще опцию надо подключать чтобы возвращала данные после звонка  .
Тут еще проблема в том, что админ который астериском рулит , поверхностно  знает его , атс настроили , ему показали как номер добавить , убрать и все...
   ChMikle
 
160 - 27.10.20 - 10:39
((158) тут без заморочек, менеджер позвонил из 1С выбрав номер (уже работает с божьей и товарищей по ветке помощью), запись могу прослушать заказав обратно , но вот осталось имя фала получать после звонка (а не перебирать в каталоге) .
 
 Рекламное место пустует
   Йохохо
 
161 - 27.10.20 - 11:11
(159) в консоли или какая то вебморда?
   ChMikle
 
162 - 27.10.20 - 11:14
(161) кто бы знал , предположение . тут-то все просто http://wiki.simplit.info/doku.php/solution/operator/mixmonitor
   Йохохо
 
163 - 27.10.20 - 11:21
(162) найдите мануал и поставьте сверху freepbx с cdr
сейчас проверю ключ all
   Йохохо
 
164 - 27.10.20 - 11:23
Executing [s@macro-hangupcall:3] ExecIf("SIP/1xx-0000028c", "0?Set(CDR(recordingfile)=)") in new stack
это логи, они намекают что с цдр все взлетит)
   Йохохо
 
165 - 27.10.20 - 11:31
с all тоже ничего полезного, куча мусора
   ChMikle
 
166 - 27.10.20 - 11:33
(164) Я тут еще одного знакомого попросил подключиться , он вроде тоже с астериском знаком, м.б. все-таки получится ...
Нет , тогда буду разбираться с freepbx с cdr .
ЗЫ ведь в описании-то все работает с получением событий :(
   Йохохо
 
167 - 27.10.20 - 11:35
(166) Asterisk 11.19.0 нету, мб фрипбх реализует это не через миксмонитор, хз
   ChMikle
 
168 - 27.10.20 - 11:35
(167) у нас после выполнения команды в телнете никаких событий не происходит :(
   Йохохо
 
169 - 27.10.20 - 11:36
(168) Events: off - тут офф да?)
Action: Login
Username: admin
Secret: amp111
   ChMikle
 
170 - 27.10.20 - 11:43
(169) Получилось получать события ?
   Йохохо
 
171 - 27.10.20 - 11:45
(170) с ивентс он, конечно
   Йохохо
 
172 - 27.10.20 - 11:45
проверьте cat /etc/asterisk/manager.conf
   ChMikle
 
173 - 27.10.20 - 11:55
побежал :))
   ChMikle
 
174 - 27.10.20 - 12:07
(172) а там что проверять ?
   Йохохо
 
175 - 27.10.20 - 12:10
(174) deny в сетях и права на источники событий
   ChMikle
 
176 - 27.10.20 - 12:19
(175) никуя не понял , но при авторизации пошли события :) среди них VarSet , только 1С не перехватывает почему-то :((
   Йохохо
 
177 - 27.10.20 - 12:28
у меня варсеты только не нужные, типа 

Event: VarSet
Privilege: dialplan,all
Channel: SIP/1хх -00000002
Variable: MACRO_CONTEXT
Value: from-internal
Uniqueid: 1603787875.2
   ChMikle
 
178 - 27.10.20 - 12:43
(177) 1603787875.2 - это уникальный идентификатор файла ? правильно ?
   Йохохо
 
179 - 27.10.20 - 13:01
(178) не файла, а цепочки выполнения вызова
   ChMikle
 
180 - 27.10.20 - 14:05
(179) типа номер источник- номер получателя - дата звонка- время звонка - 1603787875.2 ?
Внешнее событие не отрабатывает в 1С , где-то в настройках AMI должно быть установлено отправлять события во вне ?
   Йохохо
 
181 - 27.10.20 - 14:19
(180) добейся устойчивой работы через шелл, а потом уже 1с. АМИ отправляет всё что есть в секции read и что умеет
Uniqueid это идентификатор цепочки, создан канал, запись в лог, событие статуса, звонок бдф хенгап, сквозь все события проходит Uniqueid
сделай себе шел и в астер тоже, а то так и будешь ковыряться в черном ящике, asterisk -rvvv может быть познавательным
   ChMikle
 
182 - 27.10.20 - 14:28
(181) меня смущает один момент , режим прослушивания у самой компоненты стоит ложь , м.б. поэтому 1С и не ловит внешние события  и  как перевести в истину ?
   ChMikle
 
183 - 27.10.20 - 14:30
+(182) демонстрационный режим тоже истина
   ChMikle
 
184 - 27.10.20 - 14:30
а то может я вам мозги ипу , а в деморежиме не поддерживаются какие-то возможности , например чтение событий от астериск
   ChMikle
 
185 - 27.10.20 - 15:00
(182) поменял после подключения режим прослушивания на значение "истина", но все равно внешнее событие не попадает
   oslokot
 
186 - 27.10.20 - 15:19
Уважаемые polosov и ChMikle, добрые люди, дайте мне тоже пожалуйста скомпилированный dll, у меня стоит такая же задача интеграции с астериксом Yeastar 300. По Putty к ней подключаюсь и логинюсь нормально (порт 5038) По хорошему, нужно просто брать логи звонков cdr и рекордсы вытаскивать
Помогите пожалуйста!
   ChMikle
 
187 - 27.10.20 - 15:25
могу дать свою с примером уже подключения и исходящего звонка , библиотека в макете
   oslokot
 
188 - 27.10.20 - 15:26
(187) спасибо! oslokot собака mail точка ru
   ChMikle
 
189 - 27.10.20 - 15:27
(188) ловите, если получится события внешние отлавливать , то сюда напишите, а то у меня в этом затык.
   oslokot
 
190 - 27.10.20 - 15:44
(189) не дошло почемуто
   polosov
 
191 - 27.10.20 - 15:52
(189) Ты фильтр после подключения устанавливаешь?
   polosov
 
192 - 27.10.20 - 15:54
(189) .SetRegEx(".*") к примеру
   oslokot
 
193 - 27.10.20 - 15:59
(189) спасиба! получил
   ChMikle
 
194 - 27.10.20 - 16:00
(191) да нет , все ловлю , ничего не прилетает :)
   ChMikle
 
195 - 27.10.20 - 16:04
(193) библиотека в макете
   polosov
 
196 - 27.10.20 - 16:09
(194) Есче раз говорю, установи фильтр после подключения компоненты.
   ChMikle
 
197 - 27.10.20 - 16:16
(196) а какой фильтр должен быть ? скинь кусок кода как ты устанавливаешь ? :)
   polosov
 
198 - 27.10.20 - 16:20
(197) У тебя что-то типа:
Компонента = Новый ("Addin....");
компонента.Connect...
//Тут логины

//Потом установи фильтр
Компонента.SetRegEx(".*");
   polosov
 
199 - 27.10.20 - 16:24
+(198)
Компонента возвращает событие, если оно подходит под фильтр
        if (std::regex_search(Data2, r))
                {
                    return res;
                }
   ChMikle
 
200 - 27.10.20 - 16:24
(198) вставил , но что-то нет ничего в обратку :(((
  1  2  3   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.