Linha de comando do Linux:
linphone
inclui uma versão de linha de comando linphonec
com script. A partir de linphonec
com a opção --pipe
, será criado um soquete em /tmp
para o qual é possível gravar e ler.
Ele atende a todos os seus requisitos e eu testei (para meus próprios usos) todos eles com sucesso:
- Chamando via SIP,
- transmitindo sequências DTMF,
- gravando uma chamada para o arquivo e
- ao analisar sua saída, você pode ver quando a chamada termina e sair do programa.
Você faria um loop assim:
#!/bin/bash
socket=/tmp/linphonec-$(id -u)
filename=$HOME/record
number=123456789
passfile=$HOME/1234.wav
linphonec --pipe 2>&1 |
while read -r line
do
echo $line
case $line in
*Ready )
sleep 1
echo ">>> initializing"
for command in "soundcard use files" "record $filename" "call $number"
do
echo -n $command | nc -q 5 -U $socket
done
;;
*Call\ *\ with\ *\ connected. )
sleep 1
echo ">>> sending pass"
echo -n "play $passfile" | nc -q 5 -U $socket
;;
*Call\ *\ ended. )
sleep 1
echo ">>> quitting"
while echo -n quit | nc -q 5 -U $socket 2&>-
do
i=$(expr $i + 1)
if test $i -ge 5
then
echo $(basename $0): could not shut down linphonec &>2
exit 1
fi
sleep 2
done
echo ">>> END"
exit
;;
esac
done
Isso ainda não está na solução ideal. Observe que, em >>> sending pass
, estou reproduzindo um arquivo wav em vez de enviar uma sequência DTMF. linphone
é capaz do último, mas durante a minha palpação superficial eu ainda não encontrei o caminho certo para fazê-lo enquanto a entrada e saída de som está na base de arquivo para permitir a gravação.
Infelizmente, a documentação do linphone é esparsa. Eu tive os melhores resultados apenas começando linphonec
interativamente e usando o builtin help
.