Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Небольшой frontend для оператора

2

Появилась задача написать небольшой фронтэнд для оператора АТСки (Elastix) К примеру, у оператора отображается список внутренних телефонов и напротив галочка. Ставишь ее и можно звонить по городу, снимаешь - нельзя Писать буду на PHP Подскажите что можно почитать по этому вопросу? Первый вопрос, который возник - как Elastix'у подать команду 'Apply Configuration Changes Here' Что происходит (какая команда отрабатывает) после нажатия на кнопку 'Apply Configuration Changes Here'

удалить закрыть спам изменить тег редактировать

спросил 2012-03-12 13:52:22 +0400

pvk Gravatar pvk
61 5 7
http://sp-it.ru/

8 Ответов

2

Что-то народ слишком мудреные способы предлагает. Думаю можно сделать все гораздо проще:

  1. Всех абонентов запихиваем в один контекст, который по умолчанию никуда не ведет
  2. При звонке абонента в диалплане из ASTDB извлекается значение, к примеру, из ветки /users/12344322/context
  3. После этого делается GoTo на этот контекст. Причем контексты эти могут быть определены средствами FreePBX, например, модулем custom contexts. Соответственно если контекст, в куда направляется звонок и определит дальнейшую его судьбу: если это какой-нить outbound-routes, то ему повезло. Если, к примеру, restricted, то звонок дропается. Можно кучу контекстов наваять для разных тарифных планов.
  4. Значения в ASTDB можно записать через AMI или из командной строки asterisk -rx "database put..."

Достоинства:

  • Гибкость в применении: можно менять разрешения разными методами
  • Не требуется перезагружать конфиг при изменениях
  • Никакого гимору с реалтайм архитектурой и базами данных
  • 100%-я совместимость с FreePBX
  • ???
  • Profit!
ссылка удалить спам редактировать

ответил 2012-03-14 21:32:59 +0400

switch Gravatar switch
8334 11 7 92
http://lynks.ru/

обновил 2012-03-14 21:35:20 +0400

Comments

недостаток: выполнение достаточно сложного диалпана для номеров ведущих в никуда.

meral ( 2012-03-14 23:16:40 +0400 )редактировать

вот эти две строчки:

exten => _X,1,Set(context=DB(users/${CDR(accountcode)})/context)

exten => _X,1,GoTo(${context},${EXTEN},1)

Это типа сильно сложный диалплан???

switch ( 2012-03-14 23:21:02 +0400 )редактировать

ага.есть обращение к диску. неубираемое.

meral ( 2012-03-15 11:44:14 +0400 )редактировать

И это типа медленнее, чем держать юзерей в БД и ломится через сеть каждый раз с запросом? Хорошо. можно переделать и не использовать astdb, а глобальные переменные. Тоже медленно? а что тогда быстрее? Особенно если учесть, что во freepbx и без этого в процессе звонка будет запущено три AGI скрипта и полсотни обращений к astdb.

switch ( 2012-03-15 11:53:43 +0400 )редактировать

как ни странно, mysql быстрее. он просто закеширует. вот. зачем пложить 50+1-й?

meral ( 2012-03-15 13:06:52 +0400 )редактировать

я знаю что быстрее. Но так же знаю принцип KISS, а так же то, что использование mysql не даст в этом случае абсолютно никакого выигрыша

switch ( 2012-03-15 13:14:20 +0400 )редактировать
0

Я так думаю, нужно для начала написать несколько контекстов, хотя бы два: с нужными разрешениями и без них. Можно все это облегчить существенно установив себе модуль custom-context.

А в базе все лежит в таблице asterisk.sip. Контекст для пользователя меняется командой:

update sip set data = '<context>' where id = <sip_id> and flags = 5;

После смены контекста в базе, для применения настроек можно сделать:

/var/lib/asterisk/bin/module_admin reload

Проверить все ли правильно выполняется можно командой:

sip show user <sip_id>

Но эт наверное костыли. Через AMI как-то круче наверное можно сделать..

ссылка удалить спам редактировать

ответил 2012-03-14 21:19:38 +0400

matperez Gravatar matperez
255 18 6 19

Comments

ваша команда убьет весь sip.conf. есл что, там больше одного поля с флагом 5 для каждого ид.

meral ( 2012-03-14 23:17:42 +0400 )редактировать

может быть, но мне как-то не встречалось. приведите пожалуйста пример двух строчек с флагом 5 для одного sip_id.

matperez ( 2012-03-15 00:40:33 +0400 )редактировать
0

а если в теории так пока без примера, галочка просто пишется в таблицу Mysql а в диалплане перед каждым набором делается запрос в бд вн. номер и статус 0 или 1 и GotoIF.....

ссылка удалить спам редактировать

ответил 2012-03-12 17:49:40 +0400

Bracus Gravatar Bracus
110 4 3 7

обновил 2012-03-12 17:54:26 +0400

Comments

это очень плохой метод. правильный метод - менять контекст на другой,с только внутренней адресацией.

meral ( 2012-03-12 18:54:38 +0400 )редактировать

А как же использование режима день ночь с подобной реализацией? http://www.voip-info.org/wiki/view/Asterisk+day+night+mode+example когда перед звонком определяется время и/или переменная из asterisk DB, MySQL Я конечно понимаю что именно в данном случае для снижение нагрузки рекомендация использовать статический вариант смены контекстов. Но уж точно это не настолько плохой вариант

Bracus ( 2012-03-13 16:31:11 +0400 )редактировать

ну так там же поддержка со стороны диалпана ПРИСТВУЕТ. да и написано это было 5 лет назад.

meral ( 2012-03-13 16:36:04 +0400 )редактировать

и все же настаиваю, динамическое решение имеет место быть )))

Bracus ( 2012-03-13 17:49:12 +0400 )редактировать
1

ну так в чем проблема? засуньте sip peers в базу и меняйте контексты.

meral ( 2012-03-13 18:34:13 +0400 )редактировать

Это уже решение, спасибо, только вот у постующего Elastix. получается он в таком случае потеряет функционал FreePBX?

Bracus ( 2012-03-14 09:55:29 +0400 )редактировать
1

почемуэто. еслиправильно пропишет то не потеряет.

meral ( 2012-03-14 10:08:47 +0400 )редактировать

Спасибо, вопросов нет )) только вот так и не нашел как можно совместить sip realtime + FreePBX ((

Bracus ( 2012-03-14 10:14:06 +0400 )редактировать
1

убираете инклуд sip_additional.conf. запускаете реалтайм (extconfig.conf), создаете view или табличку на основе данных из таблички sip. все.

meral ( 2012-03-14 10:39:38 +0400 )редактировать
0

Случайно продублировал пост, прошу прощения.

ссылка удалить спам редактировать

ответил 2012-03-14 09:02:32 +0400

mik Gravatar mik
31 3 1 7

обновил 2012-03-14 09:03:29 +0400

0

Почему бы не вынести диалплан в mysql и при помощи php скрипта не переносить необходимые телефоны из одного контектста (где вызовы в город запрещены) в другой (где они соответственно разрешены)?

ссылка удалить спам редактировать

ответил 2012-03-14 09:02:56 +0400

mik Gravatar mik
31 3 1 7

Comments

это неефективно. проще вынести в mysql сами пиры(sip).

meral ( 2012-03-14 09:48:51 +0400 )редактировать
0

это надо писать В КОМЕНТАРИИ

ссылка удалить спам редактировать

ответил 2012-03-12 14:06:30 +0400

pvk Gravatar pvk
61 5 7
http://sp-it.ru/

обновил 2012-03-12 14:16:06 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

хорошо. Вот для начала нашел: http://voip.rus.net/tiki-index.php?page=Asterisk+Manager+API спасибо за наводку

pvk ( 2012-03-12 14:21:58 +0400 )редактировать
0

а вы уверены что стоит без понимания внутреностей писать?

apply changes вызывает /var/lib/asterisk/bin/retrieveconfigmysql

потом делает через ami asterisk reload.

почитать по этому поводу можно freepbx.org вики, и исходники freepbx.

просто есть болшой шанс что то что вы напишите будет глючить.

ссылка удалить спам редактировать

ответил 2012-03-12 13:58:18 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

"apply changes вызывает /var/lib/asterisk/bin/retrieveconfigmysql"

вызывает он на самом деле /var/lib/asterisk/bin/module_admin reload

zzuz ( 2012-03-12 14:53:14 +0400 )редактировать

раньше точно вызывал что я написал. и до сих пор вызовка retriveconfgmysql вполне достаточно

meral ( 2012-03-12 15:12:52 +0400 )редактировать
0

Вот что за сутки удалось наковырять с AMI. Вот такой скрипт подключается AMI и ... и все :-)

<? 
  $ami_login = 'admin';
  $ami_secret = 'hidepass';
  $socket = fsockopen ("10.0.1.162", 5038, $errno, $errstr);
  if (!$socket) 
  { 
    echo("$errno($errstr)"); 
    return; 
  } 
  else 
  { 
    fputs ($socket, "Action: Login\r\n");
    fputs ($socket, "UserName: $ami_login\r\n");
    fputs ($socket, "Secret: $ami_secret\r\n\r\n");
    fputs ($socket, "Action: Logoff\r\n\r\n"); 

    while (!feof($socket)) 
    { 
      echo fgets ($socket,200)."<br>"; 
    }
  } 
  fclose ($socket); 
?>

Можно ли развить этот скрипт, чтоб он запретил номеру 151 звонок в город (у меня город это 7 знаков)

ссылка удалить спам редактировать

ответил 2012-03-13 12:11:52 +0400

pvk Gravatar pvk
61 5 7
http://sp-it.ru/

обновил 2012-03-13 12:12:51 +0400

Comments

мужик. ты серйозно или издеваешься? во первых не получится ТОЛЬКО через ами чтото запретить. надо поддержка со стороны диалплана. во вторых скриптов для ами полно, и вообещ все прекрасно описана в куче источников. это ж не какйото закрытый интерфейс. еще раз говорю. тебе еще рано чтото пистаь.сначала почитай. исходники freepbx например.

meral ( 2012-03-13 13:37:35 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку
1 закладка

подписаться на rss ленту новостей

Статистика

Задан: 2012-03-12 13:52:22 +0400

Просмотрен: 880 раз

Обновлен: Mar 14 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.