@asterisk_ru

Страница 403 из 905
Алексей
17.12.2017
09:14:03
Для макроса можно задавать внешнюю переменную
согласен! можно использовать SHARED, GLOBAL, вывод внешней переменной в return(и то либо массивом либо всего одну), можно использовать astdb или mysql. но зачем сложнгости...... если в gosub ты просто можешь ее назначить

Алексей
17.12.2017
09:24:52
Extensions_custom.conf
как в твоей инструкции просто инклуд контекста?

Saint
17.12.2017
09:25:22
как в твоей инструкции просто инклуд контекста?
Ага, народ говорит делал так все работает..а у меня тишина

Google
SilverJoe
17.12.2017
09:31:31
Saint
17.12.2017
09:33:50
файлы озвучки присутствуют?
Да, сделал wav файлик закинул по пути

Логи смотрел при звонке, вообще вызова макроса этого нет

Алексей
17.12.2017
09:36:54
вызова макроса нет..... попробуй в extensions_custom.conf вместо инклуда вызвать так exten => _X.,1,macro(dialout-one-predial-hook)

Алексей
17.12.2017
09:39:05
шу шаблон номера под свои внутренние поправь только

убрать include => macro-dialout-one-predial-hook добавить exten => _X.,1,macro(dialout-one-predial-hook)

Saint
17.12.2017
09:43:06
Алексей
17.12.2017
09:45:36
инклудить макрос в контекст..... прям новое что то..... exten же в совпадение не попадет......

макрос надо вызвать

Saint
17.12.2017
09:50:16
инклудить макрос в контекст..... прям новое что то..... exten же в совпадение не попадет......
Ну говорят такая конструкция работает, хз че мой фбх выеживаеься

Чисто вот как инструкция

Алексей
17.12.2017
09:51:20
не может работать...... ты почитай комменты под статьей

Google
Ivan
17.12.2017
10:02:19
https://github.com/FreePBX/core/blob/release/13.0/etc/extensions.conf

1. include, разумеется, не нужен. 2. Нет MacroExit

Saint
17.12.2017
10:06:35
1. include, разумеется, не нужен. 2. Нет MacroExit
Можете подсказать правильную конструкцию этого макроса?

Ivan
17.12.2017
10:06:54
Можете показать логи звонков?

Saint
17.12.2017
10:07:05
Секунду

Ivan
17.12.2017
10:15:10
-- Executing [s@macro-dial:20] GotoIf("SIP/1102-0002584f", "0?ndloopbegin") in new stack -- Executing [s@macro-dial:21] Macro("SIP/1102-0002584f", "dial-ringall-predial-hook,") in new stack -- Executing [s@macro-dial-ringall-predial-hook:1] MacroExit("SIP/1102-0002584f", "") in new stack -- Executing [s@macro-dial:22] Dial("SIP/1102-0002584f", "SIP/1113,30,TtrIM(auto-blkvm)b(func-apply-sipheaders^s^1),") in new stack Я не разбираюсь в FreePBX, но тут используется macro-dial, а не macro-dial-one, и поэтому хук macro-dialout-one-predial-hook не вызывается. Либо что-то не так в настройках, и надо менять их, чтобы был dial-one вместо dial, либо можно использовать macro-dial-ringall-predial-hook вместо macro-dialout-one-predial-hook. И добавить в конец MacroExit.

То есть можно попробовать [macro-dial-ringall-predial-hook] exten => s,1,Noop(HINT STATUS - ${EXTENSION_STATE(${DEXTEN})}) exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "INUSE"]?Playback(/var/lib/asterisk/sounds/ru/custom/busytest)) exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "INUSE"]?Set(D_OPTIONS=Ttm)) exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "RINGINUSE"]?Playback(/var/lib/asterisk/sounds/ru/custom/busytest)) exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "RINGINUSE"]?Set(D_OPTIONS=Ttm)) exten => s,n,MacroExit По крайней мере этот код будет вызываться в данном конкретном сценарии, а будет ли от этого желаемый эффект - не факт.

Saint
17.12.2017
10:18:43
Завтра буду пробовать ) спасибо за помощь

Ivan
17.12.2017
10:23:04
Судя по исходникам, выбор между dial и dial-one зависит от некоей глобальной настройки: if ($amp_conf['AST_FUNC_EXTENSION_STATE']) { $ext->add($mcontext,$exten,'macrodial', new ext_macro('dial-one','${RT},${DIAL_OPTIONS},${EXTTOCALL}')); } else { $ext->add($mcontext,$exten,'macrodial', new ext_macro('dial','${RT},${DIAL_OPTIONS},${EXTTOCALL}')); }

Алексей
17.12.2017
10:48:30
Подскажите, плиз:)
Не совсем понял задачу.... При переводе ты ставишь клиента в park звонишь абоненту.... если не дозвонился то........ Что должно быть у тебя а что у клиента?

Iker
17.12.2017
10:53:25
если не дозвонился через *2 - сейчас он возвращается на линию к клиенту, выйдя из hold transfer, "А" - перестает слышать moh. А нужно следующее : "А" звонит, "Б" - принимает звонок, затем "Б" делает сопровождаемый трансфер на "В", но не дозванивается или "В" отказывается принимать звонок, Тогда "Б" пробует перевести этот звонок на "Г" и т.д. И в моменты, когда "Б" завершает звонок с {ВГДЕ} - "А" перестает слышать moh, т.к. Б возвращается к нему на линию

Алексей
17.12.2017
10:54:20
И сразу вопрос..... у вас всегда оператор первой линии ждет когда ответит вторая линия? Или перевели и положили трубку? Потом ждут когда звонок им вернется?

Iker
17.12.2017
10:56:43
Т.к. это не слепой трансфер - Б ждет пока ответит {ВГДЕ} и перестает ждать, только если слишком долго идет дозвон и завершает звонок с второй линией

Это всегда attended transfer

Алексей
17.12.2017
10:58:57
Могу тогда предложить простой вариант. после dial проверяй dialstatus и если он !=Answer Пускай его в disa

Там он набирает следующие номера

Или еще вариант.... сделай ринг-группу.... и пусть оператор переводит на нее

Iker
17.12.2017
11:03:11
вот только оператор всегда сам выбирает куда ему перевести, это динамический список без какого-либо порядка

Google
Iker
17.12.2017
11:03:48
я просто думал, что можно каким-то кодом вызывать hold и выходить из него. аналогично как это сделано на телефонах

Алексей
17.12.2017
11:05:11
Можно отправлять в ячейку парка..... звонить кому надо и говорить "в такой то ячейке вас ждут" После этого абонент сам вытащит звонок из парка

Но как по мне..... обучать этому пользователей муторно

Iker
17.12.2017
11:06:26
а автоматом вытаскивать из парка нельзя?

если допустить, что в парке всегда будет только 1 звонок

Алексей
17.12.2017
11:07:53
если допустить, что в парке всегда будет только 1 звонок
Можно попробовать даже если 100.... Просто сохранив ячейку

Правда сложность - выполнить диалплан при завершении канала..... можно попробовать channel redirect использовать.... но как он из паркинга вытащит я не уверен

Iker
17.12.2017
11:11:03
т.е. А звонит Б, Б паркует звонок, я сохраняю ячейку, Б пытается позвонить на {ВГДЕ} - кому успешно позвонил, перед hangout - соединять с паркованым каналом

Алексей
17.12.2017
11:14:53
Ну да..... Только теоритически А может вобще забыть за припаркованного и пойти на обед ;) и в таком случае......

Iker
17.12.2017
11:17:50
хах, ну, насколько я понимаю можно же установить таймаут и тогда звонок вернется...хотя тут проблема может возникнуть в том, что оператор может припарковать один звонок и пока он будет думать, кому его перевесить - ему позвонит другой...

Алексей
17.12.2017
11:18:30
Есть еще кстати вариант..... при трансфере А вводит что то типа 101*103*102# И при трансфере набирать их поочередно....

Таким образом оператор сам формирует ринггруппу

И если никому не дозвонились абонент вернется к А

Iker
17.12.2017
11:21:19
хм, вот это уже поинтереснее. это стандартная логика при attended трансфере? т.е. можно например набрать *2 101*103*102 и пойдет поочередный вызов этим абонентам?

Алексей
17.12.2017
11:22:03
разобрать набраный номер по разделителям и в цикле идти по всем.... условие выхода dialstatus=answer либо если мы прошли полный цикл

Iker
17.12.2017
11:26:31
ну в этом случае в ряде 101*103*102, answer он может получить и у первого(101), но тот не захочет говорить с звонившим.

Iker
17.12.2017
11:29:17
ну вероятно, да. типа он ответил, что ппц как занят и вообще он выходной)

хочется придумать какую-нибудь относительно простую схему для первой линии, чтобы заменить ныне существующий вариант с установкой в hold, переключением на другую линию, дозвоном до второй линией и клацанием кнопки transfer для обьединения этих звонков между собой

Google
Алексей
17.12.2017
11:31:07
тогда можно убрать условие answer Только если я правильно помню там в диал опция какая то должна быть... для продолжения прогулок по диалплану

Дмитрий
17.12.2017
11:33:45
Надоело уже искать и пробовать... астер 15. Подскажите как определить канал или пир, который вызвал фичу? Например, аттендидтрансфёр

много всяких переменных перебрал.. все пусто возвращают

Последняя была BRIDGEPEER. Пусто :(

Алексей
17.12.2017
11:35:14
А dumpchan() пробовал вставить и посмотреть?

Дмитрий
17.12.2017
11:36:04
не зря ж спросил.. спасибо за дельное предложение

Дмитрий
17.12.2017
11:38:43
а при слепой.. иное? очень удобно :(

дамп подтвердил: ATTENDEDTRANSFER=PJSIP/10228-000000c4 TRANSFERERNAME=PJSIP/10228-000000c4 не смотря на название "name".. там всё равно канал

Ivan
17.12.2017
11:41:14
да, BLINDTRANSFER при слепом

Дмитрий
17.12.2017
11:41:24
попробую слепую.. вдруг TRANSFERERNAME выдаст тоже канал

Алексей
17.12.2017
11:43:04
Удачи :)

Дмитрий
17.12.2017
11:44:56
"фигушки". BLINDTRANSFER=PJSIP/10228-000000d4 DIALEDPEERNUMBER=10228 DIALEDPEERNAME=PJSIP/10228-000000d4

Ivan
17.12.2017
11:46:08
TRANSFERERNAME - только в attended и только через features

Алексей
17.12.2017
11:46:56
В слепой допиши Set(TRANFERNAME=${BLINDTRANFER})

Ivan
17.12.2017
11:47:10
есть ещё FORWARDERNAME при 3xx-редиректе (call forward либо SIP-трансфер до ответа на звонок)

Алексей
17.12.2017
11:47:19
И будет везде трансфернам

Блин как неудобно с телефона такие вещи писать

Не хватает подсветки синтаксиса нано ;)

Дмитрий
17.12.2017
11:51:07
самое забавное что в слепой не теряются значения переменных.. из-за чего я и хочу получать имя канала.

Google
Дмитрий
17.12.2017
11:56:28
уф.. сделал таки 3way transfer

Алексей
17.12.2017
12:01:17
Тогда вопрос. Умеет ли астер сохранять сессию звонка в бд? Для последующей работы с ней на другом сервере..... как fs?

Приятно же выстроить ha с астером так чтоб звонки не обрывались при переключении между серверами

Victor_sc120
17.12.2017
12:02:54
exten => s,n,ExecIf($[${LEN(${DB(RECORD/${CHANNEL(linkedid)}/ZCALLFILENAME1)})} != 0]?Goto(horosh1))

никто писать не запрещает - пишу в базу

Дмитрий
17.12.2017
12:13:15
не прерывались? А RTP ходит напрямую?

Алексей
17.12.2017
12:14:30
нет..... есть сервер регистрации он же форвардит rtp на медиасервера....

sofia такое умеет давно...... надеялся на pjsip - но пока не нашел ничего подобного

Дмитрий
17.12.2017
12:19:51
Похоже беда в том, что мы пытаемся использовать астериск там, где он не воин..

у меня вот он падает раз 6-8 на дню... точнее сейчас уже не падает, а просто зависает, а срубает его мой скрипт. грустно... но я пока не готов уйти с астериска. Всё жду когда же исправят зависания при релоде конфигов

Дмитрий
17.12.2017
12:23:11
кстати... подскажите. У меня сейчас всё хранится в БД и выгружается в текстовые конфиги. После делается "pjsip reload", отчего и зависает всё нафих.. если я переделаю на realtime, то: - нужно ли там релодить после внесения изменений? - а если и нужно... не будет ли лучше в части зависаний? :)

Дмитрий
17.12.2017
12:29:00
похоже.. придётся двигаться в его сторону. Вот только проблема нахождения всех трёх наборов таблиц в одной базе не решена... там пишется альбемик в одну таблицу... вроде

Ivan
17.12.2017
13:00:15
Не всё обязательно держать в БД, впрочем

pjsip не работает с движком realtime напрямую, а использует sorcery. Тот уже отвечает за то, откуда брать данные и куда сохранять - конфиги ли это, astdb или realtime.

Дмитрий
17.12.2017
13:23:28
Надеюсь шаблоны там поддерживаются

Страница 403 из 905