По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Желание использовать данные с внешних сервисов это вполне обычная практика. Так как многие из этих сервисов доступны по HTTP(S) (REST API, например), то в этой статье мы хотим показать простой способ обращения к этим сервисам по cURL и обработку данных в случае, если сервер вернет JSON. Все взаимодействия будут выполняться из диалплана.
Простой cURL запрос
В диалплане Asterisk существует функция CURL, которая позволяет получить содержимое WEB или FTP страницы. Синтаксис запроса следующий:
CURL(url,post-data)
url - URL, к которому мы будем выполнять обращение;
post-data - по умолчанию будет выполнен GET – запрос. Если в данном параметре будут указаны различные значения, то будет выполнен POST запрос с указанными в переменной данными;
Например:
exten => _X.,1,Set(C_RESULT=${CURL(//merionet.ru/rest?num=84991234567)})
Здесь мы выполним GET запрос по указанному URL, а результат сохраним в переменной C_RESULT.
Использование HTTPS в запросах
Иногда, HTTPS запросы могут не срабатывать, так как удаленная сторона будет проверять наш SSL – сертификат. Если поставить параметр ssl_verifypeer=0, то такой проверки не будет:
same => n,Set(CURLOPT(ssl_verifypeer)=0)
Как воспользоваться этим в диалплане?
Легко. С помощью функции GotoIf мы можем определить действие, которое отработает на базе результата cURL:
exten => _X.,1,Set(C_RESULT=${CURL(//merionet.ru/rest?num=84991234567)})
same => n,GotoIf($["${C_RESULT}" = "1"]?res1:res2)
same => n(res1),Verbose(CURL Result = 1)
same => n,Hangup
same => n(res2),Verbose(CURL Result != 1)
same => n,Hangup
Указанный код отправит GET - запрос на rest, в котором в параметре num передаст номер звонящего (можно указать соответствующую переменную диалплана Asterisk). В случае, если результатом выполнения запроса будет 1, то мы перейдем к выполнению шага res1, а противоположном случае, res2.
res_json для обработки JSON ответов
На самом деле, для API, является обычной практикой возврат ответа в виде JSON. Поэтому, нам следует преобразовать эти данные перед обработкой их. Для этого мы воспользуемся модулем res_json из JSON библиотеки, который создан для расширения базовых возможностей диалплана с точки зрения обработки JSON.
Почитайте материал об установке данного модуля по этой ссылке.
exten => _X.,1,Set(C_RESULT=${CURL(//merionet.ru/rest.json)})
same => n,Set(result=${JSONELEMENT(C_RESULT, result/somefield)})
same => n,GotoIf($["${result}" = "1"]?res1:res2)
same => n(res1),Verbose(CURL Result = 1)
same => n,Hangup
same => n(res2),Verbose(CURL Result != 1)
same => n,Hangup
Для теста, создайте у себя на web – сервере файл rest.json со следующим содержанием:
{
"result": {
"somefield": 1
}
}
При первичной настройке Asterisk или дальнейшей отладке очень часто может возникнуть потребность в совершении звонка без использования физического телефона или софтфона.
К примеру, изменились настройки фаерволла, транка или экстеншена и необходимо при каждом изменении совершать тестовые исходящие звонки. Подобную функцию выполняет команда «Dial», но в данном случае необходимо создать так называемый «call» файл, просто текстовый файл, который содержит следующие строки:
Channel: SIP/flowroute/84951112233
MaxRetries: 1
RetryTime: 60
WaitTime: 30
Context: test_forcall
Extension: 1
Priority: 1
Set: variablename=variablevalue
CallerID: Test <84954445566>
Первая строчка определяет канал, который будет использоваться для совершения вызова и экстеншен, в данном случае – любой номер телефона, в данном примере 84951112233. Следующая строка – параметр, определяющий сколько раз Asterisk произведет попыток вызова на данный номер. Далее – временной интервал между вызовами и начальное время ожидания перед первым звонком. Параметр «Context» отвечает соответственно за контекст, через который пойдет вызов, экстеншен и приоритет.
Кроме того, можно настроить CallerID (номер вызывающего абонента), в данном случае - Test <84954445566>.
Для того, что бы Астериск прочел и использовал .call файл, его необходимо поместить в директорию /var/spool/asterisk/outgoing/ - важно, что он должен быть именно перемещён в неё с помощью команды «mv», а не создан в самой директории. Кроме того, необходимо, что бы Астериск имел достаточно прав для того, чтобы удалить этот файл после использования.
Суммируя вышесказанное, необходимо:
Создать .call файл с необходимым наполнением
Настроить необходимые разрешения с помощью команды chmod
chmod 777 callfile.call
3. Переместить файл в директорию для его исполнения командой mv
mv callfile.call /var/spool/asterisk/outgoing/
Так как файл совершает вызов с использованием контекста, экстеншена и приоритета, ниже приведён пример контекста, который использовался для данного примера:
[test_forcall]
exten => 1,1,Answer()
exten => 1,n,Record(/home/test/asterisk_sounds/rec/incoming_call.gsm,5,30)
exten => 1,n,Playback(vm-goodbye)
exten => 1,n,Hangup()
В описании данного контекста нет никакой специфики, кроме того что необходимо зарегистрировать экстеншен с номером 1, так как через него идет вызов (.call файл в начале статьи).
Если изменить дату создания .call файла, то Asterisk совершит вызов в указанный момент. Для этого используется команда touch, как указано ниже.
touch -t YYYYMMDDHHMM.SS filename // формат использования команды
touch -t echo date('YmdHi'); .00 callfile.call // изменение даты файла так, что Asterisk совершит вызов echo date('d');
function getMonthRus($num_month = false){
if(!$num_month){
$num_month = date('n');
}
$monthes = array(
1 => 'января', 2 => 'февраля', 3 => 'марта',
4 => 'апреля', 5 => 'мая', 6 => 'июня',
7 => 'июля', 8 => 'августа',9 => 'сентября',
10 => 'октября', 11 => 'ноября',
12 => 'декабря'
);
$name_month = $monthes[$num_month];
return $name_month;
}
echo getMonthRus(); echo date('Y'); года в echo date('H:i'); .Это если Вы решите позвонить прямо сейчас :)
Если необходимо проверить список файлов, которые ожидают исполнения, необходимо ввести следующую команду:
ls --full-time /var/spool/asterisk/outgoing/
Таким образом, можно генерировать файлы для совершения автодозвона в целях тестирования, в любое необходимое время – к примеру, можно проверять работоспособность АТС в критичные моменты.
Данное улучшение официально было представлено в марте 2020 года и версия 2.0 была опубликована на GitHub.
Очень ценное приложение rdiff-backup позволяет пользователям выполнять резервное копирование каталога в другое удаленное или локальное хранилище. Одной из ключевых преимуществ приложения является его простота. Пользователи могут создавать свои первые резервные копии с помощью одной простой команды:
# rdiff-backup source-dir backup-dir
Чего не было в версии 1.2.8
Основные модификации были сделаны для инструментов разработки, включая Travis Pipeline, автоматизированное тестирование для Linux и Windows, новый Ubuntu PPA, новый Fedora COPR и новый репозиторий Pypi.org.
Эти улучшения призваны помочь пользователям легко перейти на новую версию простым и доступным способом. В соответствии с этими улучшениями, мы включили в выпуск следующую новую визуальную идентичность.
Особенности rdiff-backup
Этот выпуск направлен в основном на обновление и поддержку Python 3.5 и выше в Linux и Windows и поэтому не включает много новых функций по сравнению с предыдущей официальной версией 1.2.8. Тем не менее, он по-прежнему содержит несколько патчей, написанных на протяжении многих лет для различных дистрибутивов Linux, а также некоторые улучшения с точки зрения скорости и эффективности использования доступного места.
Rdiff-backup улучшен для обеспечения эффективного резервного копирования во всех сценариях. Вот несколько особенностей:
Дружелюбный интерфейс
Функция зеркалирования
Отмена стратегии инкрементного хранения резервных копий
Сохранение внутренней информации
Эффективное использование места
Оптимизация использования пропускной способности
Прозрачность всех типов и форматов данных
Автообнаружение файловой системы
Поддержка расширенных атрибутов и атрибутов ACL
Сохранение статистики
Поддержка Linux и Windows; также работает на BSD и macOS X
Установка rdiff-backup на Linux
Установка rdiff-backup как для существующих, так и для новых пользователей одиноков. Ниже приведены несколько команд для развертывания rdiff-backup
Чтобы установить Rdiff-Backup на Ubuntu Focal или Debian Bullseye или новее наберите следующую команду:
$ sudo apt install rdiff-backup
Чтобы установить утилиту на более старые версии Ubuntu^
$ sudo add-apt-repository ppa:rdiff-backup/rdiff-backup-backports
$ sudo apt update
$ sudo apt install rdiff-backup
Чтобы установить Rdiff-Backup на CentoOS или RHEL 7
$ sudo yum install yum-plugin-copr epel-release
$ sudo yum copr enable frankcrawford/rdiff-backup
$ sudo yum install rdiff-backup
Чтобы установить на CentoOS или RHEL 7
$ sudo yum install dnf-plugins-core epel-release
$ sudo dnf copr enable frankcrawford/rdiff-backup
$ sudo yum install rdiff-backup
Для установки на Fedora 32 и выше
$ sudo dnf install rdiff-backup
Для установки Rdiff-Backup на Debian и его производных, Raspbian и т.д. (из PyPi):
$ sudo apt install python3-pip python3-setuptools python3-pylibacl python3-pyxattr
$ sudo pip3 install rdiff-backup
Для установки Rdiff-Backup на Fedora и его производных (из PyPi):
$ sudo dnf install python3-pip python3-setuptools py3libacl python3-pyxattr
$ sudo pip3 install rdiff-backup