Страница 1 из 1

Callback zzuz-автоматический вызов своб. оператора и клента

Добавлено: 27 окт 2016, 17:06
UserMe
Asterisk 13

Тема уже ни раз поднималась на форумах.
За основу хочу взят сообщение "CallBack по освобождению очереди в Elastix" - https://forum.asterisk.ru/viewtopic.php?f=5&t=4663

Хочется примерно сделать:
1. Абонент попадает в IVR где сразу может набрать набрать номер для колбека
2. Если не набирает, попадает в очереди, где также может набрать экстеншин для вызова колбека.

Так были вопросы:

Код: Выделить всё

1. Можно как нить сделать так, чтобы коллбек отрабатывал тогда, когда очередь опустеет и появится свободный абонент?
Вот здесь интересно как сделать.

Код: Выделить всё

2. Можно подредактировать коллбек так, чтобы он сначала набирал внутреннего абонента, а при ответе оного уже набирал клеента? 
Здесь понятно, вопросов нет.


В той теме уважаемый zzuz писал, что требуется для решения задачи:
1. Нужно написать скрипт , который будет в асинхронном режиме делать Originate на нужные контексты диаплана.
2.Первый контекст это ожидание в очереди .
3.Второй контекст - ожидание ответа оператором очереди на звонок. Тут используется цикл While() с нужной проверкой ответа.
4.В настройках команды Dial для внутренних звонков нужно выставить параметр U(sub-ext-answer) (sub-ext-answer контекст обработки ответа) , который будет проверять наличие канала звонка в очередь (потому как для всех отвеченных вызовов будет отрабатывать) . В этом же контексте нужно импортировать переменные из нужного канала , так как нужно не забывать , что каналы запущены отдельно.
5. Далее добавляем файлы с важной речью для операторов , о том что сейчас будет исходящий вызов. Также перед исходящем вызове не забываем поправить номер , так как он может определяться по разному в зависимости от провайдера.

В итоге имеем:
-скрипт с originate
-контекст для вхождения в очередь и ожидания ответа на звонок в очередь
-контекст проверки ответа на звонок оператором
-контекст проверки CID(num) звонящего и его правки

Код: Выделить всё

-скрипт с originate
Здесь у меня обычный скрипт на bash:

Код: Выделить всё

#!/bin/sh
#
#run - user@host:$ ./call.sh | telnet
#
operator=$1
callee=$2
echo "open 127.0.0.1 5038"
sleep 2
echo "Action: Login"
echo "Username: c2"
echo "Secret: c222"
echo
sleep 2
echo "Action: Originate"
echo "Channel: $1" #внутрений телефон
echo "Context: city-calls" #Dial Patterns, который создается вместе с Outbound Routes, находится в extensions_additional.conf
echo "Exten: $2" #с кем мы собственно соединяем
echo "Priority: 1"
echo "Callerid: $1"
echo "Async: true"
echo
echo
sleep 10

Код: Выделить всё

-контекст для вхождения в очередь и ожидания ответа на звонок в очередь
Этот контекст с применением команды "queue"?
Cвободный оператор должен попадать в очередь и ждать соединения с клиентом?

Код: Выделить всё

Второй контекст - ожидание ответа оператором очереди на звонок. Тут используется цикл While() с нужной проверкой ответа.
Здесь не понятно, с помощью конструкции While() я должен находить свободного оператора?

Код: Выделить всё

В настройках команды Dial для внутренних звонков нужно выставить параметр U(sub-ext-answer) (sub-ext-answer контекст обработки ответа) , который будет проверять наличие канала звонка в очередь 
Здесь совсем не понятно, например я вызываю внутреннего абонента с помощью:

Код: Выделить всё

exten => 800,2,Dial(SIP/800,120,TtU(sub-ext-answer))
Что писать в контексте "sub-ext-answer"?



Хочу сделать callback:

Re: Callback zzuz-автоматический вызов своб. оператора и кле

Добавлено: 28 окт 2016, 01:41
zzuz
Навряд ли тут нарисуются альтруисты , которые напишут вам за так готовый код.
Плюс раздел топика "Вопросы новичков" не соответствует уровню вопроса.

Отвечу только на вопросы сообщения.
-контекст для вхождения в очередь и ожидания ответа на звонок в очередь
это контекст вхождения в очередь , где будет выполняться Queue() . В контекст попадает вызов клиента в одном плече канала и ожидания ответа оператором в другом (цикл While()).
Второй контекст - ожидание ответа оператором очереди на звонок. Тут используется цикл While() с нужной проверкой ответа.
Свободного оператора найдет очередь , когда он появится , задача в момент приема вызова оператором совершить исходящий вызов. В этом контексте проверяется переменная из другого канала , которую нужно импортировать.
В настройках команды Dial для внутренних звонков нужно выставить параметр U(sub-ext-answer) (sub-ext-answer контекст обработки ответа) , который будет проверять наличие канала звонка в очередь
К контексте Вы должны расшарить переменную ответа оператора , чтобы в контексте ожидания вызова , где выполняется цикл ожидания, дать знать об этом ответе, чтобы можно быть начинать исходящий вызов на клиента.