![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 19.05.2011
Сообщений: 116
|
![]()
В общем ситуация такая: есть АТС Asterisk, пытаюсь сделать управление звонками и мониторинг по предоставленному ATC интерфейсу взаимодействия AMI - по сути представляет собой отправку набора текста по средствам telnet и получение ответов от АТС.
Функционал по отправке и тому подобное реализовал, а вот как грамотно распарсить полученные события без особой нагрузки на клиент, может у кого то есть функции готовые по шаблонам/ключевым словам, или любые идеи по этому поводу? P.s: действия для одного звонка от регистрации и до полного его завершения занимает порядка ~400-500 строк в зависимости от длительности разговора. Asterisk Call Manager/1.1 Response: Success Message: Authentication accepted Event: FullyBooted Privilege: system,all Status: Fully Booted Ответ на отправленный запрос на звонок: Event: Newchannel Privilege: call,all Timestamp: 1450619024.780615 Channel: SIP/101-0000003f ChannelState: 0 ChannelStateDesc: Down CallerIDNum: CallerIDName: AccountCode: Exten: Context: sip-dual Uniqueid: 1450619024.63 Event: VarSet Privilege: dialplan,all Timestamp: 1450619024.780642 Channel: SIP/101-0000003f Variable: SIPCALLID Value: 68df505e3319e24f77f4e90c2852d9d5@19 2.168.4.55:5060 Uniqueid: 1450619024.63 ....... Event: Dial Privilege: call,all Timestamp: 1450619034.651891 SubEvent: End Channel: SIP/101-0000003f UniqueID: 1450619024.63 DialStatus: ANSWER Event: Hangup Privilege: call,all Timestamp: 1450619034.651931 Channel: SIP/101-0000003f Uniqueid: 1450619024.63 CallerIDNum: <unknown> CallerIDName: 101->100 ConnectedLineNum: <unknown> ConnectedLineName: 101->100 Cause: 16 Cause-txt: Normal Clearing |
![]() |
![]() |
![]() |
#2 | |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Ну... Если в кратце то:
Код:
I'm learning to live...
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 19.05.2011
Сообщений: 116
|
![]()
Объемы текста довольно большие..., здесь в качестве теста текст для 2-х зарегистрированных телефонов ~500 строк, телефонов в рабочем варианте: 150*~500(это одно событие)*(количество событий - (прием звонка, перерегистрация, перевод звонка и.т.п.)).
Суть работы в следующем: 1. Оператор отправил заявку на звонок, сформировалось событие сервером и вывелось (пока вывожу в Memo, но тут можно хоть куда его загрузить) 2. Сформировались и вывелись промежуточные события вроде - гудок 1, гудок 2, гудок 3. 3. Оператор ответил или не ответил так же сформировались события. 4. Если какой то оператор завершил звонок то приходит так же событие. Что хорошо, у каждой группы событий есть уникальных идентификатор - ActionID, а плохо то что пока все события приходят ПОСТРОЧНО, по этому поводу можно решить формированием пакетов, т.к. в начале и в конце встречается не более 3-4 ключевых слов с которых они могут начинаться и заканчиваться. А получить данные необходимо приблизительно такого формата: Event: Newchannel - новый вызов Channel: SIP/101-0000003f - инициатор вызова Exten: 100 - назначение вызова ActionID: XXXXXXXXXXXXXX123445 - Это уникальный для каждой группы событий идентификатор - его я формирую сам и буду передавать в событие... В итоге хочу сделать таблицу вида: 1. ID (ActionID) 2. время начала 3. Инициатор 4. Назначение 5. Состояние (идет вызов, абонент ответил, вызов завершен) 6. Время завершения |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 19.05.2011
Сообщений: 116
|
![]()
Текст приходит не слитно, но построчно, пакеты разделяются - CRLF + CRLF.
|
![]() |
![]() |
![]() |
#6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
А-а-а, ну тогда разделяй пакеты и мой способ по идее подойдет.
I'm learning to live...
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 19.05.2011
Сообщений: 116
|
![]()
Дабы не плодить новых тем, задам связанный вопрос здесь...
regexpr - есть у кого нибудь опыт работы с этим чудом (регулярные выражения для языка Delphi)? Поделитесь впечатлениями, или может еще есть варианты по подобным модулям/библиотекам? Хочу попробовать, для фильтрации потока на входе поставить регулярные выражения, для отброса лишнего текста.... По заявлению на сайте сложность выражения, зависит только от фантазии разработчика. Последний раз редактировалось le7o; 24.12.2015 в 23:16. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 16.04.2007
Сообщений: 225
|
![]()
в смысле, они существуют с 2001го года в делфи в виде компонента, на сколько я знаю, рекомендую почитать Википедию по поводу Регексов, но область применимая их достаточно ограниченая т.е. я использовал при парсинге сайтов и проверки на соответсвие шаблону.
|
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 19.05.2011
Сообщений: 116
|
![]() Цитата:
В стандартной палитре компонентов их ни разу не видел, ни в одной из версий от 7 до XE8. Как Вы считаете при построчном поступлении текста достаточно большого объема - помогут отбросить лишние строки? |
|
![]() |
![]() |
![]() |
#10 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
![]()
Они все могут.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
idTelnet/idTelnetServer (delphi) | dyonysos | Работа с сетью в Delphi | 0 | 05.02.2010 18:05 |
Сообщение | HellMercenariess | Свободное общение | 1 | 21.11.2009 04:42 |
Сообщение... | KoBRaAndrey | Общие вопросы Delphi | 8 | 02.10.2009 18:56 |
Сообщение | Shevali | Общие вопросы Delphi | 3 | 07.06.2009 19:53 |
IdTelnet | ][-Wizzard | Работа с сетью в Delphi | 1 | 10.07.2008 11:11 |