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
-coption. 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