Входящий есть, ответить нельзя (нет ACK)

Разбираем ситуацию, когда входящий звонок приходит, пользователь нажимает «Ответить», но дальше — тишина. Со стороны выглядит так, будто кнопка не работает, хотя на самом деле проблема глубже — на уровне SIP-сигнализации.

Видео для тех, кто любит смотреть :)

Как проявляется ошибка

Оператор обычно описывает это примерно так:

  • «Звонок приходит, но ответить не могу»
  • «Нажимаю “Ответить” — ничего не происходит»
  • «Входящий есть, но разговор не начинается»

С точки зрения пользователя всё выглядит максимально странно: вызов есть, интерфейс реагирует, кнопка нажата — а соединения нет.

Не работает, но как будто работает.

Чую подвох

Что происходит на самом деле

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

  • От АТС приходит INVITE — входящий вызов.
  • Клиент корректно отвечает 180 Ringing.
  • При нажатии «Ответить» клиент отправляет 200 OK.
  • ACK от АТС не приходит.

При этом в логах можно увидеть несколько 200 OK, отправленных повторно, но без последующего ACK.

Переводя с SIP-языка на человеческий:
клиент говорит «я ответил, можно начинать разговор», но АТС этого подтверждения как будто не слышит.

Как диагностировать

Первое, что нужно сделать — подтвердить симптом:

  • Входящий вызов точно приходит.
  • Кнопка «Ответить» нажимается.
  • Соединение не устанавливается, разговор не начинается.

Дальше открываем логи SIP-клиента и ищем последовательность:

INVITE → 180 Ringing → 200 OK → ACK отсутствует

Если 200 OK есть, а ACK нет — диагноз почти очевиден.

Особенно показательно, если видно много 200 OK подряд — клиент честно повторяет ответ, но подтверждения всё равно не получает.

Что делать

Основной источник проблемы — firewall, NAT или ошибки в сетевой инфраструктуре. Поэтому проверяем настройки сами и просим АТС с их стороны все проверить.

Со стороны клиента:
Проверить настройки NAT / firewall в SIP-клиенте.

Со стороны АТС:

  • Проверить, дошли ли от клиента 180 Ringing и 200 OK.
  • Посмотреть, отправлялся ли ACK.
  • Если ACK не пришёл — искать место потери в сети.

Самое главное

Если входящий есть, а ответить нельзя — смотрите ACK.
Наличие 200 OK без ACK почти всегда указывает на сетевую проблему, firewall, NAT.