• Выгрузка в текстовый файл в виде таблицы?

    @Drill
    Arkadjan,
    Ну, я понял, что это вместо спасибо за решение задачи.
    Хотел бы услышать конкретно, что здесь мудреного?
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,

    1. В вашем логе есть лишнике звонки, не относящиеся к вопросу. Рыться по этой простыне у меня нет времени.

    2.
    -- Executing [s@macro-dialout-trunk:28] NoOp("PJSIP/703-000042c4", "Dial failed for some reason with DIALSTATUS = CHANUNAVAIL and HANGUPCAUSE = 21") in new stack
        -- Executing [s@macro-dialout-trunk:29] GotoIf("PJSIP/703-000042c4", "0?continue,1:s-CHANUNAVAIL,1") in new stack
        -- Goto (macro-dialout-trunk,s-CHANUNAVAIL,1)


    DIALSTATUS = CHANUNAVAIL - обычно означает, что "peer" не определен, не зарегистрирован или не прошел проверку на доступность (qualify).
    Возможно, что и сам мегафон чудит...
    Для того, чтобы узнать более точно, надо смотреть SIP трафик дебагом, что именно прислал мегафон в ответ на пакет INVITE и т.д.
    Включается в консоли:
    sip set debug - для всех пиров
    sip set debug peer - для одного пира
    sip set debug ip - дебаг для хоста с IP адресом
    Или ставите утилиту sngrep и смотрите обмен пакетами в ней. Это намного удобней.

    Но дебаг - это очень обширная отдельная тема.
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    Там прописаны шаблоны ,поэтому не попадает!

    Не потому, что там прописан шаблон, а потому, что номер не совпадает с шаблоном.
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    Вот на этот номер например не звонит! Я не понимаю почему такая избирательность ,на какие то звонит на какие то нет..


    1. Все правильно астер делает. Как вы написали диалплан, так он и делает.
    Надо внимательно читать, что же он вам написал в ошибке: "Channel "PJSIP / 739-000035f2" sent to invalid extension"
    Перевожу: "Канал "PJSIP / 739-000035f2" отправлен на недопустимый екстеншен"
    Что надо сделать?
    Правильно, проверить, что там у нас написано в контексте [outrt-10]. А там, черным по белому для екстеншенов прописан такой шаблон '_+790663[1-9]XXXX'
    А мы на какой номер пытаемся позвонить? правильно, на такой +79211025252 и на такой +79108280465. И что имеем? А то, что не проходят здесь эти номера. Об этом астер и говорит.
    А вот этот номер +79066357070 замечательно совпадает с шаблоном и проходит через контекст по всем пунктам.

    2. По сути я уже давно и правильно ответил на ваш вопрос, поэтому уже давно можно было отметить его решением. Все остальное уже не относится к теме вопроса. Для таких вещей создают отдельные темы.

    3. Я конечно, могу помогать и бесплатно (в разумных пределах). Но я не до такой степени альтруист, чтобы заниматься вашим астериском уже больше недели.
    У меня тоже есть куча дел, и практически нет времени ))
    Советую все-таки больше читать документацию по астеру. Там много интересного.
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,

    1. какая ошибка? я логов не вижу..

    2.
    exten => _.,n,Goto(${var_trunk_outrt},${EXTEN},1)

    так нельзя делать. На ходу меняете шаблон естеншена.
    было
    exten => _[+0-9]!,n,GotoIf($["${var_trunk_outrt}" = "pusto"]?pusto)
    exten => _[+0-9]!,n,Goto(${var_trunk_outrt},${EXTEN},1)


    а стало:
    exten => _[+0-9]!,n,GotoIf($["${var_trunk_outrt}" = "pusto"]?pusto)
    exten => _.,n,Goto(${var_trunk_outrt},${EXTEN},1)

    И по логике эта строка вообще не сработает.. Потому что астер при чтении диалплана отсортирует строки в порядке убывания с наименьшим совпадением и эта строка будет вообще последней в контексте [outbound-restricted-routes]
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    Здесь лишний второй лейбл (gonext).
    Если условие не выполнится, то выполнение диалплана пойдет дальше со следующей строки:
    exten => _[+0-9]!,n,GotoIf($["${var_trunk_outrt}" = "pusto"]?pusto)
    exten => _[+0-9]!,n,Goto(${var_trunk_outrt},${EXTEN},1)
    exten => _[+0-9]!,n(pusto),Noop(== PUSTO QUIT CUSTOMIZATION ==)
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    так покажите хоть какой-то алгоритм того, что хотите сделать. Я ж не телепат
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    но потом он все же перескачил на 10 я так понял

    нет, неправильно понял
    Это не номер в имени контекста [outrt-10], а номер транка, через который совершается исходящий вызов.
    Фрипбкс назначает номера транкам.
    Посмотреть можно в файле extensions_additional.conf, в начале в секции [globals]
    Выглядит примерно так:
    OUT_2 = SIP/Addpac1_P1_0
    OUTCID_2 = 
    OUTMAXCHANS_2 = 
    OUTFAIL_2 = 
    OUTPREFIX_2 = 
    OUTDISABLE_2 = off
    OUTKEEPCID_2 = off
    FORCEDOUTCID_2 = 
    PREFIX_TRUNK_2 =


    OUT_2 = SIP/Addpac1_P1_0 => Номер транка 2, протокол SIP и имя транка Addpac1_P1_0

    У вас должно быть OUT_10 = ....

    Executing [+79066357070@outrt-13:11] Macro("PJSIP/703-00002009", "dialout-trunk,10,+79066357070,,off") in new stack


    Здесь видно, что выполняется диалплан из контекста outrt-13 (строка контекста №11):
    +79066357070@outrt-13:11

    А конкретно вызывается макрос "macro-dialout-trunk" :
    Macro("PJSIP/703-00002009", "dialout-trunk,10,+79066357070,,off")


    В макрос передаются параметры - номер транка 10, екстеншен +79066357070 и т.д.

    и пошел звонок на транк под номером 10:
    Executing [s@macro-dialout-trunk:1] Set("PJSIP/703-00002009", "DIAL_TRUNK=10")
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    В данном случае могу посоветовать два варианта:

    1. Отключить этот платный модуль. Ну, или разобраться с ним, возможно, там есть какие-нибудь доп. настройки, короче поэспериментировать, и посмотреть может там можно делать доп. обработку звонка

    2. Скопировать контекст [outbound-restricted-routes] из файла extensions_additional.conf,
    вставить в файл extensions_override_freepbx.conf и уже там его модифицировать по своему вкусу.
    Он и будет выполняться.

    Вместо строк с Noop пишете свою обработку исходящего
    [outbound-restricted-routes]
    include => outbound-restricted-routes-custom
    exten => _[+0-9]!,1,Noop(======================================================)
    exten => _[+0-9]!,n,Noop(========= Context OUTBOUND-RESTRICTED-routes =========)
    exten => _[+0-9]!,n,Noop(== Destination: ${EXTEN} , CID: ${CALLERID(number)} ==)
    exten => _[+0-9]!,n,Noop(======================================================)
    ...
    exten => _[+0-9]!,n,Noop()
    
    exten => _[+0-9]!,n,Macro(user-callerid,LIMIT)
    exten => _[+0-9]!,n,Set(ROUTEUSER=${IF($["${EXTTOCALL}"!=""]?${EXTTOCALL}:${AMPUSER})})
    exten => _[+0-9]!,n,Set(ROUTEUSER=${IF($["${DB_EXISTS(AMPUSER/${ROUTEUSER}/cidnum)}"="1"]?${ROUTEUSER}:${NODEST})})
    exten => _[+0-9]!,n,GotoIf($["${BLINDTRANSFER}" == ""]?notblind)
    exten => _[+0-9]!,n,Set(ENDPOINT=${CUT(BLINDTRANSFER,-,1)})
    exten => _[+0-9]!,n,Set(ROUTEUSER=${CUT(ENDPOINT,/,2)})
    exten => _[+0-9]!,n(notblind),GotoIf($[${LEN(${ROUTEUSER})}>0 & ${DB_EXISTS(AMPUSER/${ROUTEUSER}/outroute_hash)}]?${DB(AMPUSER/${ROUTEUSER}/outroute_hash)},${EXTEN},2:outbound-allroutes,${EXTEN},2)
    exten => h,1,Hangup()
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    так оно и не доходит до [outbound-allroutes]
    Срабатывает последняя строка с меткой notblind в контексте [outbound-restricted-routes] и дальше маршрут уходит в другой контекст [restrictedroute-f1d221837338700dba31ee7cc452eec6]

    строки 45 и 46 в pastebin.com:
    -- Executing [+79066357070@from-internal:7] GotoIf("PJSIP/703-0000129a", "1?restrictedroute-f1d221837338700dba31ee7cc452eec6,+79066357070,2:outbound-allroutes,+79066357070,2") in new stack
        -- Goto (restrictedroute-f1d221837338700dba31ee7cc452eec6,+79066357070,2)


    В фрипбкс смотрите Запрещенные маршруты, что там да как.
    Попробуйте вообще отменить Запрещенные маршруты, чтобы хотя бы увидеть ваш звонок в [outbound-allroutes-custom]
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    Вставьте в конец файла extensions_custom.conf следующий кусок диалплана:

    [outbound-restricted-routes-custom]
    exten => _+X.,1,Noop(======================================================)
    exten => _+X.,n,Noop(========= Context OUTBOUND-RESTRICTED-routes =========)
    exten => _+X.,n,Noop(== Destination: ${EXTEN} , CID: ${CALLERID(number)} ==)
    exten => _+X.,n,Noop(======================================================)
    
    [outbound-allroutes-custom]
    exten => _+X.,1,Noop(======================================================)
    exten => _+X.,n,Noop(========== Context OUTBOUND-ALLROUTES-custom =========)
    exten => _+X.,n,Noop(== Destination: ${EXTEN} , CID: ${CALLERID(number)} ==)
    exten => _+X.,n,Noop(======================================================)


    И да, я надеюсь вы не забываете после каждого изменения диалплана делать dialplan reload в консоли?

    Позвоните , и покажите вывод консоли
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    тогда покажите еще один контекст
    dialplan show outbound-restricted-routes
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    и еще покажите вывод
    dialplan show from-internal-additional
    и
    dialplan show outbound-allroutes
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    1. так не надо делать
    [from-internal-custom]
    exten => _.,n,Goto(${outrt-13},${EXTEN},1)

    вы пропускаете кучу контекстов, в которых обрабатывается звонок, утанавливаются переменные канала, отрабатывают макросы ит.д.
    Уберите строку с Goto. Пусть звонок идет дальше по диалплану. И покажите вывод строки
    exten => _.,n,Noop(${EXTEN})

    2. В Goto контекст не надо обрамлять скобками Goto(outrt-13,${EXTEN},1).

    3. Наберите в консоли следующее (только вместо +7ХХХХХХХХХХ подставьте реальный номер)
    dialplan show +7ХХХХХХХХХХ@from-internal
    И покажите вывод
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    У вас точно FreePBX ?
    в лог попадают входящие звонки

    В лог попадают все события, в том числе и звонки (и входящие и исходящие). А вот в контекст диалплана [outbound-allroutes] попадают только исходящие звонки. И вы должны это видеть либо в консоли, либо в логе.
    Если вы имеете в виду, что в этот контекст попадают входящие, то это априори невозможно, только если вы не накосячили с настройкой диалплана (в частности, транков).
    Входящие и исходящие изначально попадают в разные стартовые контексты и дальше идут по своим маршрутам.
    Для исходящих маршрут выглядит так:

    [from-internal]
    include => from-internal-xfer
    include => bad-number
    
    [from-internal-xfer]
    include => from-internal-custom
    include => from-internal-additional
    ...
    exten => h,1,Macro(hangupcall)
    
    [from-internal-additional]
    include => from-internal-additional-custom
    include => ...
    ...
    include => outbound-allroutes
    exten => h,1,Hangup
    
    [outbound-allroutes]
    include => outbound-allroutes-custom
    include => outrt-...
    ...
    include => outrt-...
    exten => foo,1,Noop(bar)


    Все эти контексты описаны в двух файлах: extensions.conf, extensions_additional.conf. Правки в этих файлах делять нельзя (при перезагрузке они перезапишутся). Для своих костылей есть отдельный файл extensions_custom.conf.
    Если посмотрите выше на маршрут прохождения исходящих, то увидите, что в контексте [outbound-allroutes] есть строка с включением кастомного контекста include => outbound-allroutes-custom
    Создаете в файле extensions_custom.conf отдельный контекст [outbound-allroutes-custom] и в нем уже описываете логику обработки исходящего звонка.

    когда использую exten => _.,1, то все есть

    Значит ваши номера, на которые звоните, начинаются не с цифры.
    Покажите пример номера на который вы звоните
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    1. А какой уровень отладки в консоли задал? По умолчанию астер выводит минимум сообщений в консоль
    Надо выставить хотя бы левел 3
    core set verbose 3
    или прописать в cli.conf и рестартануть астериск:
    [startup_commands]
    core set verbose 3 = yes


    2. Можно посмотреть в логах. Но уровень логирования тоже должен быть не ниже 3 уровня (прописывается в файле asterisk.conf).
    [options]
    verbose=3
  • Как определить что оператор разговаривает?

    @Drill
    Игорь,
    На разных версиях астериска с разным диалпланом вывод может несущественно отличаться. Но в целом алгоритм один и тот же.
  • Asterisk\FreePBX действие до совершения исходящего вызова?

    @Drill
    SteepNET,
    Так я уже показал выше...
    Например так (Destination - куда звоним, Caller ID - кто звонит)
    exten => _X.,1,Noop(======================================================)
    exten => _X.,n,Noop(=== Destination: ${EXTEN} , Caller ID: ${CALLERID(number)} ===)
    exten => _X.,n,Noop(======================================================)
  • Как строку в которой есть словарь сделать словарём?

    @Drill
    Samad_Samadovic,
    Чтобы не было ошибки используйте одинарные кавычки для обрамления всей строки, если внутри строки есть двойные кавычки (и наоборот)
    A = '{"A":"B"}'

    мне нужен список, а не json

    Вообщето вопрос в заголовке темы звучит так "Как строку в которой есть словарь сделать словарём?"

    Так что ответ абсолютно правильный
    >>> import json
    >>> A = json.loads(A)
    >>> A
    {'A': 'B'}