Linux command line:
linphone
includes a scriptable linphonec
command-line version. Starting linphonec
with the --pipe
option will create a socket in /tmp
that one can write to and read from.
It fulfills all your requirements and I've tested (for my own uses) all of them successfully:
- Calling via SIP,
- transmitting DTMF sequences,
- recording a call to file, and
- via parsing its output, you can see when the call finishes and quit the program.
You'd do a loop like this:
#!/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
This is not yet on optimal solution. Note that under >>> sending pass
, I'm playing a wav file instead of sending a DTMF sequence. linphone
is capable of the latter, but during my cursory fiddling I haven't yet found the right way to do so while sound in- and output is on file basis to allow recording.
Sadly, linphone documentation is sparse. I've had best results just starting linphonec
interactively and using the builtin help
.
The credentials can be put inside the configured file specified with the
-c
option. The number to call can be specified with-s
. – Old Geezer – 2019-09-02T14:19:06.290@peth In
while echo -n quit | nc -q 5 -U $socket 2&>-
, what condition evaluates to true/false? Also, what does2&>-
mean? For me, the expression evaluates to false but linphonec remains running. It's a pity the there is no option for linphonec to exit after a call hangs up. – Old Geezer – 2019-09-02T14:37:52.260sounds really great. Could you give me some hint about the "via parsing its output, you can see when the call finishes and quit the program." I cannot grasp what it could mean. The rest be in readme or online help I guess. – Radek – 2011-04-20T02:47:45.743