Командная строка Linux:
linphone
включает в себя linphonec
командной строки linphonec с поддержкой сценариев . Запуск linphonec
с параметром --pipe
создаст сокет в /tmp
который можно писать и читать.
Он отвечает всем вашим требованиям, и я успешно проверил (для собственных нужд) все из них:
- Звонить через SIP,
- передача DTMF-последовательностей,
- запись вызова в файл, и
- анализируя его вывод, вы можете увидеть, когда вызов завершится и выйдет из программы.
Вы бы сделали цикл следующим образом:
#!/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
Это еще не оптимальное решение. Обратите внимание, что в разделе >>> sending pass
я воспроизводю wav-файл вместо отправки последовательности DTMF. linphone
способен на это, но во время беглого манипулирования я еще не нашел правильный способ сделать это, пока вход и выход звука ведутся на файловой основе, чтобы позволить запись.
К сожалению, документация по linphone редкая. Я добился лучших результатов, просто запустив linphonec
интерактивном режиме и используя встроенную help
.