@Igor2208

Asterisk Playback?

Всем привет. Как настроить в Астериск , что бы скажем на 20 одновременных звонков проигрывались 20 разных аудиофайлов?
Скажу сразу функция RAND не подходит , она повторяет аудиозаписи . мне нужно что бы они не повторялись .
За ранее спасибо .
  • Вопрос задан
  • 814 просмотров
Решения вопроса 1
sptm
@sptm
software developer / DevOps engineer
Стандартными средствами дайлплана это можно сделать как-то так:

есть 20 файлов - 1.wav, 2.wav, 3.wav, ... , 19.wav, 20.wav. И примерно такой дайлплан:

TOTALSOUNDS = 20
CURRENTSOUND = 1

[context]
exten => _X.,1,GotoIf($[${CURRENTSOUND} <= ${TOTALSOUNDS}]?sound-plus)
exten => _X.,n,Set(GLOBAL(CURRENTSOUND)=1)
exten => _X.,n(sound-plus),Set(GLOBAL(CURRENTSOUND)=$[${CURRENTSOUND}+1])
exten => _X.,n,Playback(${CURRENTSOUND})
exten => _X.,n,Hangup()


А еще это можно реализовать похожим простым способом на более удобном ЯП посредством AGI или даже ARI.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Gansterito
Могу предложить два варианта:
1) Хеш-функция от переменной UniqueueID. Функция должна выдавать значение от 1 до 20 (или сколько у Вас там). Как эту функциою написать - другая задача, но тут возможны коллизии, когда один файл может повториться более одного раза.
2) Установка каждому вызову SET(GROUP()=mygroup), а затем проигрывание файла ${GROUP_COUNT(mygroup)}.wav. Это почти такой же вариант как от предыдущего комментатора, но без глобальной переменной, а через группу. Гарантирует уникальность проигрываемого одновременно файла.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы