使用Bash AGI将呼叫文件设置为在一段时间后挂断

时间:2012-06-20 15:09:02

标签: bash asterisk agi

我正在尝试使用星号上的调用文件拨打电话,播放文件并在给定时间后挂断,无论声音文件是否已完成。

我使用这个bash脚本作为AGI脚本:

#!/bin/bash

Duration="30"
file="sound.mp3"

while read VAR && [ -n ${VAR} ] ; do : ; done
echo "ANSWER"
read RESPONSE

echo 'SET AUTOHANGUP $Duration'

echo 'EXEC PLAYBACK "'$file'" ""'
read RESPONSE

exit 0

问题是,星号cdr日志显示最后30秒的呼叫是否是另一端的人是否已挂断...

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

好的,这很令人尴尬......

我清理了我的代码,以便我可以将其粘贴在此处,当我再次尝试时,它似乎按照我想要的方式工作。仍然不知道当时的问题是什么,但这段代码似乎有效

#!/bin/bash

 Duration="20"
 file="soundfile"

while read VAR && [ -n ${VAR} ] ; do : ; done
echo "ANSWER"
read RESPONSE

echo 'SET AUTOHANGUP '$Duration''

echo 'EXEC PLAYBACK "'$file'" ""'
read RESPONSE

exit 0

答案 1 :(得分:0)

您可以使用信号设施。例如:

#!/bin/bash
times_up(){ echo "time is up, pens down."; exit 0; }
trap 'times_up' ALRM
(sleep 10;kill -0 $$ && kill -ALRM $$)&

s=0
while (true) do
    sleep 1
    echo "$s: do my stuff"
    let s=$s+1
done