Здравствуйте, QrystaL, Вы писали:
QL>Это было бы гораздо практичнее и ближе к народу, чем конструктор языков, нужный 0,0..01% сообщества
Конструктор языков на самом деле нужен. Существует немало разного рода систем с чрезвычайно развесистыми средствами конфигурирования. Для примера, Freeswith, сервис телефонии. У него есть диалплан, который предлагается писать в XML. Типичная структура логики там — это навешивание коллбэков на коллбэки и указание кучи параметров для функций, которые будут вызваны по ходу звонка
| Звонок с записью разговора |
| <extension name="out_sipmarket.net">
<condition field="${toll_allow}" expression="domestic"/>
<condition field="destination_number" expression="^(7\d{10})$">
<action application="set" data="RECORD_TITLE=Recording ${destination_number} ${caller_id_number} ${strftime(%Y-%m-%d %H:%M)}"/>
<action application="set" data="RECORD_COPYRIGHT=(c) 2012"/>
<action application="set" data="RECORD_SOFTWARE=FreeSwitch"/>
<action application="set" data="RECORD_ARTIST=FreeSwitch"/>
<action application="set" data="RECORD_COMMENT=Voice recordings"/>
<action application="set" data="RECORD_DATE=${strftime(%Y-%m-%d %H:%M)}"/>
<action application="set" data="RECORD_STEREO=true"/>
<action application="set" data="media_bug_answer_req=true"/>
<action application="set" data="recordingfile=${uuid}.wav"/>
<action application="record_session" data="$${rec_dir_custom}/${recordingfile}"/>
<action application="set" data="hangup_after_bridge=true"/>
<action application="set" data="bride_early_media=true"/>
<action application="set" data="ringback=${ru-ring}"/>
<action application="set" data="instant_ringback=true"/>
<action application="bridge" data="{absolute_codec_string=PCMA,PCMU}sofia/gateway/sipmarket.net/+$1"/>
<action application="answer"/>
</condition>
</extension> Обратите внимание на код. В нём — ошибка, но о ней никто не подскажет, потому что нет возможности проверить корректность диалплана в целом:<action application="set" data="bride_early_media=true"/>
|
| |
| Вызов random |
| <action application="set" data="rand_val=${expr(randomize(&x);ceil(random(0,100,&x)))}"/>
|
| |
| Установка коллбэка на начало разговора — запланировать завершение разговора через 60 секунд |
| <action application="set" data="execute_on_answer=sched_hangup +60" />
|
| |
| Звонок на номер 1001, если через 10 секунд не ответил — звонить еще и на 1002 |
| <action application="bridge" data="user/1001@${domain_name},[leg_delay_start=10]user/1002@${domain_name}"/>
И код это не работает, разумеется, потому что (внимание! фирменный линуксоидно-инженерно-связистский фокус-покус! крррррр-чпокЪ — вуаля!)
If you want to route to many user channels, you will have to seperate them by :_: as opposed to the comma "," to have an originate for each user
Видите ли, нужно использовать ":_:". ":_:", Карл! Вы давно видели оператор ":_:"? |
| |
И так у них всё. Потому что мозги телефонные совершенно не сведущи в парсерах и CS вообще и не в состоянии написать нормальный язык и парсер к нему.
Нитра могла бы стать хорошим лекарством для таких проектов, чтобы привести их конфигурации в нормальный вид.