Распределенный CallCenter
На каждом из них по одному абоненту. Назовем их условно 100, 200 и 300.
На каждый Asterisk заведено по одной городской линии.
На каждом Asterisk созданы очереди обработки входящих городских вызовов, причем мемберами (members) в каждой очереди являются все 3 абонента.
Queues.conf выглядит примерно так:
| Code: |
| member => SIP/100 member => IAX2/store2/200 member => IAX2/store3/300 |
Когда входящий городской на Store1 попал в очередь и SIP/100 занят вызов пойдет на IAX2/store2/200 и будет обработан там в контексте определенном для IAX2/store2 (например incoming_local). Однако если просто позвонить с Store1/100 на Store2/200 вызов так же попадет в контекст incoming_local
Вопрос: каким образом на Store2 отделить вызовы поступившие из глобальной очереди и просто звонки одного оператора другому?
_________________
Intel Core 2 Duo E6400 @ 2.40GHz / 6GB / 160GB
Gentoo Linux || Asterisk 1.8.5 | SFA | FFA | Datacard
exten => 100,1,Answer
exten => 100,n,Set(FROM=queue-store1)
exten => 100,n,Queue(some)
а дальше уже анализ этой переменной
_________________
P4 3.0 + 1Gb CentOS 5.5 Aster 1.8.5
Не люблю gui-сборки: натуральный продукт вкуснее.
| Wapo wrote: |
| К примеру можно добавить некую переменную, которой будет присваиваться значение: exten => 100,1,Answer exten => 100,n,Set(FROM=queue-store1) exten => 100,n,Queue(some) а дальше уже анализ этой переменной |
А как передать значение данной переменной на store2/200?
Пока нашел одно решение, в принципе не такое уж и безобразное.
Для связи Астеров создаю по 2 канала: IAX2/store1 и IAX2/store1_queue, IAX2/store2 и IAX2/store2_queue, IAX2/store3 и IAX2/store3_queue
Каждому каналу свой контекст.
В диалпланах соответственно если вызов между операторами то использую IAX2/store2/200, а при указании мембера для очереди IAX2/store2_queue/200
exten => s,n,Queue(test,ct,,,ohh)
[macro-ohh]
exten => s,1,NoOP(${UNIQUEID}:${CDR(dst)}:${CDR(src)}:${AGENT}:${Who${AGENTLINE}}:${__AGENTLINE}-- )
и удивитесь сколько всего интересного прилетает в момент ответа агента
_________________
P4 3.0 + 1Gb CentOS 5.5 Aster 1.8.5
Не люблю gui-сборки: натуральный продукт вкуснее.
| Wapo wrote: |
| А вот попробуйте протестить такую конструкцию: exten => s,n,Queue(test,ct,,,ohh) [macro-ohh] exten => s,1,NoOP(${UNIQUEID}:${CDR(dst)}:${CDR(src)}:${AGENT}:${Who${AGENTLINE}}:${__AGENTLINE}-- ) и удивитесь сколько всего интересного прилетает в момент ответа агента |
Может я чего-то недопонимаю, но [macro-ohh] отработает когда я ставлю звонок в очередь, а не в тот момент когда происходит обзвон мемберов очереди на предмет доступности?
Допустим поступил входящий на store1, попал в очередь на этом же store1, далее store1 начинает обзванивать мемберов-участников очереди. Можно ли влезть именно в этот момент для того чтобы указать какие-то дополнительные переменные, которые я уже потом смогу поймать и обработать на store2 или store3?
Кроме того есть такая чудестная переменная типа ${CDR(userfield)} куда вы может загнать что душе угодно на store1 а прочесть на store2 (надеюсь)
_________________
P4 3.0 + 1Gb CentOS 5.5 Aster 1.8.5
Не люблю gui-сборки: натуральный продукт вкуснее.
| Quote: |
| Кроме того есть такая чудестная переменная типа ${CDR(userfield)} куда вы может загнать что душе угодно на store1 а прочесть на store2 (надеюсь) |
ого, это когда астериск научился CDR прокидывать между собой ?
| Игорь wrote: | ||
| Wapo: |
| Quote: |
| Кроме того есть такая чудестная переменная типа ${CDR(userfield)} куда вы может загнать что душе угодно на store1 а прочесть на store2 (надеюсь) |
ого, это когда астериск научился CDR прокидывать между собой ?
Вот и я о том же! никогда второй Asterisk не узнает что там отработало в макросе на другой стороне
_________________
P4 3.0 + 1Gb CentOS 5.5 Aster 1.8.5
Не люблю gui-сборки: натуральный продукт вкуснее.
| Quote: |
| Для начала напомню что макро ohh сработает на стороне сервера-владельца очереди |
это конечно замечательно, но как говорится есть ньюянс... очередь вместе с макросом на store1 а значение макросом предлагается вытаскивать на store2...
2 топик стартер, раз уж разнесли по контекстам и работает, то и пользуйте. Как вариант можно было просто мемберу префикс добавить:
| Code: |
| member => IAX2/store2/fromstore200 |
а потом на sotore2 по нему и фильтрануть... короче вариантов куча всяких разных.
| Quote: | ||
| Как вариант можно было просто мемберу префикс добавить: |
| Code: |
| member => IAX2/store2/fromstore200 |
а потом на sotore2 по нему и фильтрануть... короче вариантов куча всяких разных.
Все правильно, почему сразу не додумался
_________________
Intel Core 2 Duo E6400 @ 2.40GHz / 6GB / 160GB
Gentoo Linux || Asterisk 1.8.5 | SFA | FFA | Datacard
| aven wrote: |
| Ну а чем мой вариант то плох? |
То же можно, но больше кода будет в диалплане.
| Code: |
| exten => 200/_1XX,1,DIal(SIP/200) |
_________________
Intel Core 2 Duo E6400 @ 2.40GHz / 6GB / 160GB
Gentoo Linux || Asterisk 1.8.5 | SFA | FFA | Datacard