VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
UserMe
Сообщения: 13
Зарегистрирован: 30 мар 2014, 17:50

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

Сообщение 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:
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

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

Сообщение zzuz »

Навряд ли тут нарисуются альтруисты , которые напишут вам за так готовый код.
Плюс раздел топика "Вопросы новичков" не соответствует уровню вопроса.

Отвечу только на вопросы сообщения.
-контекст для вхождения в очередь и ожидания ответа на звонок в очередь
это контекст вхождения в очередь , где будет выполняться Queue() . В контекст попадает вызов клиента в одном плече канала и ожидания ответа оператором в другом (цикл While()).
Второй контекст - ожидание ответа оператором очереди на звонок. Тут используется цикл While() с нужной проверкой ответа.
Свободного оператора найдет очередь , когда он появится , задача в момент приема вызова оператором совершить исходящий вызов. В этом контексте проверяется переменная из другого канала , которую нужно импортировать.
В настройках команды Dial для внутренних звонков нужно выставить параметр U(sub-ext-answer) (sub-ext-answer контекст обработки ответа) , который будет проверять наличие канала звонка в очередь
К контексте Вы должны расшарить переменную ответа оператора , чтобы в контексте ожидания вызова , где выполняется цикл ожидания, дать знать об этом ответе, чтобы можно быть начинать исходящий вызов на клиента.
Линия24 - Системы Массового Телефонного Обслуживания
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH