Как буферизовать DTMF в Asterisk? - PullRequest
0 голосов
/ 05 ноября 2019

Рассмотрим следующий скрипт 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? Или, может быть, есть более высокий уровень канала, не привязанный к конкретному модулю? Куда мне смотреть? Любые намеки ...

1 Ответ

1 голос
/ 05 ноября 2019

AGI-скрипт уже имеет STDIN, который выполняет буферизацию для вас.

Если вы не читаете его, он будет в буфере.

Ваша проблема с DTMF не связана с AGI или буферизацией. Отметьте «DTMF Radio Relax» или просто проверьте правильность настроек DTMF на соединительной линии.

...