Для начала располагайте скрипты там, где определено в структуре /etc/asterisk/asterisk.conf а не там где придётся - в папке /home.
/var/lib/asterisk/agi-bin/
Reader писал(а):А можно ли по-подробнее - как в Астериске делается запуск колл-файлов со смещением по времени скажем на 1,5 секунды следующий по отношению к предыдущему ?
У меня FS держит наносекунды:
to Wapo:
Насчёт 10 секунд задержки - это мне нужно просто на пробу. Прежде чем запускать кучу звонков в TDM и рисковать завалить набок TDM-PBX хочу запустить тест на 3х испытательных безобидных телефонах от этой TDM, расположенных у меня на столике. И задержка в 10 сек. нужна для того, чтобы просто на слух понять, что всё работает как в аптеке. Ваша идея инициировать предварительные испытания посылкой "888" в Эластикс оказалась очень удачной и я сделал также. А вот теперь дальше ! Чего-й то у меня оно не робит как в аптеке. Взял скрипт:
#!/usr/bin/perl
my $dir='/etc/asterisk/tu11';
@files=glob("$dir/*.call");
foreach $file (@files)
{
if(($file ne ".") or ($file ne ".."))
{
mv $file /var/spool/asterisk/outgoing;
outgoingsleep(10);
}
}
Засунул я этот скрипт в папку /var/lib/asterisk/agi-bin. Проверил в свойствах владельца этого скрипта. Им оказался root. А у всех соседских скриптов и agi-файлов владельцем оказался Asterisk. Ну, я изменил своему скрипту имя владельца на Asterisk. Проверил остальные права - "0755". У соседей - "0754". Стало быть нам туда дорога - сделал "0754".
Прописал в маршрутизации в файлике extension_custom.conf строку exten => 888,1,System(/var/lib/asterisk/agi-bin/tu-perl-script);
Запустил анализатор анализов CLI и как Вы думаете, что я там обнаружил ? Да, в данном примере 6576 - мой испытательный телефончик.
-- Accepting call from '6576' to '888' on channel 0/10, span 1
-- Executing [888@from-pstn:1] System("DAHDI/i1/6576-72", "/var/lib/asterisk/agi-bin/tu-perl-script") in new stack
-- Executing [888@from-pstn:2] NoOp("DAHDI/i1/6576-72", "Received an unknown call with DID set to 888") in new stack
-- Executing [888@from-pstn:3] Goto("DAHDI/i1/6576-72", "s,a2") in new stack
-- Goto (from-pstn,s,2)
-- Executing [s@from-pstn:2] Answer("DAHDI/i1/6576-72", "") in new stack
-- Executing [s@from-pstn:3] Wait("DAHDI/i1/6576-72", "2") in new stack
-- Executing [s@from-pstn:4] Playback("DAHDI/i1/6576-72", "ss-noservice") in new stack
-- <DAHDI/i1/6576-72> Playing 'ss-noservice.slin' (language 'en')
-- Span 1: Channel 0/10 got hangup request, cause 16
== Spawn extension (from-pstn, s, 4) exited non-zero on 'DAHDI/i1/6576-72'
-- Executing [h@from-pstn:1] Macro("DAHDI/i1/6576-72", "hangupcall,") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("DAHDI/i1/6576-72", "1?endmixmoncheck") in new stack
-- Goto (macro-hangupcall,s,9)
-- Executing [s@macro-hangupcall:9] NoOp("DAHDI/i1/6576-72", "End of MIXMON check") in new stack
-- Executing [s@macro-hangupcall:10] GotoIf("DAHDI/i1/6576-72", "1?nomeetmemon") in new stack
-- Goto (macro-hangupcall,s,28)
-- Executing [s@macro-hangupcall:28] NoOp("DAHDI/i1/6576-72", "End of MEETME check") in new stack
-- Executing [s@macro-hangupcall:29] GotoIf("DAHDI/i1/6576-72", "1?noautomon") in new stack
-- Goto (macro-hangupcall,s,34)
-- Executing [s@macro-hangupcall:34] NoOp("DAHDI/i1/6576-72", "TOUCH_MONITOR_OUTPUT=") in new stack
-- Executing [s@macro-hangupcall:35] GotoIf("DAHDI/i1/6576-72", "1?noautomon2") in new stack
-- Goto (macro-hangupcall,s,41)
-- Executing [s@macro-hangupcall:41] NoOp("DAHDI/i1/6576-72", "MONITOR_FILENAME=") in new stack
-- Executing [s@macro-hangupcall:42] GotoIf("DAHDI/i1/6576-72", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,45)
-- Executing [s@macro-hangupcall:45] GotoIf("DAHDI/i1/6576-72", "1?skipblkvm") in new stack
-- Goto (macro-hangupcall,s,48)
-- Executing [s@macro-hangupcall:48] GotoIf("DAHDI/i1/6576-72", "1?theend") in new stack
-- Goto (macro-hangupcall,s,50)
-- Executing [s@macro-hangupcall:50] AGI("DAHDI/i1/6576-72", "hangup.agi") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/hangup.agi
-- <DAHDI/i1/6576-72>AGI Script hangup.agi completed, returning 0
-- Executing [s@macro-hangupcall:51] Hangup("DAHDI/i1/6576-72", "") in new stack
== Spawn extension (macro-hangupcall, s, 51) exited non-zero on 'DAHDI/i1/6576-72' in macro 'hangupcall'
== Spawn extension (from-pstn, h, 1) exited non-zero on 'DAHDI/i1/6576-72'
-- Hungup 'DAHDI/i1/6576-72'
El*CLI>
[root@El ~]#
Т.е. Elastix мне даёт понять, что скрипт настолько неправильный, что неправильнее придумать себе сложно, а уж исполнять его и речи быть не может.
Вопрос - а чего бы такого можно было бы в этом скрипте исправить, чтобы он стал правильный ?
Да, надо отметить, что в папке колл-файлов /etc/asterisk/tu11 прячутся 3 испытанных на небольшой телеконференции "правильных" файлика вида 5344.call:
От нетерпения похоже у меня ручонки дрожат. Выявил и исправил 1ну досадную описку в скрипте (в слове sleep), допущенную час назад. Теперь он выглядит по-правильнее, дословно так:
#!/usr/bin/perl
my $dir='/etc/asterisk/tu11';
@files=glob("$dir/*.call");
foreach $file (@files)
{
if(($file ne ".") or ($file ne ".."))
{
mv $file /var/spool/asterisk/outgoing;
sleep(10);
}
}
Но воз и ныне там - работать не хочет !! (Видимо руки не только дрож., но и кривые, видимо док-я не читается). Конкретно:
-- Accepting call from '6576' to '888' on channel 0/15, span 3
-- Executing [888@from-pstn:1] System("DAHDI/i3/6576-60", "/var/lib/asterisk/agi-bin/tu-perl-script") in new stack
-- Executing [888@from-pstn:2] NoOp("DAHDI/i3/6576-60", "Received an unknown call with DID set to 888") in new stack
-- Executing [888@from-pstn:3] Goto("DAHDI/i3/6576-60", "s,a2") in new stack
-- Goto (from-pstn,s,2)
-- Executing [s@from-pstn:2] Answer("DAHDI/i3/6576-60", "") in new stack
-- Executing [s@from-pstn:3] Wait("DAHDI/i3/6576-60", "2") in new stack
-- Executing [s@from-pstn:4] Playback("DAHDI/i3/6576-60", "ss-noservice") in new stack
-- <DAHDI/i3/6576-60> Playing 'ss-noservice.slin' (language 'en')
-- Span 3: Channel 0/15 got hangup request, cause 16
== Spawn extension (from-pstn, s, 4) exited non-zero on 'DAHDI/i3/6576-60'
-- Executing [h@from-pstn:1] Macro("DAHDI/i3/6576-60", "hangupcall,") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("DAHDI/i3/6576-60", "1?endmixmoncheck") in new stack
-- Goto (macro-hangupcall,s,9)
-- Executing [s@macro-hangupcall:9] NoOp("DAHDI/i3/6576-60", "End of MIXMON check") in new stack
-- Executing [s@macro-hangupcall:10] GotoIf("DAHDI/i3/6576-60", "1?nomeetmemon") in new stack
-- Goto (macro-hangupcall,s,28)
-- Executing [s@macro-hangupcall:28] NoOp("DAHDI/i3/6576-60", "End of MEETME check") in new stack
-- Executing [s@macro-hangupcall:29] GotoIf("DAHDI/i3/6576-60", "1?noautomon") in new stack
-- Goto (macro-hangupcall,s,34)
-- Executing [s@macro-hangupcall:34] NoOp("DAHDI/i3/6576-60", "TOUCH_MONITOR_OUTPUT=") in new stack
-- Executing [s@macro-hangupcall:35] GotoIf("DAHDI/i3/6576-60", "1?noautomon2") in new stack
-- Goto (macro-hangupcall,s,41)
-- Executing [s@macro-hangupcall:41] NoOp("DAHDI/i3/6576-60", "MONITOR_FILENAME=") in new stack
-- Executing [s@macro-hangupcall:42] GotoIf("DAHDI/i3/6576-60", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,45)
-- Executing [s@macro-hangupcall:45] GotoIf("DAHDI/i3/6576-60", "1?skipblkvm") in new stack
-- Goto (macro-hangupcall,s,48)
-- Executing [s@macro-hangupcall:48] GotoIf("DAHDI/i3/6576-60", "1?theend") in new stack
-- Goto (macro-hangupcall,s,50)
-- Executing [s@macro-hangupcall:50] AGI("DAHDI/i3/6576-60", "hangup.agi") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/hangup.agi
-- <DAHDI/i3/6576-60>AGI Script hangup.agi completed, returning 0
-- Executing [s@macro-hangupcall:51] Hangup("DAHDI/i3/6576-60", "") in new stack
== Spawn extension (macro-hangupcall, s, 51) exited non-zero on 'DAHDI/i3/6576-60' in macro 'hangupcall'
== Spawn extension (from-pstn, h, 1) exited non-zero on 'DAHDI/i3/6576-60'
-- Hungup 'DAHDI/i3/6576-60'
El*CLI>
Кто виноват - понятно. Но след.вопрос - что делать ?
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
ничего сверхъестественного - дебажить
как минимум запустить скрипт руками и убедиться что он выполняет то что тебе нужно
Reader писал(а):как в Астериске делается запуск колл-файлов со смещением по времени скажем на 1,5 секунды следующий по отношению к предыдущему ?
уже отвечали и даже сцыль давал- создавать файл с датой создания в будущем со смещением на столько насколько требуется - хоть на сутки
честно не вкуриваю зачем такое извращение как tu-perl-script если можно просто пользовать touch при создании этих самых call файлов
мой SIP URI sip:virus_net@asterisk.ru bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin) ENUMER - звони бесплатно и напрямую.
to Virus_net:
Использоват Touch - это конечно блестящая мысль. Но я только что попробовал - не робит !! Возможно, что я опять где-то ошибаюсь, но поскольку опыта нема, напишу что делал.
1. Отыскал в недрах Elastix сам файл touch - он оказался в папке /bin/
2. Вбил в Эласт. 3 команды смены даты создания моих 3х испытательных колл-файлов на дату из будущего с шагом по созданию файлов в 10 секунд - чтоб была задержка для запуска (напомню, в тот момент у меня на часах было 10:40):
/bin/touch -t 1311201051.01 /etc/asterisk/tu11/5344.call
/bin/touch -t 1311201051.11 /etc/asterisk/tu11/6299.call
/bin/touch -t 1311201051.21 /etc/asterisk/tu11/6576.call
Эту процедуру я успешно закончил в 10:42. Эласт. всё сожрал и не ругнулся ни разу.
3. Создал в Cron задание на запуск 3х колл-файлов для запуска испытательной конференции (дописал конкретную строку в файл per-cron в добавок к уже имеющимся):
46 10 * * 1-5 /home/tu11-script
Эласт. сожрал новую строку ни разу не поперхнувшись.
4. Инициализировал новую строку в напоминальнике Эласта.
5. В 10:45 включил CLI и уставился в монитор.
И что я там увидел ?
Вдруг ровно в 10:46 раздались одновременно сразу 3 звонка на 3х испытательных телефона. И из Эласта полезли дословно след.строки:
-- Attempting call on DAHDI/g0/5344 for 77@tu-call:1 (Retry 1)
-- Attempting call on DAHDI/g0/6299 for 77@tu-call:1 (Retry 1)
-- Attempting call on DAHDI/g0/6576 for 77@tu-call:1 (Retry 1)
-- Requested transfer capability: 0x00 - SPEECH
-- Requested transfer capability: 0x00 - SPEECH
-- Requested transfer capability: 0x00 - SPEECH
-- Attempting call on DAHDI/g0/5344 for 77@tu-call:1 (Retry 1)
-- Attempting call on DAHDI/g0/6299 for 77@tu-call:1 (Retry 1)
-- Attempting call on DAHDI/g0/6576 for 77@tu-call:1 (Retry 1)
-- Requested transfer capability: 0x00 - SPEECH
-- Requested transfer capability: 0x00 - SPEECH
-- Requested transfer capability: 0x00 - SPEECH
> Channel DAHDI/i1/5344-c0 was never answered.
-- Span 1: Channel 0/4 got hangup request, cause 17
-- Hungup 'DAHDI/i1/5344-c0'
-- Span 1: Channel 0/5 got hangup request, cause 17
> Channel DAHDI/i1/6299-c1 was never answered.
-- Hungup 'DAHDI/i1/6299-c1'
-- Span 1: Channel 0/6 got hangup request, cause 17
> Channel DAHDI/i1/6576-c2 was never answered.
-- Hungup 'DAHDI/i1/6576-c2'
> Channel DAHDI/i1/5344-bd was answered.
-- Executing [77@tu-call:1] Answer("DAHDI/i1/5344-bd", "") in new stack
-- Executing [77@tu-call:2] Wait("DAHDI/i1/5344-bd", "1") in new stack
> Channel DAHDI/i1/6576-bf was answered.
-- Executing [77@tu-call:1] Answer("DAHDI/i1/6576-bf", "") in new stack
-- Executing [77@tu-call:2] Wait("DAHDI/i1/6576-bf", "1") in new stack
-- Executing [77@tu-call:3] Playback("DAHDI/i1/5344-bd", "/var/spool/asterisk/tmp/Welcom_to_TU") in new stack
-- <DAHDI/i1/5344-bd> Playing '/var/spool/asterisk/tmp/Welcom_to_TU.slin' (language 'en')
-- Executing [77@tu-call:3] Playback("DAHDI/i1/6576-bf", "/var/spool/asterisk/tmp/Welcom_to_TU") in new stack
-- <DAHDI/i1/6576-bf> Playing '/var/spool/asterisk/tmp/Welcom_to_TU.slin' (language 'en')
> Channel DAHDI/i1/6299-be was answered.
-- Executing [77@tu-call:1] Answer("DAHDI/i1/6299-be", "") in new stack
-- Executing [77@tu-call:2] Wait("DAHDI/i1/6299-be", "1") in new stack
-- Executing [77@tu-call:3] Playback("DAHDI/i1/6299-be", "/var/spool/asterisk/tmp/Welcom_to_TU") in new stack
-- <DAHDI/i1/6299-be> Playing '/var/spool/asterisk/tmp/Welcom_to_TU.slin' (language 'en')
-- Executing [77@tu-call:4] Wait("DAHDI/i1/5344-bd", "1") in new stack
-- Executing [77@tu-call:4] Wait("DAHDI/i1/6576-bf", "1") in new stack
-- Executing [77@tu-call:5] MeetMe("DAHDI/i1/5344-bd", "77,oTqsr,") in new stack
== Parsing '/etc/asterisk/meetme.conf': == Found
== Parsing '/etc/asterisk/meetme_additional.conf': == Found
-- Created MeetMe conference 1023 for conference '77'
> Starting recording of MeetMe Conference 77 into file meetme-conf-rec-77-1384922761.672.wav.
-- Span 1: Channel 0/2 got hangup request, cause 16
== Spawn extension (tu-call, 77, 3) exited non-zero on 'DAHDI/i1/6299-be'
-- Hungup 'DAHDI/i1/6299-be'
-- Executing [77@tu-call:5] MeetMe("DAHDI/i1/6576-bf", "77,oTqsr,") in new stack
-- Span 1: Channel 0/3 got hangup request, cause 16
== Spawn extension (tu-call, 77, 5) exited non-zero on 'DAHDI/i1/6576-bf'
-- Hungup 'DAHDI/i1/6576-bf'
-- Span 1: Channel 0/1 got hangup request, cause 16
-- Hungup 'DAHDI/pseudo-883708240'
-- Hungup 'DAHDI/pseudo-272879'
== Spawn extension (tu-call, 77, 5) exited non-zero on 'DAHDI/i1/5344-bd'
-- Hungup 'DAHDI/i1/5344-bd'
El*CLI>
Т.е. Эласт. не отработал изменённых дат создания колл-файлов !!! Либо я чего-то не понимаю.
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
Сейчас я попристальнее поглядел - а вообще Touch изменил ли время-то создания моих испытательных колл-файлов или нет ? Посмотрел и сфотографировал (см. прикрепл. файл). Таки изменил. Знач. Touch не виноват. Знач. виноват наверное Cron ? Или что ?
Вложения
2013-11-20_110730.png (6.75 КБ) 6369 просмотров
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
Хех.
Настрочил пробный скрипт для запуска обзвона вручную:
exten => 888,1,System(/home/test/tu11-5344-script);
exten => 888,2,Wait(5) ; без этого не получается нормально обработать следующий звонок
exten => 888,3,System(/home/test/tu11-6299-script);
exten => 888,4,Wait(5) ; без этого не получается нормально обработать следующий звонок
exten => 888,5,System(/home/test/tu11-6576-script);
;конец моего простейшего скрипта от 20.11.2013
Звоню с TDM в Эласктикс на "888". И тестовый обзвон начинается и проходит как в аптеке. Лепота !!!
Кроме того с прицелом на обзвон большой конференции - при такой конструкции обзвона можно принудительно выбирать порядок обзвона вызываемых абонентов, делать такой порядок, чтобы они вызывались из разных мест TDM-PBX, чтобы резко снизить вероятность загнать TDM-PBX в "Синий_экран_или_релоуд_как_он_там_называется".
Правда пришлось для него создавать сразу 3 скрипта в папочке /home/test. Кроме того неудобственно собирать конференцию вручную - приходится всё время пока идёт сбор участников держать трубку в снятом состоянии. Я задумался на секундочку, пока всё катит легко - пока всего 3 подопытных абонента. Если придётся собирать 75 особ и использовать паузу 3 сек. между звонками - я проторчу на трубке-организаторе 4 минуиты !!!!!!!! Тосклитвовато прямо скажем ! Но ведь работает жеж ! Но тоскливовато торчать на трубке 4 минуты !! А если представить себе чта появится новенький участник гигаконференции !? Это сколько жеж его прописывать в скольких местах !!!!! Тоскливовато !..
Может быть есть удачные примеры написания более продвинутого скрипта ?
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !