0 / 0 / 0
Регистрация: 27.10.2022
Сообщений: 35
1

Как создавать свои правила/контексты обработки телефонных звонков FreePBX (asterisk)

11.04.2024, 14:13. Показов 703. Ответов 1

Author24 — интернет-сервис помощи студентам
Интересная задача...
Как организовать массовое оповещение (тревогу) на основе ip телефонии на asterisk-FreePBX.

Как вообще это вижу - при наборе на определенной группе телефонов номера 9999, этот номер 9999 отправляет "широковещательный звонок" на все телефоны в компании, все телефоны принимают звонок, включают громкую сзязь (spiker) и проигрывают один аудиофайл.

Проблемы которые надо решать:
1) Т.К. это не чистый asterisk, а именно c FreePBX. То не понятно, как создавать контексты для звонков.
В FreePBX есть вкладка Admin->Custom Destinations и вроде как в ней возможно прописать контекст и просто перенаправлять вызов на этот контекст. Но не понятно, где должен лежать сам контекст и как он должен называться?
ОЧЕНЬ ПРОШУ, если есть тот кто понимает, как правильно должен быть задан контекст в Admin->Custom Destinations. Пришлите пожалуйста какой путь используется для файла контекстов Custom Destinations, например, /var/asterisk/extensions_custom.conf и пример контекста которым можно было точно проверить работу.

2)Где должен лежать аудио файл для проигрывания? или же все равно, так как он из контекста вызывается playback().

Изучал информацию по этим ссылкам, но они не помогли с этими вопросами:
https://habr.com/ru/articles/142895/
https://voxlink.ru/kb/freepbx/custom-destination/
https://koobik.net/asterisk-em... on-system/
https://wiki.merionet.ru/artic... freepbx-13

Если удасться рушить эту задачу выложу подробное описание.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2024, 14:13
Ответы с готовыми решениями:

FreePBX отладка звонков
FreePBX 15.0.16.49 Настраиваю внешний транк от провайдера , транк с регистрацией. Перед тем как...

Asterisk+freepbx+cisco7940
Уже который день не могу заставить работать циску 7940 с астериском, уже просто руки опустились...

Не работает FreePBX 15 на Asterisk 16
Всем привет! Поставил FreePBX на CentOS 8. При попытке зайти в админку...

Скрестить Asterisk с исходниками и FREEpbx
Есть такая задумка, поднять фрипбикс и на нём завести внутреннии номера и поднять астериск с...

CALL центр на FreePBX,Asterisk
Доброго времени суток! Задача поднять собственный колцентр в FreePBX нашел платный модуль, его...

1
0 / 0 / 0
Регистрация: 27.10.2022
Сообщений: 35
22.04.2024, 13:58  [ТС] 2
Вообщем никто так и не ответил...... А было бы попроще(

НУ. Кому надо будет "как настроить многоадресные звонки, или экстренне оповещение на asterisk + FreePBX" Вот 2 файла: (для удобочитаемости скачайте бесплатный Obsidian - бесплатный на 2024 год редактор и засунте текст в файл типа .md)

Код
#Custom_destinations #FreePBX

Custom destinations позволяет ссылаться на логику, которую вы описали вручную в файле **/etc/asterisk/extensions_custom.conf**
Стандартная директория для аудиофайлов **/var/lib/asterisk/sounds/en** внутри есть директория **custom** в которой располагаются аудиофайлы загруженные через FreeBPX.

> [!NOTE] Например, задача может быть сформулирована так:
> При звонке на номер 9999 с определенных номеров телефонов (например, с 1002 и 1004) выполняется скрипт обзваона всех пользователей и проигрывания им сообщения (аудиофайла)

### Asterisk + FreePBX

Файлы FreePBX отвечающие за контексты звонков:
- **/etc/asterisk/extensions_custom.conf**  - пользовательские
- **/etc/asterisk/extensions.conf**  -  является основным файлом конфигурации диалплана Asterisk.
- **/etc/asterisk/extensions_additional.conf**  -  для хранения дополнительных диалпланов и правил, которые были добавлены через веб-интерфейсы или другие утилиты управления.

В FreePBX раздел **Admin -> Custom destinations** отвечает за направление звонков на нужный контекст. *В нашем случае на 9999.*
В разделе **Admin -> Config edit** возможно редактирование файлов конфигурации. Допустимо изменение только не системных Conf. Системные можно изменить через ssh под rootUser.

В файл **/etc/asterisk/extensions_custom.conf** добавляем контексты:
```
; Контекст отвечающий за набор номера указанного в качестве массового 
[alarm_allowed_callers] ;1
exten => _9999,1,NoOp(Получен вызов на номер 9999 от ${CALLERID(num)}) ;2
same => n,Set(ALLOWED_NUMBERS=1002&1004) ;3
same => n,Set(CALLER_ALLOWED=$["${STRREPLACE(ALLOWED_NUMBERS,${CALLERID(num)},)}" = "${ALLOWED_NUMBERS}"]) ;4
same => n,ExecIf($[${CALLER_ALLOWED} = 1]?Hangup()) ;5
same => n(allow),System(/bin/sh /var/spool/asterisk/alarm.sh) ; Вызов скрипта
same => n,Hangup() ;6
   
; Контекст отвечающий за обработку каждого из сгенерированных звонков
[alarm-informer] ;1
exten => 2222,1,SIPAddHeader(Alert-Info: Ring Answer) ;7
exten => 2222,n,Wait(1) 
exten => 2222,n,Playback(custom/4148-top) ;8
exten => 2222,n,Hangup
```
Информация по запросам SQL в базу FreePBX [[Выгрузка внут.номеров из FreeBPX в среду Windows]]. Описано где взять информацию для запроса.

> [!NOTE] Описание
> 1) Название контекста
> 2) Запись в лог
> 3) Настройка списка номеров с которых возможно звонить на номера 9999
> 4) Переменная для сравнения номеров. вычитание из строки подстроки. (строка со всеми номерами - номер звонящего, если поменялось то = 1)
> 5) Сравнение начальной строки с новой строкой. если  строка не изменилась то сбросить звонок
> 6) Завершение
> 7) Автоответ по модифицированному заголовку звонка
> 8) Проигрывание аудиофайла

После необходимо **сохранить** и **принять конфигурацию**.

Если файлы редактировались **не в Web-интерфейсе**, необходимо перезагрузить asterisk или dialplan командой:
```
asterisk -rx "core reload"
```

Теперь создадим файл скрипта  /var/spool/asterisk/alarm.sh, который будет генерировать файлы для автоматических вызовов. Смысл в том чтобы создать файлы с нужными параметрами и поместить в директорию /var/spool/asterisk/outgoing. Файлы попавшие в эту директорию автоматически обрабатываются asterisk и производят вызов по заданным параметрам.
```
nano /var/spool/asterisk/alarm.sh
```
И запишем в него строки:
```
#!/bin/sh
# Asterisk call from list script for FreePBX
# Based on example at http://asterisk-support.ru/forum/topics/267/

pause=1
spooldir=/var/spool/asterisk #1
diallist=/var/spool/asterisk/list_tel.txt #2

echo `date`": Dialing with $pause second pause"

mysql -u freepbxuser -pkupQUwXnytUN -e 'use asterisk; select extension from users WHERE NOT extension = 2222' > $diallist №3

tail -n +2 $diallist | while read number; do #4
echo "Channel: Local/$number #5
MaxRetries: 2 #6
RetryTime: 5 #7
WaitTime: 30 #8
Context: alarm-informer #9
Extension: 2222 #10
Callerid: 2222 #11
Account: autodialer #12
Priority: 1" > /tmp/$number #13

        chmod 777 /tmp/$number #14
        chown asterisk:asterisk /tmp/$number #15
        mv /tmp/$number $spooldir/outgoing #16

        echo "$number" 
        sleep $pause
done #17
echo "Done"
exit 0
```

> [!NOTE] Описание
> 1) Рабочий каталог скрипта и каталог данных asterisk
> 2) Файл в который выгружаются существующие номера в FreePBX, за исключением специального номера.
> 3) Запрос для выгрузки номеров из FreePBX
> 4) НАЧАЛО цикла, в котором происходит создание файлов
> 5) = Канал "Внутренние"/"Номер от которого будет совершён вызов"
> 6) = Количество повторных попыток
> 7) = Время в секундах между повторными попытками
> 8) = Этот параметр определяет время в секундах, которое система будет ждать перед началом следующей попытки выполнения диалплана, если предыдущие попытки неудачны.
> 9) = Указывает в рамках какого контекста будет обработан звонок на Extension
> 10) = Extension, принимающая сторона
> 11) = Callerid - Этот параметр устанавливает Caller ID (идентификатор вызывающего) для этого вызова.
> 12) = - Этот параметр обычно используется для учетных записей или аутентификации при вызове.
> 13) Приоритет выполнения приложения в диалплане. И вывод в файл
> 14) Выдаются права на файл
> 15) Права пользователю asterisk:asterisk. Иначе asterisk не сможет обработать файлы
> 16) Перемещение файлов из временной директории в outgoing
> 17) КОНЕЦ цикла

**Custom Destinations** специальное назначение в FreePBX:
<имя контекста>,<номер или диапазон>,<приоритет, обычно 1>
```
<context name>,<extensions>,<prioritet> 

Пример:
my_conf,s,1 
```
![[Custom Destinations.png]]
Создаем виртуальный номер 2222 и в настройках, при не ответе, перенаправляем на это назначение.


> [!NOTE] Заметка
> Если созданное направление уже назначено каким то телефонам, то в редакции этого расширения появляется строка выбора, и не важно что фактически такого расширения нет в файлах, отображаются те что присвоены телефонам.

Ну и последний шаг. это поправить конфигурации/настройки каждому телефону. На основе **Grandstream GPX1610/1615** ->
В настройках учетной записи (аккаутна) -> Настройка вызовов -> 
		-> Автоответ - Да
		-> Номер автоотвера - 2222 (С которого/ых звонят. Если пуст, то отвечает на все) 

> [!NOTE] Заметка
> *Возможно как то можно настроить и на заголовок который прописывали в скрипте, так же возможно что он там не к месту, так что можно убрать и заменить на просто Answer(), работать будет так же*

 Если используется tftp server то просто каким-нибудь скриптом дописать в каждый файл параметры, соответственно:
```
P90=1
P29064=2222
```
 
#### ДОПЫ

dialplan reload - перезагрузка dealplan
core restart now - перезагрузка asterisk
asterisk -rx "core restart now"
asterisk -rxvvvv - asterisk CLI, просмотр логов в реальном времени
fwconsole reload - перезагрузка FreePBX

 systemctl restart asterisk & asterisk -rx "core reload" & asterisk -rx "dialplan reload" & fwconsole reload

Смена ip-адреса на FreePBX в файле:
nano /etc/sysconfig/network-scripts/ifcfg-eth0
По поводу запросов в MariaDB FreePBX:

Код
#SSH #PowerShell #FreePBX #BDFreePBX #Внетренние_номера 
**Задача:** Синхронизировать внутренние номера АТС Asterisk на WEB интерфейсе FreePBX c Active Directory, так что бы при добавлении или изменении номера в FreePBX, был обновлен номер у данного человека в AD.

---

> [!NOTE]
>  *Для разрешения подключения к базам данных FreePBX с другого компьютера с использованием MariaDB, вам нужно сделать следующее:*
> 
> 1. *Убедитесь, что у вас установлен и работает сервер MariaDB на вашем FreePBX сервере. Если сервер MariaDB не установлен, установите его и настройте.*
>  2. *Откройте файл настроек MariaDB на вашем FreePBX сервере. Обычно файл называется my.cnf или mariadb.conf и располагается в каталоге /etc/mysql или /etc/my.cnf.d.*
>  3. *Найдите раздел [mysqld] в файле конфигурации MariaDB и добавьте или измените следующие строки:*
> 
> ```
>  /etc/mysql/my.cnf
> ```
>     
>  *[mysqld]*
>    *bind-address = 0.0.0.0*
>    *Это разрешит удаленные подключения к серверу MariaDB с любого IP-адреса.*

-*--*

### **Получение пользователя и пароля для доступа к базе FreePBX:**
```
cat /etc/asterisk/res_odbc_additional.conf 
```
**Пример:**
	[asteriskcdrdb]
	enabled=>yes
	dsn=>MySQL-asteriskcdrdb
	pre-connect=>yes
	max_connections=>5
	username=>freepbxuser
	password=>k6****n***********xmq
	database=>asteriskcdrdb

### **Выводим все имеющиеся базы:**
```
mysql -u freepbxuser -p -e 'show databases;'
```
**Пример:**

+----------------------+
| Database                   |
+----------------------+
| information_schema |
| asterisk                     |
| asteriskcdrdb            |
| iot                             |
| test                            |
+----------------------+

**Просмотр таблиц в БД:**
```
mysql -u freepbxuser -p -e 'use asterisk                  
SHOW TABLES;'
```

### **Вывод всех внут.номеров:**
```
mysql -u freepbxuser -p -e 'use asterisk
select extension, name from users'
```

**Пример:**
+-----------+----------------------------------------------------+
| extension  | name                                                                    |
+-----------+----------------------------------------------------+
| 3696          | КОС                                                                     |
| 3483          | Дули О.В.                                                           |
  ...                 ...


### **SSH запрос к BD FreePBX через Powershell:**

Для начала нам нужно установить модуль Posh-SSH. И с помощью него создавать запрос по SSH в базу FreeBPX.

Скачиваем модуль по ссылке https://www.powershellgallery.com/packages/Posh-SSH/3.1.3 и закидывает в папку
```
C:\Program Files\WindowsPowerShell\Modules\Posh-SSH\
```
После остается только импортировать модуль и выполнить действия
```
Import-Module -Name Posh-SSH

$Session = New-SSHSession -ComputerName 10.0.6.1 -Credential root

$Command = "mysql -u freepbxuser -pk6pngCnZixmq -e 'use asterisk; select extension, name from users'"

$SSH_Result = (Invoke-SSHCommand -SessionId $Session.SessionId -Command $Command).Output
```
0
22.04.2024, 13:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2024, 13:58
Помогаю со студенческими работами здесь

Обработка телефонных звонков
есть ли какой нибудь обработчик телефонных звонков?? Ну чтобы можно было отследить момент когда...

Запись телефонных звонков
Добрый день. Поставлена задача приобрести комплекс для записи телефонных разговоров. Сам...

Два сервера (Asterisk+FreePBX) Содействие новичку=)
Доброго времени всем!. Я новичок в телефонии,потихоньку копаю Asterisk+FreePBX. Имею 2 сервера...

Программа для приёма заказов (телефонных звонков)
стоит задача: Написать программу которая бы автоматизировала процесс приёма заказов (доставка еды)...

Настройка входящих звонков Asterisk + Elastix
Добрый день ув. форумчане! 1)Настроил две Эластичных АТСки, подключил транки провайдеров для...

Можно ли написать программу для приёма-совершения телефонных звонков на ассемблере?
Хочу сделать кнопочник-смартфон на kolibriOS. А без программы для вызовов никак.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru