Страница 1 из 1
Asterisk и call файлы
Добавлено: 31 мар 2016, 13:45
gofer_k
Всем привет.Необходимо заставить звонить астер на определенные номера из базы mysql и проговаривать определенную текстовку.
Стык с mysql через dialplan сделан все работает.
Теперь вопрос по работе астера с call файлами как лучше их ложить в папку outgoing интересует вот что:
Если я закидываю в папку 200 call файлов одновременно(с разницей в 5-10 сек) как он их будет обрабатывать тоже одновременно или по очереди?
Если одновременно то как я понимаю нужно будет менять у них время создания к примеру +1 минута для того чтобы он их по очереди через минуту обрабатывал.
Re: Asterisk и call файлы
Добавлено: 31 мар 2016, 14:14
BorisTheBlade
В вики именно так расписано, те дата создания файла - время исполнения.
Re: Asterisk и call файлы
Добавлено: 01 апр 2016, 14:58
whoim
Лучше логику внедрять в другом месте. Например, php + mysql табличка.
Отбираем Х записей со статусом NEW или FAILED order by dt, меняем на DIAL, генерим call файлы.
В h и failed контекстах вызываем другой скрипт, который проставляет в этой же табличке статусы по итогу дозвона.
В итоге крутится по кругу, исключая дозвонившихся. Можно допиливать далее - максимально попыток, ограничения по времени и тд. Анализировать число свободных каналов. Играться с префиксами для выбора канала.
И засунуть в крон.
Re: Asterisk и call файлы
Добавлено: 02 апр 2016, 07:47
gofer_k
Спасибо.
Именно так и сделал.
Сам скрипт нагуглил получилось как то так
Код: Выделить всё
#!/bin/bash
user="****"
pass="****"
db="autodial"
sql="select phonenumber from members where status=0"
RES=`mysql -h127.0.0.1 -u $user -p$pass $db -e "$sql"`
printf "$RES" >> number
sed -i "/phonenumber/d" "/home/alex/number"
number=`cat number`
echo "Start parsing file number `date "+%T %D"`"
for a in $number
do
SED=s/123456/$a/
DATA=`date +%N`
cat osnova.call | sed $SED > "$a"_"$DATA".call
chown asterisk. $PWD
echo "Dialing number $a `date "+%T %D"`"
mv "$a"_"$DATA".call /var/spool/asterisk/outgoing/
sleep 30
done
echo "Finish parsing file number `date "+%T %D"`"
rm number
exit 0
Скрипт генерит текстовый файл с номерами у которых status=0 (которым еще не дозвонился aster) которые берет из базы, и подсовывает их в шаблон call файла (osnova.call).
А далее уже номерной план дотягивает из базы нужную мне инфу и ставит статусы дозвонившемся.
Re: Asterisk и call файлы
Добавлено: 02 апр 2016, 09:20
virus_net
ИМХО: Плохой скрипт, обработчик ошибок отсутствует как класс.
Re: Asterisk и call файлы
Добавлено: 02 апр 2016, 21:30
gofer_k
Будут ошибки допилю по мере их появления.
Re: Asterisk и call файлы
Добавлено: 04 апр 2016, 19:01
whoim
Что мешает держать всю инфу в табличке? Проще же
Re: Asterisk и call файлы
Добавлено: 06 апр 2016, 01:09
gofer_k
А какую всю ?
Она и так вроде вся в табличке.
Кроме говноскрипта и его запчастей.Это просто заготовка так сказать со временем перепилю как надо, а может так и останется.
Там просто помимо номеров еще ряд параметров базе лежит которые обрабатываются уже диалпланом вот так
Код: Выделить всё
exten => _X!,1,NoOp(******* autodial to ${EXTEN}) *** ${STRFTIME(${EPOCH},,%d.%m.%Y-%H:%M:%S)} ********)
same => n,MySQL(Connect connid localhost **** ***** autodial utf8)
same => n,MySQL(Query resultid1 ${connid} SELECT length(strsumma)-length(replace(strsumma,' ','')) + 1, id, ClientType FROM members WHERE phonenumber=${EXTEN})
same => n,MySQL(Fetch fetchid ${resultid1} WordCnt RecId CliType)
same => n,Noop(Id: ${RecId}, Words: ${WordCnt})
same => n,Wait(1)
same => n,Playback(/usr/share/asterisk/sounds/ru/digits/${CliType})
same => n,Set(WordNum=1)
same => n(start),GotoIf($[${WordNum} > ${WordCnt}]?goodbye)
same => n,MySQL(Query resultid2 ${connid} SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(strsumma, ' ', ${WordNum}), ' ', -1) FROM members WHERE phonenumber=${EXTEN})
same => n,MySQL(Fetch fetchid2 ${resultid2} wrd)
same => n,Noop(Word = ${wrd})
same => n,Playback(/usr/share/asterisk/sounds/ru/digits/${wrd})
same => n,Goto(goodbye)
same => n,Set(WordNum=$[${WordNum} + 1])
same => n,MYSQL(Clear ${resultid2})
same => n,Goto(start)
same => n(goodbye),MYSQL(Clear ${resultid1})
same => n,MYSQL(Query resultid ${connid} UPDATE members SET status=1, start= ${STRFTIME(${EPOCH},,'%Y-%m-%d %H:%M:%S')} WHERE id=${RecId})
same => n,MYSQL(Clear ${resultid2})
same => n,MYSQL(Disconnect ${connid})
same => n,Hangup()
Re: Asterisk и call файлы
Добавлено: 12 апр 2016, 01:13
whoim
Насколько я понял, статусы вы держите в отдельном файлике. Может, невнимательно вник, лень в телефон залипать.