Рассмотрим следующий скрипт AGI. Запись диалплана для него просто exten => *,1,AGI(test.agi)
. Используется аналоговая карта TDM410P.
#!/bin/sh
read REPLY; while [ "$REPLY" ]; do
read REPLY
done
#sleep 5
echo ANSWER; read REPLY
#sleep 5
while [ 1 ]; do
echo WAIT FOR DIGIT -1; read REPLY
echo $REPLY >>/tmp/agi
done
Проблема заключается в следующем: я снимаю трубку телефона и очень быстро нажимаю *12345
;В результате первые одна или две цифры иногда теряются (то есть не записываются в /tmp/agi
).
Как сделать так, чтобы звездочка буферизовала цифры DTMF до тех пор, пока они не будут прочитаны?
РЕДАКТИРОВАТЬ
Я думаю, мне нужно создать псевдотерминал (потому что он может буферизовать данные) в канале и записать в него цифры dtmf, как только они будут декодированы, и установитьимя псевдотерминального ведомого в переменных канала. Затем скрипт AGI возьмет имя pty slave из данных инициализации AGI и будет просто читать с pty slave вместо «WAIT FOR DIGIT».
Итак, кто-нибудь знает, как взломать звездочку chan_dahdi
? Или, может быть, есть более высокий уровень канала, не привязанный к конкретному модулю? Куда мне смотреть? Любые намеки ...