Если в вашей очереди FreePBX клиенты не всегда дожидаются ответа операторов, удобно получать уведомления о таких пропущенных звонках прямо в Telegram. В этой инструкции описаны все шаги — от создания бота до настройки PHP-скрипта, который будет автоматически отправлять уведомления в выбранную группу.
1. Создание Telegram-бота
- В Telegram найдите пользователя @BotFather.
- Отправьте команду
/newbot. - Задайте имя и уникальный логин вашего бота (например, freepbx_alert_bot).
- Скопируйте выданный токен вида:
1234567890:AAEExampleTokenGeneratedByBotFather - Сохраните токен — он нужен для подключения из скрипта.
2. Создание Telegram-группы для уведомлений
- Создайте новую группу, например «Пропущенные звонки FreePBX».
- Добавьте в неё созданного бота.
- Сделайте бота администратором группы.
- Отправьте в группу любое сообщение (например, тест).
- Чтобы узнать
chat_idгруппы, откройте в браузере ссылку:
https://api.telegram.org/botВАШ_ТОКЕН/getUpdates
В ответе найдите блок с параметром"chat":{"id":-100XXXXXXXXXXXX}— это и есть идентификатор группы.
3. Проверка подключения бота
Для проверки отправьте сообщение напрямую через браузер (заменив значения на свои):
https://api.telegram.org/botВАШ_ТОКЕН/sendMessage?chat_id=-100XXXXXXXXXXXX&text=Тестовое+сообщение+от+FreePBX
Если сообщение появилось в Telegram, бот работает корректно.
4. Подключение к базе данных FreePBX
Для получения номера звонящего используется таблица cdr.
Параметры подключения можно узнать командой:
grep -E 'AMPDBHOST|AMPDBUSER|AMPDBPASS|AMPDBNAME' /etc/freepbx.conf
Пример вывода:
$amp_conf['AMPDBUSER'] = 'freepbxuser';
$amp_conf['AMPDBPASS'] = 'MySecurePass';
$amp_conf['AMPDBHOST'] = 'localhost';
$amp_conf['AMPDBNAME'] = 'asteriskcdrdb';
Эти данные понадобятся при настройке PHP-скрипта.
Не размещайте реальные логины и пароли в открытых источниках.
5. Подготовка PHP-окружения
Проверьте, что на сервере установлены PHP и расширение PDO MySQL:
php -v
php -m | grep pdo_mysql
Если отсутствуют, установите их:
yum install -y php-cli php-mysqlnd
6. Создание PHP-скрипта уведомлений
Откройте файл /usr/local/bin/queue_abandon_alert.php:
nano /usr/local/bin/queue_abandon_alert.php
Вставьте следующий код, указав свои значения токена, chat_id и данных БД:
<?php
// ---------- НАСТРОЙКИ ----------
$queue = '1100'; // номер очереди
$botToken = '1234567890:AAEExampleTokenGeneratedByBotFather';
$chatId = '-1001234567890'; // ID Telegram-группы
$logFile = '/var/log/asterisk/queue_log';
$stateFile = '/var/lib/asterisk/queue_alert.pos';
$lockFile = '/var/run/queue_alert.lock';
// Подключение к базе
$dbHost = 'localhost';
$dbName = 'asteriskcdrdb';
$dbUser = 'freepbxuser';
$dbPass = 'MySecurePass';
// Подключение к БД
try {
$pdo = new PDO("mysql:host={$dbHost};dbname={$dbName};charset=utf8mb4", $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $e) {
error_log("DB connect error: " . $e->getMessage());
$pdo = null;
}
// Блокировка от повторного запуска
$lock = fopen($lockFile, 'c');
if (!$lock || !flock($lock, LOCK_EX | LOCK_NB)) exit(0);
// Проверка состояния
if (!file_exists(dirname($stateFile))) @mkdir(dirname($stateFile), 0750, true);
$lastPos = file_exists($stateFile) ? (int)file_get_contents($stateFile) : 0;
// Открываем лог очереди
$fh = fopen($logFile, 'r');
if (!$fh) exit(1);
$logSize = filesize($logFile);
if ($logSize < $lastPos) $lastPos = 0; // ротация лога
fseek($fh, $lastPos);
$newPos = $lastPos;
$processed = 0;
// Читаем новые строки
while (($line = fgets($fh)) !== false) {
$newPos = ftell($fh);
$parts = explode('|', trim($line));
if (count($parts) < 6) continue;
list($timestamp, $callid, $queueName, $agent, $event) = $parts;
if ($event !== 'ABANDON' || $queueName !== $queue) continue;
$position = $parts[5] ?? '';
$origPos = $parts[6] ?? '';
$waitTime = $parts[7] ?? '';
// Получаем номер звонящего
$src = 'неизвестно';
if ($pdo) {
$q = $pdo->prepare("SELECT src FROM cdr WHERE uniqueid=:uid OR linkedid=:uid ORDER BY calldate DESC LIMIT 1");
$q->execute(['uid' => $callid]);
$src = $q->fetchColumn() ?: 'неизвестно';
}
// Формируем сообщение
$time = date('Y-m-d H:i:s', (int)$timestamp);
$text = "📞 *Клиент не дождался ответа в очереди {$queueName}*\n".
"🕒 Время: `{$time}`\n".
"☎️ Номер: `{$src}`\n".
"📊 Позиция при уходе: {$position} (вошёл {$origPos}-м)\n".
"⏱️ Ожидал: {$waitTime} сек.";
// Отправляем сообщение в Telegram
file_get_contents("https://api.telegram.org/bot{$botToken}/sendMessage?".
http_build_query(['chat_id' => $chatId, 'text' => $text, 'parse_mode' => 'Markdown']));
$processed++;
}
fclose($fh);
file_put_contents($stateFile, $newPos);
@chmod($stateFile, 0600);
if ($processed > 0) syslog(LOG_INFO, "queue_abandon_alert: processed {$processed} ABANDON event(s)");
flock($lock, LOCK_UN);
fclose($lock);
?>
Сохраните файл (Ctrl + O → Enter → Ctrl + X) и сделайте его исполняемым:
chmod +x /usr/local/bin/queue_abandon_alert.php
7. Проверка работы
Для ручного запуска:
php /usr/local/bin/queue_abandon_alert.php
Если в /var/log/asterisk/queue_log есть новые записи с событием ABANDON,
в Telegram появятся уведомления о пропущенных звонках с указанием времени, номера клиента и позиции в очереди.
8. Добавление задачи в cron
Чтобы скрипт выполнялся автоматически каждые 10 минут:
crontab -e
Добавьте строку:
*/10 * * * * /usr/bin/php /usr/local/bin/queue_abandon_alert.php >/dev/null 2>&1
Проверьте наличие задания:
crontab -l
После этого уведомления будут приходить в Telegram без участия администратора.
9. Преимущества подхода
- Мониторинг в реальном времени без лишней нагрузки на FreePBX.
- Нет повторных уведомлений — используется контрольная позиция чтения лога.
- Автоматическая защита от дублирующего запуска.
- Уведомления приходят в единый Telegram-чат, доступный всем операторам.
10. Пример уведомления в Telegram
📞 Клиент не дождался ответа в очереди 1100
🕒 Время: 2025-11-04 18:27:44
☎️ Номер: +375298237291
📊 Позиция при уходе: 1 (вошёл 1-м)
⏱️ Ожидал: 8 сек.
Такое уведомление приходит автоматически, как только клиент покидает очередь, не дождавшись ответа оператора.
11. Заключение
Теперь ваша телефония FreePBX умеет автоматически уведомлять о пропущенных звонках.
Такое решение особенно удобно для колл-центров и клиник: клиенты, не дозвонившиеся с первого раза, не теряются, а операторы могут быстро перезвонить и восстановить контакт.

I just wanted to drop by and say how much I appreciate your blog. Your writing style is both engaging and informative, making it a pleasure to read. Looking forward to your future posts!
Somebody essentially help to make significantly articles Id state This is the first time I frequented your web page and up to now I surprised with the research you made to make this actual post incredible Fantastic job
Really insightful post — Your article is very clearly written, i enjoyed reading it, can i ask you a question? you can also checkout this newbies in seo
Sunrise balloon flight Pamukkale Everything was exactly as promised. https://linklist.bio/travelshop
I have recently started a web site, the information you provide on this web site has helped me greatly. Thanks for all of your time & work.
Turkey sightseeing tours Karen M. — Slovenya Best Turkey tours we’ve experienced. The family-friendly activities kept our kids entertained throughout the trip. https://shemirancenter.com/?p=5640
**mitolyn reviews**
Mitolyn is a carefully developed, plant-based formula created to help support metabolic efficiency and encourage healthy, lasting weight management.
wow your article is simply a masterpiece, i like that, keep it up and will be checking for new update. do you post often? you can check the biggest webdesign freelancer in platform in germany called https://webdesignfreelancerfrankfurt.de/ Thank you for your wonderful post
your article is amazing, i enjoy reading it, i want you to add me as your followers, how often do you post ? my blog is the top growing directory platform in germany, lokando24.de you can check it out. Thank you
**prodentim official website**
ProDentim is a distinctive oral-care formula that pairs targeted probiotics with plant-based ingredients to encourage strong teeth, comfortable gums, and reliably fresh breath
**herpafend reviews**
Herpafend is a natural wellness formula developed for individuals experiencing symptoms related to the herpes simplex virus. It is designed to help reduce the intensity and frequency of flare-ups while supporting the bodys immune defenses.
**mounjaboost**
MounjaBoost is a next-generation, plant-based supplement created to support metabolic activity, encourage natural fat utilization, and elevate daily energywithout extreme dieting or exhausting workout routines.
**aqua sculpt**
aquasculpt is a premium metabolism-support supplement thoughtfully developed to help promote efficient fat utilization and steadier daily energy.
**men balance**
MEN Balance Pro is a high-quality dietary supplement developed with research-informed support to help men maintain healthy prostate function.
**prostafense reviews**
ProstAfense is a premium, doctor-crafted supplement formulated to maintain optimal prostate function, enhance urinary performance, and support overall male wellness.
**boostaro**
Boostaro is a purpose-built wellness formula created for men who want to strengthen vitality, confidence, and everyday performance.
**neuro sharp**
Neuro Sharp is an advanced cognitive support formula designed to help you stay mentally sharp, focused, and confident throughout your day.
**backbiome**
Mitolyn is a carefully developed, plant-based formula created to help support metabolic efficiency and encourage healthy, lasting weight management.