GithubHelp home page GithubHelp logo

litnimax / astconfman Goto Github PK

View Code? Open in Web Editor NEW
44.0 8.0 35.0 542 KB

Asterisk ConfBridge Manager

License: GNU Lesser General Public License v3.0

Python 14.10% HTML 3.39% JavaScript 82.40% Mako 0.07% Shell 0.04%

astconfman's Introduction

Asterisk ConfBridge Manager

MAINTAINER IS WANTED If you would like to maintain this repo pls create a new ticket.

This is a WEB based interface for managing Asterisk ConfBridge application.

Built on Asterisk ConfBridge, Flask, SSE, React.js

You can request a new feature or see current requests and bugs here.

How it works

Flask is used as a WEB server. By default it uses SQLite3 database for storage but other datasources are also supported (see config.py).

Conference participants are invited using Asterisk call out files. To track participant dial status local channel is used. No AMI/AGI/ARI is used. Everything is built around asterisk -rx 'confbridge <...>' CLI commands. Asterisk and Flask are supposed to be run on the same server but it's possible to implement remote asterisk command execution via SSH. The software is distributed as as on BSD license. Asterisk resellers can easily implement their own logo and footer and freely redistribute it to own customers (see BRAND_ options in config.py).

Features

  • Private (only for configured participants) and public (guests can join) conferences.
  • Muted participant can indicate unmute request.
  • Contact management (addressbook) with import contacts feature.
  • Conference recording (always / ondemand, web access to recordings).
  • Support for dynamic ConfBridge profiles (any profile option can be set).
  • Invite participants from WEB or phone (on press DTMF digit).
  • Invite guests on demand by phone number.
  • Conference management:
  • Lock / unlock conference;
  • Kick one / all;
  • Mute / unmute one / all
  • Realtime conference events log (enter, leave, kicked, mute / unmute, dial status, etc)
  • Asterisk intergrators re-branding ready (change logo, banner, footer)

Demo

atsconf

Here is the demo with the folling scenatio:

  • Import contacts.
  • Add contacts to participants.
  • Invite all participants into conference.
  • Enter conference from phone.
  • Unmute request from phone.
  • Invite customer by his PSTN number.
  • Enter non-public conference.

Demo

Installation

Requirements

  • Asterisk 11, 12 or 13. Only Asterisk 12/13 have confbridge list flags (muted, admin, marked) so Asterisk 11 is supported partially.
  • Python 2.7

On Ubuntu:

sudo apt-get install python-pip python-virtualenv python-dev

In Debian 11 pip2 and virtualenv was deleted from repository, install them manually:

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py
sudo pip2 install virtualenv

Download the latest version:

wget https://github.com/litnimax/astconfman/archive/master.zip
unzip master.zip
mv astconfman-master astconfman

Or you can clone the repository with:

git clone https://github.com/litnimax/astconfman.git

Next steps:

cd astconfman
virtualenv env
source env/bin/activate
pip2 install -r requirements.txt
mv env/lib/python2.7/site-packages/asterisk/ env/lib/python2.7/site-packages/asterisk2/

The above will download and install all runtime requirements.

To enable AMI events put content of astconfman/asterisk_etc/manager.conf file into /etc/asterisk/manager.conf or change AMI credentials in 'config.py' manually. Don't forget to enable talker detection events in participant profile settings and reload Asterisk config.

Now you should init database and run the server:

cd astconfman
./manage.py init
./run.py

Now visit http://localhost:5000/ in your browser.

Default user/password is admin/admin. Don't forget to override it.

Configuration

WEB server configuration

Go to instance folder and create there config.py file with your local settings. See config.py for possible options to override. Options in config.py file are self-descriptive.

Asterisk configuration

Asterisk must have CURL function compiled and loaded. Check it with

*CLI> core show  function CURL

You must include files in astconfman/asterisk_etc folder from your Asterisk installation.

Put

#include /path/to/astconfman/asterisk_etc/extensions.conf

to your /etc/asterisk/extensions.conf and

#include /path/to/astconfman/asterisk_etc/confbridge.conf

to your /etc/asterisk/confbridge.conf.

Open extensions.conf with your text editor and set your settings in globals section.

Open /etc/asterisk/asterisk.conf and be sure that

live_dangerously = no

Participant menu

While in the conference participants can use the following DTMF options:

  • 1 - Toggle mute / unmute myself.
  • 2 - Unmute request.
  • 3 - Toggle mute all participants (admin profile only).
  • 4 - Decrease listening volume.
  • 5 - Reset listening volume.
  • 6 - Increase listening volume.
  • 7 - Decrease talking volume.
  • 8 - Reset talking volume.
  • 9 - Increase talking volume.
  • 0 - Invite all / not yet connected participants (admin profile only).

Dialplan for calling external users

[confman-dialout]
include => localph
include => extph

[localph]
exten => _XXX,1,Dial(SIP/${EXTEN},60)
exten => _ХXX,2,Set(ret=${CURL(${CONFMAN_HOST}/asterisk/dial_status/${conf_number}/${participant_number}/${DIALSTATUS})})
[extph]
exten => _XXXX.,1,Dial(${DIALOUT_TRUNK1}/${EXTEN},60)
exten => _XXXX.,2,Set(ret=${CURL(${CONFMAN_HOST}/asterisk/dial_status/${conf_number}/${participant_number}/${DIALSTATUS})})

Frequent errors

Asterisk monitor path not accessible

(env)max@linux:~/astconfman/astconfman$ ./manage.py init
Traceback (most recent call last):
  File "./manage.py", line 7, in <module>
    from app import app, db, migrate
  File "/home/max/astconfman/astconfman/app.py", line 60, in <module>
    from views import asterisk
  File "/home/max/astconfman/astconfman/views.py", line 608, in <module>
    menu_icon_value='glyphicon-hdd'
  File "/home/max/astconfman/env/local/lib/python2.7/site-packages/flask_admin/contrib/fileadmin.py", line 193, in __init__
    raise IOError('FileAdmin path "%s" does not exist or is not accessible' % base_path)
IOError: FileAdmin path "/var/spool/asterisk/monitor/" does not exist or is not accessible

(env)max@linux:~/astconfman/astconfman$ ls -l /var/spool/
итого 16
drwxr-x--- 9 asterisk asterisk 4096 сент.  1 22:20 asterisk
drwxr-xr-x 5 root     root     4096 сент.  1 22:09 cron
lrwxrwxrwx 1 root     root        7 сент.  1 22:05 mail -> ../mail
drwxr-xr-x 2 root     root     4096 апр.  11  2014 plymouth
drwx------ 2 syslog   adm      4096 дек.   4  2013 rsyslog
(env)max@linux:~/astconfman/astconfman$

To fix it add user running astwebconf to asterisk group.

Conference makes multiple outgoing calls on dialout call

Check if run.py are running with same user as Asterisk and what env directory has read-write access for Asterisk user.

astconfman's People

Contributors

asteriskauto avatar dependabot[bot] avatar litnimax avatar mikebutrimov avatar niaproxy avatar turbid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

astconfman's Issues

pls-wait-connect-call

in new russian asterisk sounds there is no pls-wait-connect-call, but we can use pls-hold-while-try.

extensions.conf
line 32

same => 200,Playback(pls-hold-while-try)

При заходе в конференцию, не обновляется список подключенных

Здравствуйте!
Столкнулся с проблемой, при подключении к конференции в логах видно что я подключился, но иногда не отображается.
Список подключенных собеседников не появляется автоматически, приходится обновлять постоянно страницу, при выходи из конфы человех исчезает автоматически из списка.

Что я делаю не так и как исправить?

How to set pin on conference?

It seems you can only set the pin in one place and that is in the profile for the participant. I need to have pin based conferences, that are set on the conference, not globally.

Am i missing something??

Having multiple calls per number

Hi thanks for the product and sharing it, much appreciated. Got it working in minutes!

However, when making a single call, noticed it made 3-4 simultaneous calls, a little weird. Any tip?

Problem with installing on CentOS 7

Hello.
Having problem with installing astconfman on CentOS 7.
Error during ./manage init.

(env) [root@s-spb-ast astconfman]# ./manage.py init
Traceback (most recent call last):
File "./manage.py", line 5, in
from flask_migrate import MigrateCommand
File "/usr/lib/python2.7/site-packages/flask_migrate/init.py", line 7, in
from alembic import version as alembic_version
File "/usr/lib/python2.7/site-packages/alembic/init.py", line 3, in
from . import context # noqa
File "/usr/lib/python2.7/site-packages/alembic/context.py", line 1, in
from .runtime.environment import EnvironmentContext
File "/usr/lib/python2.7/site-packages/alembic/runtime/environment.py", line 1, in
from .migration import MigrationContext
File "/usr/lib/python2.7/site-packages/alembic/runtime/migration.py", line 5, in
from sqlalchemy import Column
File "/usr/lib64/python2.7/site-packages/sqlalchemy/init.py", line 8, in
from . import util as _util
File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/init.py", line 14, in
from ._collections import coerce_generator_arg
File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/_collections.py", line 16, in
from .compat import binary_types
File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/compat.py", line 115, in
import importlib_metadata # noqa
File "/usr/lib/python2.7/site-packages/importlib_metadata/init.py", line 7, in
import zipp
File "/usr/lib/python2.7/site-packages/zipp.py", line 16, in
from contextlib2 import suppress
File "/usr/lib/python2.7/site-packages/contextlib2/init.py", line 56
async def aenter(self):
^
SyntaxError: invalid syntax

(env) [root@s-spb-ast astconfman]# pip freeze
alembic==1.6.5
Babel==2.9.1
backports.ssl-match-hostname==3.5.0.1
blivet==0.61.15.76
cffi==1.6.0
chardet==2.2.1
click==7.1.2
configobj==4.7.2
contextlib2==21.6.0
cryptography==1.7.2
decorator==3.4.0
dnspython==1.12.0
enum34==1.0.4
Flask==0.12.4
Flask-Babel==0.11.2
Flask-BabelEx==0.9.3
Flask-Migrate==3.0.1
Flask-SQLAlchemy==2.5.1
futures==3.1.1
gssapi==1.2.0
idna==2.4
importlib-metadata==3.1.0
iniparse==0.4
ipaclient==4.6.8
ipaddress==1.0.16
ipalib==4.6.8
ipaplatform==4.6.8
ipapython==4.6.8
itsdangerous==1.1.0
Jinja2==2.5
jwcrypto==0.4.2
kitchen==1.1.1
langtable==0.0.31
M2Crypto==0.21.1
Mako==1.1.4
MarkupSafe==1.1.1
netaddr==0.7.5
netifaces==0.10.4
openlmi==0.5.0
openlmi-software==0.5.0
openlmi-storage==0.8.0
perf==0.1
ply==3.4
pyasn1==0.1.9
pyasn1-modules==0.0.8
pycparser==2.14
pycurl==7.19.0
pygobject==3.22.0
pygpgme==0.3
pykickstart==1.99.66.22
pyliblzma==0.5.3
pyparsing==1.5.6
pyparted==3.9
python-augeas==0.5.0
python-dateutil==1.5
python-editor==1.0.4
python-ldap==2.4.15
python-linux-procfs==0.4.9
python-nss==0.16.0
python-yubico==1.2.3
pytz==2021.1
pyudev==0.15
pyusb==1.0.0b1
pywbem==0.7.0
pyxattr==0.5.1
PyYAML==3.10
qrcode==5.0.1
requests==2.6.0
schedutils==0.4
six==1.9.0
slip==0.4.0
slip.dbus==0.4.0
speaklater==1.3
SQLAlchemy==1.4.21
SSSDConfig==1.16.5
UNKNOWN==0.0.0
urlgrabber==3.10
urllib3==1.10.2
virtualenv==15.1.0
Werkzeug==0.11.10
yum-langpacks==0.4.2
yum-metadata-parser==1.1.4
zipp==1.2.0

Please help

Contacts import

A feature to import contacts from Gmail.
From what else we can import contacts?

Change port

socket.error: [Errno 98] Address already in use: ('127.0.0.1', 5000)

Установка на Ubuntu 16.04? Asterisk 13.16 заканчивается следующим:

Здравствуйте Максим! Огрооооомный РЕСПЕКТ за менеджер! В яблочко!
Установка на Ubuntu 16.04? Asterisk 13.16 заканчивается следующим:
warnings.warn(text)
/root/astconfman/env/local/lib/python2.7/site-packages/flask_admin/model/base.py:1139: UserWarning: Fields missing from ruleset: participants,user,logs
warnings.warn(text)
/root/astconfman/env/local/lib/python2.7/site-packages/flask_admin/model/base.py:1139: UserWarning: Fields missing from ruleset: user
warnings.warn(text) Ctrl+C дает вот это:
File "./run.py", line 11, in
server.serve_forever()
File "/root/astconfman/env/local/lib/python2.7/site-packages/gevent/baseserver.py", line 362, in serve_forever
self._stop_event.wait()
File "/root/astconfman/env/local/lib/python2.7/site-packages/gevent/event.py", line 219, in wait
return self._wait(timeout)
File "/root/astconfman/env/local/lib/python2.7/site-packages/gevent/event.py", line 129, in _wait
gotit = self._wait_core(timeout)
File "/root/astconfman/env/local/lib/python2.7/site-packages/gevent/event.py", line 106, in _wait_core
result = self.hub.switch()
File "/root/astconfman/env/local/lib/python2.7/site-packages/gevent/hub.py", line 630, in switch
return RawGreenlet.switch(self)
KeyboardInterrupt
Естественно менеджер недоступен. Запускающий юзер в группе Asterisk. Нид Хэлп! Буду признателен за помощь.

Не работает вкладка confernces

Добрый день. При попытке открыть вкладку confernces - confernces выдает Internal Server Error.
В логах выдает следующее:
192.168.1.103 - - [2021-04-15 08:52:10] "GET /admin/participants/ HTTP/1.1" 200 38637 0.636553
[2021-04-15 08:52:15,000] ERROR in app: Exception on /admin/conference/ [GET]
Traceback (most recent call last):
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functionsrule.endpoint
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/base.py", line 68, in inner
return self._run_view(f, *args, **kwargs)
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/base.py", line 359, in _run_view
return fn(self, *args, **kwargs)
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/model/base.py", line 1655, in index_view
return_url=self._get_list_url(view_args),
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/base.py", line 299, in render
return render_template(template, **kwargs)
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask/templating.py", line 134, in render_template
context, ctx.app)
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask/templating.py", line 116, in _render
rv = template.render(context)
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/jinja2/environment.py", line 1090, in render
self.environment.handle_exception()
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/jinja2/environment.py", line 832, in handle_exception
reraise(*rewrite_traceback_stack(source=source))
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/model/list.html", line 5, in top-level template code
{% import 'admin/actions.html' as actionlib with context %}
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/master.html", line 1, in top-level template code
{% extends admin_base_template %}
File "/home/astmin/astconfman/astconfman/templates/my_master.html", line 1, in top-level template code
{% extends 'admin/base.html' %}
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 30, in top-level template code
{% block page_body %}
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 69, in block "page_body"
{% block body %}{% endblock %}
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/model/list.html", line 54, in block "body"
{% block model_list_table %}
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/model/list.html", line 100, in block "model_list_table"
{% block list_row scoped %}
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/model/list.html", line 153, in block "list_row"
{{ get_value(row, c) }}
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/model/base.py", line 1512, in get_list_value
value = self._get_field_value(model, name)
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/model/base.py", line 1494, in _get_field_value
return rec_getattr(model, name)
File "/home/astmin/astconfman/env/lib/python2.7/site-packages/flask_admin/tools.py", line 81, in rec_getattr
return reduce(getattr, attr.split('.'), obj)
File "/home/astmin/astconfman/astconfman/models.py", line 64, in _is_locked
return asterisk.confbridge_is_locked(self.number)
File "/home/astmin/astconfman/astconfman/asterisk.py", line 152, in confbridge_is_locked
return confbridge_get(confno)['locked']
File "/home/astmin/astconfman/astconfman/asterisk.py", line 128, in confbridge_get
output = _cli_command('confbridge list')
File "/home/astmin/astconfman/astconfman/asterisk.py", line 21, in _cli_command
raise Exception(output)
Exception: Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
192.168.1.103 - - [2021-04-15 08:52:15] "GET /admin/conference/ HTTP/1.1" 500 426 0.065050

Кто нибудь с подобным сталкивался? Спасибо.

asterisk/confprofile - NOTAUTH

Hi!
GET http://{AST_IP}:5000/asterisk/confprofile/601 - NOTAUTH

Asterisk server not authorized to call URLs - check config.py

Can be more? There is documentation on setting up?

"Profiles" Tab

When logging into the web-interface "Profiles" tab isn't visible, also when clicking on "Home" tab it dissapears. Please fix it:)

Ошибка импорта из csv

При импорте из csv , если имена на русском - ошибка. На англ - импортируются успешно.

Не запускается

You are using pip version 9.0.1, however version 20.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
(env) [root@asterisk-main astconfman]# cd astconfman
(env) [root@asterisk-main astconfman]# ./manage.py init
Traceback (most recent call last):
File "./manage.py", line 6, in
from flask_security import utils
File "/var/www/html/astconfman/astconfman/env/lib/python2.7/site-packages/flask_security/init.py", line 13, in
from .core import Security, RoleMixin, UserMixin, AnonymousUser, current_user
File "/var/www/html/astconfman/astconfman/env/lib/python2.7/site-packages/flask_security/core.py", line 28, in
from .forms import ChangePasswordForm, ConfirmRegisterForm,
File "/var/www/html/astconfman/astconfman/env/lib/python2.7/site-packages/flask_security/forms.py", line 69, in
email_validator = Email(message='INVALID_EMAIL_ADDRESS')
File "/var/www/html/astconfman/astconfman/env/lib/python2.7/site-packages/wtforms/validators.py", line 332, in init
raise Exception("Install 'email_validator' for email validation support.")
Exception: Install 'email_validator' for email validation support.
(env) [root@asterisk-main astconfman]# ./run.py
Traceback (most recent call last):
File "./run.py", line 4, in
from app import app
File "/var/www/html/astconfman/astconfman/app.py", line 12, in
from flask_security import Security, SQLAlchemyUserDatastore,
File "/var/www/html/astconfman/astconfman/env/lib/python2.7/site-packages/flask_security/init.py", line 13, in
from .core import Security, RoleMixin, UserMixin, AnonymousUser, current_user
File "/var/www/html/astconfman/astconfman/env/lib/python2.7/site-packages/flask_security/core.py", line 28, in
from .forms import ChangePasswordForm, ConfirmRegisterForm,
File "/var/www/html/astconfman/astconfman/env/lib/python2.7/site-packages/flask_security/forms.py", line 69, in
email_validator = Email(message='INVALID_EMAIL_ADDRESS')
File "/var/www/html/astconfman/astconfman/env/lib/python2.7/site-packages/wtforms/validators.py", line 332, in init
raise Exception("Install 'email_validator' for email validation support.")
Exception: Install 'email_validator' for email validation support.
(env) [root@asterisk-main astconfman]# ls -l /var/spool/
итого 28
drwxr-xr-x. 2 root root 4096 мар 31 2016 anacron
drwxr-xr-x 12 root root 4096 май 2 14:20 asterisk
drwx------. 2 root root 4096 мар 31 2016 cron
drwxr-xr-x. 2 root root 4096 авг 12 2015 lpd
drwxrwxr-x. 2 root mail 4096 май 4 02:00 mail
drwxr-xr-x. 2 root root 4096 ноя 20 2015 plymouth
drwxr-xr-x. 16 root root 4096 июл 12 2016 postfix
(env) [root@asterisk-main astconfman]#

На адрес http://192.168.3.23:5000/ не идет

[root@asterisk-main ~]# sudo netstat -tulpn | grep LISTEN
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2280/rsync
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4071/mysqld
tcp 0 0 127.0.0.1:5038 0.0.0.0:* LISTEN 5064/asterisk
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3947/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2586/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3993/master
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 3947/named
tcp 0 0 0.0.0.0:4445 0.0.0.0:* LISTEN 5650/fop2_server
tcp6 0 0 :::873 :::* LISTEN 2280/rsync
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::80 :::* LISTEN 3388/httpd
tcp6 0 0 :::2224 :::* LISTEN 2265/ruby
tcp6 0 0 ::1:53 :::* LISTEN 3947/named
tcp6 0 0 :::22 :::* LISTEN 2586/sshd
tcp6 0 0 ::1:25 :::* LISTEN 3993/master
tcp6 0 0 ::1:953 :::* LISTEN 3947/named
[root@asterisk-main ~]#

The web interface does not refresh automatically

Hi!
Web Interface is not updated automatically when you call

log .py:
172.16.202.9 - - [2016-05-20 14:19:39] "GET /admin/conference/3/invite_guest?phone=123 HTTP/1.1" 302 909 1.036898
172.16.202.9 - - [2016-05-20 14:19:39] "GET /admin/conference/details/?id=3 HTTP/1.1" 200 17013 0.230696
172.16.202.9 - - [2016-05-20 14:19:39] "GET /asterisk/online_participants.json/617?=1463743128481 HTTP/1.1" 200 440 0.031965
127.0.0.1 - - [2016-05-20 14:19:42] "GET /asterisk/enter_conference/617/123 HTTP/1.1" 200 117 0.175957
127.0.0.1 - - [2016-05-20 14:19:55] "GET /asterisk/leave_conference/617/123 HTTP/1.1" 200 117 0.186431
172.16.202.9 - - [2016-05-20 14:19:56] "GET /asterisk/online_participants.json/617?
=1463743128482 HTTP/1.1" 200 440 0.039122
172.16.202.9 - - [2016-05-20 14:19:56] "GET /asterisk/online_participants.json/617?_=1463743128483 HTTP/1.1" 200 440 0.028272

I think it should look like this:
... /asterisk/enter_conference/617/123 ... - enter in conference
... /asterisk/online_participants.json/617? ... - update web
... /asterisk/leave_conference/617/123 ... - leave conference
... /asterisk/online_participants.json/617? ... - update web

What could be the problem?

cannot create / edit entries

The Server starts up ok. I can login using the default admin/admin user and view the data, and all looks fine, etc.

But when I try to edit an existing entry or create a new entry it fails with output similar to the following. The log output was generated when I tried to create a new conference room. I get similar errors when I try to add a new user/role or participant/contact

(n.b. I had SQLALCHEMY_ECHO set to True below, but get the same error if it is False).

Browser shows "Internal server error".

2018-01-19 15:55:38,834 INFO sqlalchemy.engine.base.Engine (1,)
2018-01-19 15:55:39,010 INFO sqlalchemy.engine.base.Engine SELECT conference_profile.id AS conference_profile_id, conference_profile.name AS conference_profile_name, conference_profile.max_members AS conference_profile_max_members, conference_profile.record_conference AS conference_profile_record_conference, conference_profile.internal_sample_rate AS conference_profile_internal_sample_rate, conference_profile.mixing_interval AS conference_profile_mixing_interval, conference_profile.video_mode AS conference_profile_video_mode, conference_profile.user_id AS conference_profile_user_id 
FROM conference_profile
2018-01-19 15:55:39,018 INFO sqlalchemy.engine.base.Engine ()
Traceback (most recent call last):
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/gevent/pywsgi.py", line 935, in handle_one_response
    self.run_application()
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/gevent/pywsgi.py", line 908, in run_application
    self.result = self.application(self.environ, self.start_response)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/base.py", line 68, in inner
    return self._run_view(f, *args, **kwargs)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/base.py", line 359, in _run_view
    return fn(self, *args, **kwargs)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/model/base.py", line 1702, in create_view
    return_url=return_url)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/base.py", line 299, in render
    return render_template(template, **kwargs)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/templating.py", line 134, in render_template
    context, ctx.app)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask/templating.py", line 116, in _render
    rv = template.render(context)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/jinja2/environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/src/astconfman-origin/astconfman/templates/conference_create.html", line 7, in top-level template code
    {%- trans -%}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/model/create.html", line 6, in top-level template code
    <input name="_continue_editing" type="submit" class="btn btn-default" value="{{ _gettext('Save and Continue Editing') }}" />
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/master.html", line 1, in top-level template code
    {% extends admin_base_template %}
  File "/home/user/src/astconfman-origin/astconfman/templates/my_master.html", line 1, in top-level template code
    {% extends 'admin/base.html' %}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 30, in top-level template code
    {% block page_body %}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 69, in block "page_body"
    {% block body %}{% endblock %}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/model/create.html", line 26, in block "body"
    {{ lib.render_form(form, return_url, extra(), form_opts) }}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
    rv = self._func(*arguments)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/lib.html", line 202, in template
    {% call form_tag(action=action) %}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
    rv = self._func(*arguments)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/lib.html", line 182, in template
    {{ caller() }}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
    rv = self._func(*arguments)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/lib.html", line 203, in template
    {{ render_form_fields(form, form_opts=form_opts) }}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
    rv = self._func(*arguments)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/lib.html", line 166, in template
    {{ r(form, form_opts=form_opts) }}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/form/rules.py", line 109, in __call__
    result.append(r(form, form_opts, field_args))
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/form/rules.py", line 316, in __call__
    return super(Field, self).__call__(form, form_opts, params)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/form/rules.py", line 208, in __call__
    return macro(**opts)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
    rv = self._func(*arguments)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/lib.html", line 130, in template
    {{ field(**kwargs)|safe }}
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/wtforms/fields/core.py", line 153, in __call__
    return self.meta.render_field(self, kwargs)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/wtforms/meta.py", line 56, in render_field
    return field.widget(field, **render_kw)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/form/widgets.py", line 28, in __call__
    return super(Select2Widget, self).__call__(field, **kwargs)
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/wtforms/widgets/core.py", line 287, in __call__
    for val, label, selected in field.iter_choices():
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/contrib/sqla/fields.py", line 106, in iter_choices
    for pk, obj in self._get_object_list():
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/contrib/sqla/fields.py", line 99, in _get_object_list
    self._object_list = [(text_type(get_pk(obj)), obj) for obj in query]
  File "/home/user/src/astconfman-origin/env/local/lib/python2.7/site-packages/flask_admin/contrib/sqla/fields.py", line 255, in get_pk_from_identity
    cls, key = identity_key(instance=obj)
ValueError: too many values to unpack
Fri Jan 19 15:55:39 2018 {'REMOTE_PORT': '56592', 'HTTP_HOST': 'localhost:5000', 'REMOTE_ADDR': '127.0.0.1', (hidden keys: 25)} failed with ValueError

127.0.0.1 - - [2018-01-19 15:55:39] "GET /admin/conference/new/?url=%2Fadmin%2Fconference%2F HTTP/1.1" 500 161 0.328541

Add a timestamp to a conference log event

Hi,
It would be great to see a timestamp as it is unclear whether entering a conference event is related to this specific ongoing conference or occured a while ago. I made dump changes at one of files but do think that this improvement might be useful for others.

ss-noservice

extensions.conf
line 93
same => n,Playback(conf-locked) instead of same => n,Playback(ss-noservice)

manage.py init does not work!!! Please help me somebody!!!

(env) root@ubnt1804-confman:/usr/src/astconfman/astconfman# ./manage.py init
/usr/src/astconfman/astconfman/env/local/lib/python2.7/site-packages/flask_sqlalchemy/init.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.
'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
Traceback (most recent call last):
File "./manage.py", line 12, in
from app import app, db, migrate, user_datastore
File "/usr/src/astconfman/astconfman/app.py", line 150, in
from views import asterisk
File "/usr/src/astconfman/astconfman/views.py", line 4, in
from crontab import crontab
ImportError: No module named crontab

I need help getting the astconfman installation finished, but I can not get out of the initial stage of manage.py as described above!
I tried to add a user according to the orientation at the end of the page (To fix it add user running astwebconf to asterisk group.), But without success!
Can any kind soul help me solve this?

No react?

Hi

I was looking for a project that used asterisk and react. Did the direction of the project change? React not used and some other templating?

Cheers
Mylo

Проблема с установкой на FreePBX Centos 7

Здравствуйте. Возникла проблема с установкой на FreePBX. Подскажите что не так? Может есть пример для Free
PBX?
PBX Version:15.0.17.34
PBX Distro:12.7.8-2011-5.sng7
Asterisk Version:17.7.0
Screenshot 2021-05-27 135423
Screenshot 2021-05-27 135925

Python 2.7 EOL on January 1st, 2020

Whenever I start up astconfman I get told:

Python 2.7 will reach the end of its life on January 1st, 2020.
Is anyone working on updating the version of Python used?

Входящие звонки в конференцию

Добрый день. А возможно ли реализовать так, чтобы те, кто самостоятельно звонят в конференцию отображались в логах? Я так понимаю их нужно каким-то образом запихать в контекст confman-dialout.

Номера телефонов в конференции

Добрый день! Огромное спасибо за ваш труд. Вопрос: у меня не отображаются номера участвующие в конференции. Отображаются квадратики и можно открыть выпадающий список. Они и не должны отображаться или я что-то не доделал. Спасибо еще раз за ваш продукт.

error manage init

./manage.py init
/root/astconfman/env/lib/python2.7/site-packages/flask_sqlalchemy/init.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.
warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.')
Traceback (most recent call last):
File "./manage.py", line 8, in
from app import app, db, migrate, user_datastore
File "/root/astconfman/astconfman/app.py", line 40, in
from flask_bootstrap import Bootstrap
ImportError: No module named flask_bootstrap

init error again

./manage.py ini
/home/asterisk/astconfman/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py:834: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICAT                                                                                                    IONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
Traceback (most recent call last):
  File "./manage.py", line 8, in <module>
    from app import app, db, migrate, user_datastore
  File "/home/asterisk/astconfman/src/app.py", line 150, in <module>
    from views import asterisk
  File "/home/asterisk/astconfman/src/views.py", line 8, in <module>
    from flask_admin.contrib.sqla.ajax import QueryAjaxModelLoader
  File "/home/asterisk/astconfman/lib/python2.7/site-packages/flask_admin/contrib/sqla/__init__.py", line 1, in <module>
    from .view import ModelView
  File "/home/asterisk/astconfman/lib/python2.7/site-packages/flask_admin/contrib/sqla/view.py", line 15, in <module>
    from flask_admin.model import BaseModelView
  File "/home/asterisk/astconfman/lib/python2.7/site-packages/flask_admin/model/__init__.py", line 1, in <module>
    from .base import BaseModelView
  File "/home/asterisk/astconfman/lib/python2.7/site-packages/flask_admin/model/base.py", line 14, in <module>
    from flask_admin.form import BaseForm, FormOpts, rules
  File "/home/asterisk/astconfman/lib/python2.7/site-packages/flask_admin/form/__init__.py", line 6, in <module>
    from .upload import *
  File "/home/asterisk/astconfman/lib/python2.7/site-packages/flask_admin/form/upload.py", line 4, in <module>
    from werkzeug import secure_filename
ImportError: cannot import name secure_filename

manage.py doesn't resolve a dependency although it's installed.

astconfman]# ./manage.py init Traceback (most recent call last): File "./manage.py", line 4, in <module> from flask.ext.babelex import gettext

`pip2.7 list
Package Version


alembic 0.9.9
Babel 2.6.0
blinker 1.4
click 6.7
dominate 2.3.1
Flask 1.0.2
Flask-Admin 1.3.0
Flask-BabelEx 0.9.3
Flask-Bootstrap 3.3.7.1
Flask-Login 0.4.1
Flask-Mail 0.9.1
Flask-Migrate 2.2.1
Flask-Principal 0.4.0
Flask-Script 2.0.6
Flask-Security 3.0.0
Flask-SQLAlchemy 2.3.2 `

Интеграция с AD

  1. В идеале, при создании собрания в котором участвует конференц-комната в Exchange, стартовать конференцию.
    1. Участники и время должно браться из собрания на стороне эксченджа.
    2. контакты желательно тащить из GALa. (Global address list)

./manage.py init

(env)root@OpenMeetings:/var/www/astconfman/astconfman# ./manage.py init
/var/www/astconfman/env/local/lib/python2.7/site-packages/flask_sqlalchemy/init.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.
warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.')
/var/www/astconfman/env/local/lib/python2.7/site-packages/flask_admin/model/base.py:1139: UserWarning: Fields missing from ruleset: participants,logs
warnings.warn(text)
/var/www/astconfman/env/local/lib/python2.7/site-packages/flask_admin/model/base.py:1139: UserWarning: Fields missing from ruleset: participants,user,logs
warnings.warn(text)
/var/www/astconfman/env/local/lib/python2.7/site-packages/flask_admin/model/base.py:1139: UserWarning: Fields missing from ruleset: user
warnings.warn(text)

./manage.py init

root@astconfman:/etc/astconfman/astconfman# ./manage.py init
Traceback (most recent call last):
File "./manage.py", line 8, in
from app import app, db, migrate, user_datastore
File "/etc/astconfman/astconfman/app.py", line 14, in
from flask_sqlalchemy import SQLAlchemy, models_committed
File "/etc/astconfman/env/local/lib/python2.7/site-packages/flask_sqlalchemy/init.py", line 27, in
from sqlalchemy.declarative import DeclarativeMeta, declarative_base
ImportError: No module named declarative

pip2.7 list
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Package Version


alembic 1.0.8
Babel 2.6.0
blinker 1.4
Click 7.0
dominate 2.3.5
Flask 1.0.2
Flask-Admin 1.3.0
Flask-BabelEx 0.9.3
Flask-Bootstrap 3.3.7.1
Flask-Login 0.4.1
Flask-Mail 0.9.1
Flask-Migrate 2.4.0
Flask-Principal 0.4.0
Flask-Script 2.0.6
Flask-Security 3.0.0
Flask-SQLAlchemy 2.3.2
Flask-WTF 0.14.2
gevent 1.4.0
greenlet 0.4.15
itsdangerous 1.1.0
Jinja2 2.10
Mako 1.0.7
MarkupSafe 1.1.1
passlib 1.7.1
pip 19.0.3
pkg-resources 0.0.0
python-crontab 2.3.6
python-dateutil 2.8.0
python-editor 1.0.4
pytz 2018.9
setuptools 40.8.0
six 1.12.0
speaklater 1.3
SQLAlchemy 1.2.0b3
transliterate 1.10.2
uWSGI 2.0.18
visitor 0.1.3
Werkzeug 0.14.1
wheel 0.33.1
WTForms 2.2.1

Не могу понять что не так :(

Разделение доступа пользователей к элементам списков

Добрый день! Большое спасибо за систему.
Столкнулся с проблемой: пользователи (Модераторы конференций) не видят конференц-комнаты, созданные другими Модераторами. Есть ли способ настроить логику построения списков так, чтобы конференции и контакты отдавались всем пользователям, без необходимости вручную добавлять к каждому элементу списка пользователей, у которых есть права на просмотр?

How do you dial in as an administrator of a conference?

Hi,

I am unsure how to setup a marked conference call user/organizer to be identified by say a pin number so that they can start the call and not just by their calling number. If the user/organizer is not by his phone and dials in, how can he start a conference bridge that has the setting to "wait marked:user must wait for another marked user to enter before joining the conference."?

Не отображаются подключения и логи

Система супер! Работает, в целом, как надо.
Правда при старте /.run.py
пишет:
/home/astconfman/env/lib/python2.7/site-packages/flask_admin/model/base.py:1139: UserWarning: Fields missing from ruleset: participants,logs
warnings.warn(text)
/home/astconfman/env/lib/python2.7/site-packages/flask_admin/model/base.py:1139: UserWarning: Fields missing from ruleset: participants,user,logs
warnings.warn(text)
/home/astconfman/env/lib/python2.7/site-packages/flask_admin/model/base.py:1139: UserWarning: Fields missing from ruleset: user
warnings.warn(text)

И что самое проблемное -не отображаются логи о подключении и значки подключенных телефонов.
Нажимаю "пригласить всех участников" или приглашаю отдельно... все работает, но в веб-морде ничего не отображается...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.