Те, кто не читает документацию, предпочитая дискуссии, обращаются в платный суппорт.
Копируете нужный контекст в override_freepbx и добавляете всего одну строчку - добавление в обход pinsets, наклеивая метку[nopinset] , допустим, на 5-й шаг
Вроде с одной стороны желание зарабатывать на своих знаниях понятно. А с другой, не представляю, и никогда не видел, чтобы посылали в платный супорт, ну например, на форуме программистов си-плюс-плюс. А там задачи сложнее, и новички злее. Интересно, при сильном желании и участии крупных компаний, любую область деятельности можно так закоммерциализировать?
Это лирическое отступление, а по теме - спасибо, но не то. С пинами я справился. А по модулю custom contexts документации нет, даже в БольшойТолстойКнижке (по крайней мере, во втором издании). В понедельник просто залезу в исходники и посмотрю, откуда он читает список.
Описание custom contexts - не в Книге о будущем, а в книгах по FreePBX, типа
Алекс Робар «FreePBX 2.5 Мощные телефонные решения» http://asterisk.ru/knowledgebase/books
это модуль оттуда.
Нет, у Робара тоже нету. И на wiki.freepbx нету. Да и фиг бы с ними.
Список функций CustomContexts получает через api объекта $ext, по которому документации так же ноль (поисковый запрос "global ext", с кавычками). А он их получает из только что сгенерированного диалплана, который уже создан в памяти, но не записан на диск. И добавить что-то своё в CustomContexts без правки его исходников, которые, как оказалось, подписаны, нельзя.
Но можно указать failover destination, что тоже неплохо. Только не работает.
Создаю custom destination MyContextForLimited,s,1 с галочкой Return. Получаю следующую ошибку:
localhost*CLI> dialplan show customdests
[ Context 'customdests' created by 'pbx_config' ]
'dest-3' => 1. Noop(Entering Custom Destination For Limited Users п¦) [pbx_config]
2. Gosub(MyContextForLimited,s,1()) [pbx_config]
3. Noop(Returned from Custom Destination For Limited Users п¦) [pbx_config]
4. Goto(app-blackhole,hangup,1) [pbx_config]
localhost*CLI> dialplan show MyContextForLimited
[ Context 'MyContextForLimited' created by 'pbx_config' ]
Include => 'app-cf-on-my' [pbx_config]
localhost*CLI> dialplan show app-cf-on-my
[ Context 'app-cf-on-my' created by 'pbx_config' ]
'1234' => 1. Playback(demo-congrats) [pbx_config]
2. Hangup() [pbx_config]
'h' => 1. Hangup() [pbx_config]
-= 2 extensions (3 priorities) in 1 context. =-
-- Executing [1234@LimitedUsers:1] Goto("SIP/400-00000072", "customdests,dest-3,1") in new stack
-- Goto (customdests,dest-3,1)
-- Executing [dest-3@customdests:1] NoOp("SIP/400-00000072", "Entering Custom Destination For Limited Users п¦") in new stack
-- Executing [dest-3@customdests:2] Gosub("SIP/400-00000072", "MyContextForLimited,s,1()") in new stack
[2015-12-07 12:25:38] ERROR[11251][C-000000ad]: app_stack.c:567 gosub_exec: Attempt to reach a non-existent destination for Gosub: (Context:MyContextForLimited, Extension:s, Priority:1)
== Spawn extension (customdests, dest-3, 2) exited non-zero on 'SIP/400-00000072'
localhost*CLI> dialplan show 1234@LimitedUsers
[ Included context 'LimitedUsers_bad-number' created by 'pbx_config' ]
'_X.' => 1. Goto(customdests,dest-3,1) [pbx_config]
Есть две темы на форумах. В одном месте чувак убрал лишний пробел, и у него заработало, в другом ему посоветовали заменить s на start, хз зачем, но и у него заработало.
Исходя из приведённых выхлопов я понял, что Вы а) не читали Книгу или б) пропускали занятия, и по этой теме у вас зачёта нет.
Не обижайтеся, но объяснять последовательность букв в алфавите для принципа составления в слова на форуме не имеет смысла. Вы не понимаете что пишите, и не понимаете что вам отвечает Астериск.
Ваш контекст MyContextForLimited должен быть написан в extensions_custom.conf в таком виде:
Странно, ошибка исчезла сама собой. Я не обижаюсь, вы тоже не обижайтесь. Все сегодня нервные. Магнитные бури, наверное... Это строчки из примера extensions-custom.sample, и они вполне рабочие. Номер 1234 отвечает, если контекст просто тупо включить в контекст LimitedUsers. Но если указать его в качестве failover destination в модуле CustomContexts, выполняются любые команды, кроме тех, что привязаны к конкретному номеру. Например, тому же 1234. Как будто набранные цифры теряются.
В книжке 600 страниц, я её открываю по мере необходимости...
Если Вы двигаетесь в этом направлении, то Вам нужно учить язык диалплана Астериск. Он простой, типа бейсика, и дебаг вполне информативный,
Attempt to reach a non-existent destination for Gosub: (Context:MyContextForLimited, Extension:s, Priority:1)
тут всё сказано.
postscripter писал(а):7 gosub_exec: Attempt to reach a non-existent destination for Gosub: (Context:MyContextForLimited, Extension:s, Priority:1)
А теперь посмотрите внимательнее на то КУДА вы отправляете в dialplan, а затем на то ЧТО написано в вашем MyContextForLimited, который инклюдит app-cf-on-my.
Вы видите в нем exten s ? Лично я и ded нет, вот и asterisk его так же не видит. О чем в консоли недвусмысленно вам и сообщает.
мой SIP URI sip:virus_net@asterisk.ru bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin) ENUMER - звони бесплатно и напрямую.
Подниму тему. Как писал ded, двигаюсь в.. направлении.
Алгоритм безусловной переадресации *72 я переписал на свой, который разрешает ввести только внутренний номер. Затем из контекста LimitedUsers (название говорит само за себя) при помощи CustomContexts изъял стандартный *72 и добавил свой, всё получилось. Т.е. Limited-пользователи могут делать перевод только на внутренний, а обычные пользователи - на любой.
Но есть ещё feature-коды, типа ## и *2, тоже перевод. Как такую же махинацию провернуть с ними?