Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PJSIP_MAX_CONTACTS_EXCEEDED IP-Телефония и СКУД

Asterisk: Contact already exists for AOR - Contact limit exceeded (Траблшутинг PJSIP)

Обновлено: 24.08.2026 · Официальная документация ↗
  • В CLI Asterisk появляется предупреждение WARNING[1234]: res_pjsip_registrar.c: Contact already exists for AOR '101' - Contact limit exceeded.
  • SIP-телефон или софтфон не может зарегистрироваться, получая ответ SIP/2.0 403 Forbidden или SIP/2.0 503 Service Unavailable.
  • При перезагрузке роутера или смене IP-адреса клиента старая регистрация зависает в памяти Asterisk до истечения TTL.
  • Команда pjsip show aor <номер> показывает исчерпание пула доступных контактов.

1. Анализ текущего состояния AOR

asterisk -rx "pjsip show aor 101"
asterisk -rx "pjsip show contacts" | grep 101

2. Корректировка конфигурации pjsip.conf

Откройте файл /etc/asterisk/pjsip.conf (или соответствующий файл конфигурации в pjsip.d/) и добавьте параметры max_contacts и remove_existing в секцию типа aor:

[101]
type = aor
max_contacts = 2
remove_existing = yes
qualify_frequency = 30
qualify_timeout = 3.0
default_expiration = 300
maximum_expiration = 600
minimum_expiration = 60

3. Применение изменений без перезапуска Asterisk

asterisk -rx "pjsip reload"

4. Принудительная очистка зависших контактов в CLI

Если требуется сбросить зарегистрированные контакты вручную:

asterisk -rx "pjsip send unregister 101"

Или удалите устаревший контакт напрямую из astdb:

asterisk -rx "database deltree registrar/contact/101"
💡 Практика специалистов: Для мобильных софтфонов (Zoiper, GS Wave, Linphone) всегда включайте remove_existing = yes и уменьшайте maximum_expiration до 300 секунд, так как при переключении между LTE и Wi-Fi софтфон отправляет новую регистрацию с другого сокета до того, как истечет старый Contact.

Частые вопросы (FAQ)

Что делает параметр remove_existing = yes?

Параметр remove_existing = yes автоматически удаляет самую старую активную регистрацию при попытке зарегистрировать новый контакт, если достигнут лимит max_contacts. Это решает проблему со сменой динамических IP на мобильных клиентах.

Почему max_contacts по умолчанию равен 1?

В PJSIP значение по умолчанию равно 1 для обеспечения классического сценария 'один номер — одно устройство'. Для одновременной работы настольного телефона и мобильного софтфона увеличьте max_contacts до 2 или выше.

Как qualify_frequency помогает предотвратить эту ошибку?

Параметр qualify_frequency отправляет периодические SIP OPTIONS запросы. Если клиент отключился без отправки SIP REGISTER с Expires: 0, Asterisk признает контакт недоступным (Unreachable) и очистит его быстрее, освобождая слот.

Можно ли задать глобальный remove_existing для всех эндпоинтов?

Нет, директива remove_existing задается индивидуально для каждого блока [type=aor] либо через шаблоны конфигурации PJSIP (!).

Полезные материалы
Рекомендуем