Как выполнить перевод вызова между очередями в Asterisk?

Добрый день! У меня установлены FreePBX 16 и Asterisk 13, и я настроил следующую схему:

1. Внешний звонок попадает в очередь 150, где находятся динамические внутренние номера.
2. Если звонок не был принят в течение 1 минуты, он переходит в Fail Over Destination, где запускается AGI-скрипт, воспроизводящий запись, после чего производится перевод в другую очередь 151.

```plaintext
;Если НЕТ или не ответили то переводим в очередь для ожидания
same => n(queues_start_net),Playback(/var/lib/asterisk/sounds/ru/custom/queues_no)
same => n,Queue(151)
same => n,Hangup()
```
3. Звонок попадает в очередь 151, что видно в консоли, но динамические внутренние номера не вызываются.

В чем может заключаться проблема? 

```plaintext
-- Executing [s@queues_150_to_151:11] Queue("SIP/00000ea1", "151") in new stack
    -- Started music on hold, class 'default', on channel 'SIP/00000ea1'
    -- Called Local/703@from-queue/n
    --     -- LazyMembers debugging - Numbusies: 0, Nummems: 1
    -- Executing [703@from-queue:1] Set("Local/703@from-queue-00022b06;2", "QAGENT=703") in new stack
    -- Executing [703@from-queue:2] Set("Local/703@from-queue-00022b06;2", "__FROMQ=true") in new stack
    -- Executing [703@from-queue:3] GotoIf("Local/703@from-queue-00022b06;2", "1?hangup") in new stack
    -- Goto (from-queue,703,5)
    -- Executing [703@from-queue:5] Macro("Local/703@from-queue-00022b06;2", "hangupcall,") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("Local/703@from-queue-00022b06;2", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,3)
    -- Executing [s@macro-hangupcall:3] ExecIf("Local/703@from-queue-00022b06;2"
```
  • 28 декабря 2024 г. 18:33
Ответы на вопрос 1
Проблема, с которой вы столкнулись, связана с тем, что динамические внутренние номера, которые должны обрабатывать звонки в очереди 151, не вызываются, т.е. они не являются "членами" этой очереди. Чтобы решить эту проблему, нужно убедиться, что ваши внутренние номера добавлены в очередь 151. 

Вот несколько этапов, которые помогут определить и решить проблему:

1. **Проверьте членов очереди**: Убедитесь, что ваши динамические внутренние номера действительно являются членами очереди 151. Это можно сделать через интерфейс FreePBX или с помощью команд в Asterisk CLI:
   ```
   asterisk -rx 'queue show 151'
   ```
   Если ваши внутренние номера не отображаются в списке членов очереди 151, вам нужно добавить их.

2. **Добавьте динамические члены**: Если необходимо, используйте FreePBX, чтобы добавить нужные номера в очередь 151. Вы можете сделать это в разделе "Queues", убедившись, что пользователи или номера добавлены как члены очереди.

3. **Проверьте конфигурацию очереди**: Убедитесь, что у вас правильно настроены параметры очереди (например, "maxlen", "timeout" и т.д.) в FreePBX для очереди 151. Возможно, звонки не обрабатываются из-за неверных параметров.

4. **Проверьте настройки AGI-скрипта**: Убедитесь, что ваш AGI-скрипт выполняется корректно без ошибок и действительно инициирует вызов в очередь 151. Записывайте логи AGI, чтобы убедиться, что вы не пропустили никаких ошибок.

5. **Логи и отладка**: Используйте отладочные логи Asterisk для получения дополнительной информации о том, что происходит, когда звонок переводится в очередь 151. Включите отладку командой:
   ```
   core set verbose 5
   core set debug 5
   ```
   Это даст вам более полную картину того, что происходит, когда звонок в очередь 151.

Вот возможный пример команды для добавления динамического члена в очередь, если вы делаете это программно через AGI:
```bash
QUEUE_MEMBER_ADD(queue_name, channel)
```
Где `queue_name` — это название очереди, а `channel` — это внутренний номер.

Если вы проверили все вышеперечисленное и проблема сохраняется, возможно, стоит проверить другие аспекты, такие как параметры маршрутизации и внутренние настройки звонков.
Похожие вопросы