SIP ошибка 500 Server Internal Error в Asterisk: синтаксис extensions.conf и базы данных
- При попытке совершить звонок телефон мгновенно выдает ошибку
SIP 500 Server Internal Errorили короткие гудки занятости. - Все внутренние телефоны внезапно теряют возможность звонить между собой и наружу.
- В консоли Asterisk при наборе номера появляются красные строки:
WARNING: ast_expr2.y: syntax errorилиERROR: res_config_mysql: MySQL server has gone away. - Сервер телефонии не обрабатывает правила диалплана и сбрасывает соединение.
Что означает SIP ошибка 500?
Код 500 Server Internal Error — это «крик о помощи» сервера IP-АТС. Это значит, что телефон сформировал правильный запрос, но сам сервер Asterisk столкнулся с внутренней непредвиденной ошибкой (упал процесс, зависла база данных, переполнился диск или в файле маршрутизации звонков допущена грубая синтаксическая ошибка) и не смог продолжить вызов.
Пошаговая диагностика и устранение сбоя:
Шаг 1. Проверка статуса базы данных (MySQL / MariaDB / AstDB)
В 90% систем FreePBX и Issabel логика звонков и учетные записи завязаны на базу данных SQL. Если база упала — сервер вернет ошибку 500:
- Подключитесь к серверу по SSH.
- Проверьте статус службы СУБД:
sudo systemctl status mariadb || sudo systemctl status mysql - Если сервис остановлен (Failed), запустите его:
sudo systemctl restart mariadb - Проверьте внутреннюю встроенную базу данных Asterisk (AstDB):
sudo asterisk -rx "database show"
Шаг 2. Поиск синтаксических ошибок в диалплане (extensions.conf)
Если вы недавно редактировали файлы маршрутизации вручную:
- Откройте консоль Asterisk:
sudo asterisk -rvvvv - Выполните команду проверки и перезагрузки диалплана:
dialplan reload - Внимательно изучите вывод. Если в файлах
extensions.confилиextensions_custom.confпропущена скобка, запятая или неверно указан приоритет (например, две одинаковые цифрыnили опечатка в имени приложенияDailвместоDial), консоль укажет точный номер сбойной строки. - Исправьте ошибку в конфигурационном файле и снова сделайте
dialplan reload.
Шаг 3. Проверка свободного места на жестком диске
Если на сервере включена запись разговоров, диск может заполниться на 100%. При невозможности создать временный аудиофайл или записать лог Asterisk отвечает ошибкой 500:
df -hЕсли раздел /var/log или корневой / заполнен на 100%, удалите старые ненужные записи или архивы логов:
sudo rm -rf /var/log/asterisk/full.*.gzШаг 4. Проверка модулей кодеков и транскодинга
Если в диалплане задействован кодек (например, G.729), но соответствующий модуль codec_g729.so не загружен или не имеет лицензии, попытка направить звонок в этот канал вызовет моментальный сбой 500 Internal Error.
Частые вопросы (FAQ)
Почему ошибка 500 возникает только при звонке на один конкретный номер?
Это означает, что ошибка содержится в конкретной ветке диалплана для этого номера (например, переход на несуществующий голосовой ящик VoiceMail или опечатка в названии группы вызова Queue).
Как перезапустить процесс Asterisk без перезагрузки всего сервера?
Выполните команду sudo systemctl restart asterisk или через консоль телефонии: sudo asterisk -rx 'core restart gracefully'.
Что делать, если MariaDB не запускается из-за повреждения таблиц?
Выполните автоматическое восстановление баз данных FreePBX: mysqlcheck -u root -p --auto-repair --check --all-databases.
Может ли ошибка 500 быть вызвана переполнением оперативной памяти (RAM)?
Да. Если сервер испытывает жесткий дефицит RAM, системный процесс OOM Killer может завершить дочерние потоки Asterisk, что приводит к отказу обработки звонков.