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

Вопрос по использованию mod_callcenter

Добавлено: 16 янв 2016, 15:28
tma
Всем привет,

Есть настройки в callcenter.conf.xml

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

    <queue name="sales@domain.ru">
      <param name="strategy" value="longest-idle-agent"/>
      <param name="moh-sound" value="$${hold_music}"/>
      <param name="record-template" value="$${recordings_dir}/sales-${strftime(%Y-%m-%d-%H-%M-%S)}.${destination_number}.${caller_id_number}.${uuid}.wav"/>
      <param name="time-base-score" value="queue"/>
      <param name="tier-rules-apply" value="false"/>
      <param name="tier-rule-wait-second" value="300"/>
      <param name="tier-rule-wait-multiply-level" value="true"/>
      <param name="tier-rule-no-agent-no-wait" value="false"/>
      <param name="discard-abandoned-after" value="14400"/>
      <param name="max-wait-time" value="0"/>
      <param name="max-wait-time-with-no-agent" value="120"/>
    </queue>

  <agents>
    <agent name="2XX@domain.ru" type="callback" contact="[call_timeout=15]user/2XX@domain.ru" status="Available" max-no-answer="3" wrap-up-time="10" reject-delay-time="10" busy-delay-time="60" />
  </agents>
  <tiers>
    <tier agent="2XX@domain.ru" queue="sales@domain.ru" level="1" position="1"/>
  </tiers>
Динамические агенты организованы таким образом:

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

    <extension name="agent_login">
      <condition field="destination_number" expression="^agent-login$">
        <action application="set" data="res=${callcenter_config(agent set status ${caller_id_number}@${domain_name} 'Available')}" />
        <!-- <action application="set" data="res=${callcenter_config(tier add ${domain_name} ${caller_id_number}@${domain_name} 'Ready' 1 1)}" /> -->
        <action application="answer" data=""/>
        <action application="sleep" data="500"/>
        <action application="playback" data="ivr/ivr-you_are_now_logged_in.wav"/>
        <action application="hangup" data=""/>
      </condition>
    </extension>

    <extension name="agent_logoff">
      <condition field="destination_number" expression="^agent-logoff$">
        <action application="set" data="res=${callcenter_config(agent set status ${caller_id_number}@${domain_name} 'Logged Out')}" />
        <!-- <action application="set" data="res=${callcenter_config(tier del ${domain_name} ${caller_id_number}@${domain_name})}" /> -->
        <action application="answer" data=""/>
        <action application="sleep" data="500"/>
        <action application="playback" data="ivr/ivr-you_are_now_logged_out.wav"/>
        <action application="hangup" data=""/>
      </condition>
    </extension>
Проблема в том, что если агент разрегистрируется, его статус меняется на Logged Out и позвонивший клиент висит в пустой очереди.
Хотелось бы, чтобы клиент не висел в пустой очереди, а сразу уходил дальше (по моей предыдущей теме - в голосовой ящик).
Есть идея перед попаданием в очередь запрашивать число активных агентов и если их 0 - идти дальше.
НО! Если во время нахождения в очереди агент меняет статус на Logged Out, то клиент так же продолжает болтаться в пустой очереди.

Примеров в интернете не нашел. Такое впечатление, что проблема есть только у меня.

P.S. В догонку. Почему callcenter.conf.xml удается прописать только в autoload_configs/callcenter.conf.xml, в отдельном конфиге FreeSWITCH просто игнорирует описание очередей...

Re: Вопрос по использованию mod_callcenter

Добавлено: 16 янв 2016, 16:34
Vlad1983
http://garantum.ru/content/152-callcenter_freeswitch
max-wait-time-with-no-agent
Дефолтное значение для отключения равно 0. Значение задаётся в секундах и определяет промежуток времени, в течение которого очередь должна оставаться пустой (без подключенных агентов) прежде чем будут отключены все участники. Этот принцип обеспечивает защиту от случаев, когда все ожидающие участники выпадают из очереди при случайном отключении всех агентов.
описание очередей должно быть в пределах <configuration name="callcenter.conf" description="CallCenter"></configuration>
можно включить части через метки для препроцессора

Re: Вопрос по использованию mod_callcenter

Добавлено: 16 янв 2016, 20:14
tma
В том-то и дело, что чхать он хотел на значение max-wait-time-with-no-agent.
Игрался - ставил 1 секунду, 0 и т.д.

Re: Вопрос по использованию mod_callcenter

Добавлено: 16 янв 2016, 20:29
Vlad1983
не нулевой max-wait-time при ненулевом max-wait-time-with-no-agent пробовали?

Re: Вопрос по использованию mod_callcenter

Добавлено: 16 янв 2016, 20:37
tma
Да.
Есть ненулевой max-wait-time, то висит в очереди, в том числе пустой, пока не истечет время.
Поведение абсолютно непонятное пока...
Можете дать 100% рабочий пример для теста?

Re: Вопрос по использованию mod_callcenter

Добавлено: 16 янв 2016, 20:46
pan-user
tma - просит копипасту. куда катится мир. )

Re: Вопрос по использованию mod_callcenter

Добавлено: 16 янв 2016, 21:08
Vlad1983
показал бы рабочий пример, если бы хоть раз пользовался этим модулем

mod_callcenter.c строки 2489 по 2506
где нет после условий "switch_log_printf" добавить руками с уникальным текстом, характеризующим условия
перекомпилять и наблюдать в консоли что выполнилось что нет
или gdb ловить, но это долгая песня рассказывать как им пользоваться

подозреваю что-то не так с queue->last_agent_exist_check, queue->last_agent_exist

Re: Вопрос по использованию mod_callcenter

Добавлено: 16 янв 2016, 22:41
tma
Vlad1983 писал(а):показал бы рабочий пример, если бы хоть раз пользовался этим модулем
mod_fifo лучше? Или еще варианты есть?
Vlad1983 писал(а): или gdb ловить, но это долгая песня рассказывать как им пользоваться
Иногда проще свой модуль написать, чем дебажить чужой и исправлять чужие глюки. ;)
Думал, что документации и примеров хватит, ан нет - придется в код лезть...

Re: Вопрос по использованию mod_callcenter

Добавлено: 16 янв 2016, 22:42
tma
pan-user писал(а):просит копипасту
Пример и копипаст - разные вещи.

Re: Вопрос по использованию mod_callcenter

Добавлено: 17 янв 2016, 10:24
Vlad1983
mod_fifo так же не пробовал

ещё одна мелочь, про которую все забывают: через reloadxml применяется только диалплан
после изменения конфигурации и якобы её применения нужно проверить все ли применилось

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

fs_cli -x "callcenter_config queue list"