Идея создать будильник на базе Asterisk была уже давно, т. к. от обычного будильника проснуться получалось не всегда в отличии от звонка 🙂
Идея следующая, на веб-сайте задаем свой номер телефона и время когда нас надо разбудить (с учетом дней недели). Когда наступает час X и минута Y, то Asterisk звонит по указанному номеру и проигрывает ругательную запись о необходимости скорейшего подъема.
Asterisk поддерживает автоматический обзвон с помощью формирования call-файлов.
.call файл — это текстовые файлы, которые при помещении их в определенную директорию (по умолчанию /var/spool/asterisk/outgoing/) заставляют Asterisk совершить исходящий вызов.
На базе этой функции и был реализован будильник с веб-интерфейсом.
Вся софтовая часть будильника состоит из 3 файлов:
index.php — веб-интерфейс будильника, через который возможно просмотреть, добавить или удалить будильники.
alarm.list — файл, в котором содержится актуальный список будильников в формате CSV. Структура файла следующая:
номер_телефона,пн_время,вт_время,ср_время,чт_время,пт_время,сб_время,вс_время
Формат времени: часы:минуты.
Рассмотрим на примере. Создадим будильник на понедельник 16:30 и пятницу 18:40 для номера 81234567890.
В файле alarm.list появится следующая запись:
81234567890,16:30,,,,18:40,,
Asterisk будет звонить по данному номеру каждые понедельник в 16:30 и пятницу 18:40.
parsing.sh — скрипт, парсящий данные с alarm.list и создающий call-файлы для Asterisk. Также в данном файле содержаться переменные, необходимые для формирования call-файла:
CALLPATH='/var/spool/asterisk/outgoing' # Каталог call-файлов Asterisk
CHANNEL='Dongle/dongle0' # Канал, через который будем звонить
MAXRETRIES='2' # Количество попыток дозвона
RETRYTIME='240' # Задержка между попытками
WAITTIME='30' # Время ожидания ответа
DATA='/var/lib/asterisk/sounds/ru/wakeup' # Путь к воспроизводимому аудиофайлу
Для запуска скрипта необходимо передать ему путь к alarm.list:
/var/www/alarm/parsing.sh /var/www/alarm/alarm.list
В ответ (если раскомментирована переменная DEBUG) скрипт выведет список активных будильников.
Данный файл должен быть добавлен в крон на запуск раз в минуту. Пример записи в /etc/crontab:
#Alarm
*/1 * * * * root /var/www/alarm/parsing.sh /var/www/alarm/alarm.list
Архив со всеми файлами можно скачать по ссылке.
Спасибо! Воспользовался вашим решением.
А у меня что то страничка не корректно отображается. Таблицы плывут и переменные с кодом прописаны.
Попробуйте заменить первую строку в файле index.php:
Строка:
< ?
Заменить на:
< ?php
Без пробела между < и ?.
Спасибо. Как вариант ещё можно в php.ini включить опцию «short_open_tag = On»
Привет!
Могли бы подсказать почему не открывается index.php?
Вот что пишет:
Not Found
The requested URL /alarm/index.php was not found on this server.
Apache/2.2.15 (CentOS) Server at 192.168.1.9 Port 80
Решил вопрос, нужно было переместить в папку html. )
Подскажите пожалуйста.
В чем у меня дело, почему не работает? https://vk.com/doc89001729_439006594
Прочитайте предыдущие комментарии, там приведено решение.
Замените первую строку в файле index.php:
Строка:
< ? Заменить на: < ?php Без пробела между < и ?.
Спасибо!
Мне помогло то что написал Александр.
У меня возникла другая проблема. У меня звонка нет. Мне кажется что я что-то упускаю. Я посмотрел лог файлы cron и вижу что он выполняется адекватно, так же создаются файлы .call. Но когда посмотрел общий лог то там есть ошибки https://vk.com/doc89001729_439009120
https://vk.com/doc89001729_439009121
Мне кажется что я не понимаю вот это параметр -CHANNEL=’Dongle/dongle0′ # Канал, через который будем звонить -я думаю что-то должно мое? Я старался найти ответ, гуглил но пока ничего ненашел. Можете меня скоординировать? 🙂
Да, в переменной CHANNEL должен быть указан ваш транк, через который будет осуществляться вызов. Через что у вас организованы внешние вызовы?
Я использую sip. Я указал название своего канала и все равно не идет звонок. https://vk.com/doc89001729_439015599 (
Не видно ваших лог файлов — «Ошибка. Этот документ был удалён из общего доступа.»
В лог файле те же ошибки что и были (так указал название канала https://vk.com/doc89001729_439015599)
логи-https://vk.com/doc89001729_439016695
транки-https://vk.com/doc89001729_439016679
Попробуйте:
CHANNEL=’SIP/RB-79378620203′
Максим, попробовал и вот что вышло https://vk.com/doc89001729_439017326 https://vk.com/doc89001729_439017332 Что-то новое 🙂
Все равно почему-то нет https://vk.com/doc89001729_439018525
Я еще пробывал написать таким образом CHANNEL=’chan_sip\RB-79378620203′ тоже не помогло
В лог файле видно что на одной из записи есть еще доп идентификатор https://vk.com/doc89001729_439018675 Может нужно еще что-то дописать по мимо SIP\****** типа того SIP\*******-*****. На эту мысль меня навеяла статья в где-то в последних абзацах http://asterisk.ru/knowledgebase/Asterisk+SIP+channels 🙂
Если есть телеграм, напишите мне — @maxvit Оперативнее решим.