ASTERISK 19, 20, 21 REALTIME на DEBIAN 12

Астериск быстро развивается и устаревают все руководства по его настройке. Сегодня мы расскажем как сконфигурировать ASTERISK для использования механизма REALTIME с помощью MARIADB.
После исчерпывающего исследования в интернете и множества поисковых запросов в Google мы обнаружили, что информация о Asterisk RealTime слишком стара. Большинство из нее датируется примерно 2005 или, в лучшем случае, 2015 годом. По-видимому, никого не интересовало распространение знаний об этом интересном способе программирования Asterisk.

Рекомендации

Мы не рекомендуем использовать Dial Plan в режиме реального времени. Если у нас есть Dial Plan, который слишком велик, то каждый раз, когда мы совершаем вызов, запросы к базе данных могут перегрузить систему. В этом руководстве мы используем Debian 12 , однако вы можете использовать Ubuntu , если хотите. Имейте в виду следующие приложения: meetme , с нескольких версий назад был заменен на confbridge , который в настоящее время не поддерживает DB. SIP , c версии 19 Asterisk SIP устарел , однако в этом руководстве мы рассмотрим этот тип устройств. Никогда не выполняйте эту реализацию на рабочем сервере. Протестируйте сначала и убедитесь, что все работает. Если у вас не установлен ASTERISK, установите его по нашему руководству.

  apt install -y unixodbc odbcinst mariadb-client mariadb-server odbc-mariadb

  systemctl enable mariadb

  systemctl start mariadb
Установим Python 3

  apt install python3-pip -y
Запустим виртуальную среду:

  python3 -m venv asterisk
Перейдем в нее:

  source asterisk/bin/activate
Установим необходимые пакеты:

  pip install mysql-connector-python

  pip install alembic

  pip install mysqlclient

  pip install "importlib_metadata==1.5.2"

  pip install "zipp==1.2.0"

  pip install "configparser==3.8.1"
Деактивируем среду

  deactivate

  cd /usr/src/asterisk-19.4.1/contrib/ast-db-manage/

  mv config.ini.sample config.ini
Внесем изменения:

  nano config.ini

  Заменим эту строчку:
  sqlalchemy.url = mysql://user:pass@localhost/asterisk
  на:
  sqlalchemy.url = mysql://root:@localhost/asterisk
Создадим БД:

  mysql -u root 

  create database asterisk;
  exit;
Импортируем:

  alembic -c config.ini upgrade head
Создадим пользователя, зададим привелегии:

  mysql -u root 

  use asterisk;
  grant all privileges on asterisk.* to 'asterisk'@'localhost' identified by 'asterisk';
  FLUSH Privileges;
  exit;
Отразим это в конфигурационных файлах:

  nano /etc/odbc.ini

  [asterisk]
  Description = MySQL Asterisk
  Driver = MariaDB Unicode
  Database = asterisk
  Server = localhost
  User = asterisk
  Password = asterisk
  Port = 3306
  Socket = /var/run/mysqld/mysqld.sock

  nano /etc/odbcinst.ini

  [MariaDB Unicode]
  Driver=libmaodbc.so
  Description=MariaDB Connector/ODBC(Unicode)
  Threading=0
  UsageCount=1
Проверим:

  odbcinst -j 

  isql asterisk asterisk asterisk

  +---------------------------------------+
  | Connected!                            |
  |                                       |
  | sql-statement                         |
  | help [tablename]                      |
  | quit                                  |
  |                                       |
  +---------------------------------------+

  quit;

  nano /etc/asterisk/res_odbc.conf

  [asterisk]
  enabled => yes
  dsn => asterisk
  username => asterisk
  password => asterisk
  pre-connect => yes
  sanitysql => select 1
  max_connections => 20
  connect_timeout => 5
  negative_connection_cache => 600

  nano /etc/asterisk/extconfig.conf

  ;
  ; Static and realtime external configuration
  ; engine configuration
  ;
  ; See https://wiki.asterisk.org/wiki/display/AST/Realtime+Database+Configuration
  ; for basic table formatting information.
  ;
  [settings]
  ps_endpoints => odbc,asterisk
  ps_auths => odbc,asterisk
  ps_aors => odbc,asterisk
  ps_domain_aliases => odbc,asterisk
  ps_endpoint_id_ips => odbc,asterisk
  ps_contacts => odbc,asterisk
  voicemail => odbc,asterisk
  queues => odbc,asterisk
  queue_members => odbc,asterisk
  sipusers => odbc,asterisk
  sippeers => odbc,asterisk
  extensions => odbc,asterisk

  nano /etc/asterisk/pjsip.conf

  [system]
  type=system
  timer_t1=500
  timer_b=32000
  disable_tcp_switch=yes

  [transport-tcp]
  type=transport
  protocol=tcp
  bind=0.0.0.0:5060
  allow_reload=yes

  [transport-udp]
  type=transport
  protocol=udp
  bind=0.0.0.0:5060
  allow_reload=yes

  [transport-tls]
  type=transport
  protocol=tls
  bind=0.0.0.0:5061
  allow_reload=yes
  verify_client=no
  verify_server=no
  method=tlsv1

  [transport-ws]
  type=transport
  protocol=ws
  bind=0.0.0.0:5060
  allow_reload=yes

  [transport-wss]
  type=transport
  protocol=wss
  bind=0.0.0.0:5061
  allow_reload=yes

  nano /etc/asterisk/sorcery.conf

  [res_pjsip]
  endpoint=realtime,ps_endpoints
  auth=realtime,ps_auths
  aor=realtime,ps_aors
  domain_alias=realtime,ps_domain_aliases

  [res_pjsip_endpoint_identifier_ip]
  identify=realtime,ps_endpoint_id_ips

  nano /etc/asterisk/modules.conf

  ;
  ; Asterisk configuration file
  ;
  ; Module Loader configuration file
  ;
  [modules]
  autoload=yes
  preload => res_odbc.so
  preload => res_config_odbc.so
  load => func_realtime.so
  load => pbx_realtime.so

  systemctl restart asterisk

  asterisk -rvvvvvvvvvvvv

  localhost*CLI>
  odbc show
  ODBC DSN Settings
  -----------------
  Name:   asterisk
  DSN:    asterisk
  Number of active connections: 1 (out of 20)
  Logging: Disabled
  localhost*CLI>

  mysql -u root
  

      use asterisk;
      insert into ps_aors (id, max_contacts, qualify_frequency) values (100, 2, 30);
      insert into ps_auths (id, auth_type, password, username) values (100, 'userpass', 100, 100);
      insert into ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media, deny, permit, mailboxes) values (100, 'transport-udp', '100', '100', 'testing', 'all', 'ulaw,alaw,gsm', 'no', '0.0.0.0/0', '0.0.0.0/0', '100@default');
      insert into ps_aors (id, max_contacts, qualify_frequency) values (101, 2, 30); 
      insert into ps_auths (id, auth_type, password, username) values (101, 'userpass', 101, 101); 
      insert into ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media, deny, permit, mailboxes) values (101, 'transport-udp', '101', '101', 'testing', 'all', 'ulaw,alaw,gsm', 'no', '0.0.0.0/0', '0.0.0.0/0', '101@default');
      exit;
    

      asterisk -rvvvvvvvvvvvvvvvvvv
    

      pjsip show endpoints 
    

      nano /etc/asterisk/extensions.conf
    

      [general]
      [testing]
      exten => _1XX,1,NoOp()
      same => n,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})})
      same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
      same => n(unavail),Voicemail(${EXTEN}@default,u)
      same => n,Hangup()
      same => n(busy),VoiceMail(${EXTEN}@default,b)
      same => n,Hangup()

      ;Retrieve Voicemail message
      exten => *97,1,NoOp(Retrieve VM from Extension ${CALLERID(number)})
      same => n,Answer()
      same => n,VoiceMailMain(${CALLERID(num)}@default)
    

      asterisk -rvvvvvvvvvvvvvvvvvvvv
    

      dialplan reload
    

Голосовая почта


      mysql -u root
    

      use asterisk;
      insert into voicemail (context, mailbox, password, attach, saycid, envelope) values ('default', '100', '100', 'yes', 'yes', 'yes');
      insert into voicemail (context, mailbox, password, attach, saycid, envelope) values ('default', '101', '101', 'yes', 'yes', 'yes');
      exit;
    

Очереди


      mysql -u root
    

      use asterisk;
      insert into queues (name, musiconhold, timeout, ringinuse, queue_holdtime, retry, wrapuptime, strategy) values ('Q500', 'default', '15', 'no', '30', '5', '5', 'ringall');
      insert into queue_members (queue_name, interface, membername, penalty, wrapuptime) values ('Q500', 'Local/101@testing/n', '101', '0', '5');
      exit;
    

      asterisk -rvvvvvvvvvvvvvvvvvvvvvvv
    

      localhost*CLI>
      queue show Q500
      Q500 has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0%, SL2:0.0% within 0s
      Members:
      101 (Local/101@testing/n) (ringinuse disabled) (realtime) (Not in use) has taken no calls yet
      No Callers
      localhost*CLI>
      exit
    

      nano /etc/asterisk/extensions.conf
    

      ;Call Queue Q500
      exten => 500,1,NoOp(Queue: Testing 500)
      same => n,Playback(queue-youarenext)
      same => n(qconnect),NoOp(Connecting to Queue)
      same => n,Queue(Q500,c,,,30)
      same => n,Hangup()
      ;Agent Login & Logout
      exten => *5001,1,NoOp(Queue: Add Agent ${CALLERID(number)} in Queue 500)
      same => n,AddQueueMember(Q500,Local/${CALLERID(number)}@testing/n,0,,${CALLERID(number)},)
      same => n,Playback(agent-loginok)
      exten => *5002,1,NoOp(Queue: Remove Agent ${CALLERID(number} in Queue 500)
      same => n,RemoveQueueMember(Q500,Local/${CALLERID(number)}@testing/n)
      same => n,Playback(agent-loggedoff)
    

      asterisk -rvvvvvvvvvvvvvvvvvvvv
    


      dialplan reload
    

Asterisk realtime

Как создать почту со своим доменом? Установка и настройка почтового сервера CentOS linux (Postfix) Добавление пользователя в Linux, права sudo Crypto Pro на Mac OS Мелкие проблемы и их решения DKIM на Postfix Как заказать российский SSL-сертификат для компаний через Госуслуги Сертификаты Минцифры РФ (российские сертификаты). Как установить? Как восстановить взломанный сервер VmWare *.vmdk CVE-2020-3992 / CryptoLocker Бекап на ЯндексДиск из под Linux Запись образа ISO на флешку в MacOS Как отформатировать и примонтировать зашифрованный диск в Ubuntu / Debian Asterisk подключение модемов Настройка PHP-FPM в связке Apache2 (Ubuntu/Debian) Настройка SSL/TLS соединения MariaDB / MYSQL Собираем почту с других почтовых ящиков с помощью fetchmail Как посмотреть и очистить очередь сообщений POSTFIX Резервная копия (Backup) виртуальных машин ProxMox по NFS (CentOS / Debian 12 / Ubuntu) Установка и настройка OpenVPN на Debian 12 ASTERISK 19, 20, 21 REALTIME на DEBIAN 12 Установка ASTERISK 20 / 21 из исходников на Debian/Ubuntu/Centos nginx debian12
Оставьте комментарий, задайте вопрос