1

当用户拨打我的 pbx 时,他需要输入另一个电话号码。然后星号应该呼叫那个号码,当那个号码的所有者接听电话时,星号应该播放声音。

拨打我的 pbx 的用户,可以实时收听另一个呼叫,他会听到 pbx 播放的声音和用户的声音。

做这个的最好方式是什么?

4

2 回答 2

2

最好(也是最简单)的方法 - 让用户参加会议并为同一个会议创建另外 2 个呼叫。

一个播放声音,一个呼叫其他用户。

有关如何创建呼叫,请参见:

http://www.voip-info.org/wiki/view/Asterisk+auto-dial+out

Chanspy 将创建类似于会议的结构,但它更简单的控制(静音/取消静音)会议。

于 2013-06-24T18:10:43.120 回答
1

这是我的解决方案

*我用 AEL 写的,更容易理解

首先我假设你得到了你想要播放的被叫号码和文件:

context Start 
{
  catch s {
            Wait(1);
            ...
            __NumberToDial=<Number that caller picked>;
            FileName=<File you want to play>;
            ...
            // I used SHARED variables to pass all the necessary data to sub channel
            SHARED(FileName)=${FileName};
            __Channel="${CHANNEL(name)}";
            Dial(Local/${CALLERID(num)}@Originate/n,,g);
  }
}

context Originate {
        _X. => { 
            Originate(SIP/<YourDialOutTrunk>/${NumberToDial},exten,Play,${Channel},1);
            if (${ORIGINATE_STATUS}!=SUCCESS)
            {
               //do stuff if not connected...
            }
            else
                    ChanSpy(,qsSg(${Channel}));
         }
}

context Play {
        _X. => {
                Channel="${CUT(EXTEN,?,1)}";
                Set(SPYGROUP=${Channel});
                FileName=${SHARED(FileName,${Channel})};
                Playback(${FileName});
         }
}

*如果你想允许耳语/谈话,请添加w
选项到 ChanSpy 我没有测试这个耳语!
您需要在任何地方添加 catch => h 以及您需要的其余逻辑。
Whit this 你会得到很好的时机。如果呼叫者决定挂断,唯一的问题是杀死 Originate 频道,我已经在 AMI 上发送频道 kill 并使用 AGI 脚本发送频道名称...... bla bla ... :)

希望能帮助到你 :)

于 2013-06-25T09:35:00.280 回答