当 C# 中的 TAPI 应答 phone 行时拨打组织号码的第二部分

Dial second part of an organization number when phone line is answered by TAPI in C#

我正在使用 C# 中的 TAPI 技术开发应用程序。

假设我想给一个有中央设备的组织打电话。我希望当目标机器应答 phone 行时,我的应用程序会拨打第二个号码,该号码是该组织的内部号码。我不知道怎么拨第二个号码

例如,我想拨打 +1234567890,当 phone 线路被接听时,我想拨打内部号码 101。我的应用程序拨号的第一部分完美,但我不知道如何编码第二部分。

numberList = "001234567890#101".Split('#');

tapiManager = new TapiManager(ProjectName);
tapiManager.Initialize();
lineName = (tapiManager != null && tapiManager.Lines.Length > 0 ? tapiManager.Lines[0].Name : string.Empty);
tapiline = tapiManager.GetLineByName(lineName, true);

if (tapiline == null)
     tapiline = tapiManager.GetLineByName(lineName, true);

if (!tapiline.IsOpen)
     tapiline.Open(MediaModes.DataModem);

makeCallParams = new MakeCallParams();
makeCallParams.DialPause = 2000;

tapiCall = tapiline.MakeCall(numberList[0], null, makeCallParams);

如您所见,我的代码的最后一行拨了第一个号码,但我找不到拨第二部分的方法。

关于我该怎么做的任何想法?

这在很大程度上取决于这个中央设备是什么以及它如何处理您的呼叫,因此我将举几个例子:

  • 较旧的(想想模拟)PBX/Appliance 可能会在接受呼叫后接受任何数字。这可以通过在您的号码中包含停顿(通常是“.”或“,”或 "p")来实现,因此“001234567890,101”(警告:并非所有 TAPI 驱动程序都支持此功能)。有多少暂停真的取决于这个中央设备接收的速度,太少它会削减一部分数字,太多它可能会挂断。
  • 专为此类设置配置的 IVR 或 PBX 中继应简单地接受原始呼叫中的完整号码,去掉根号码“001234567890”并自己拨“101”(去掉“#” ").
  • IVR/Voicemail 或其他播放消息的系统,如 "Which extension do you wish to call?" 通常只在消息开始或结束后接受数字(允许或不允许打断)。检测语音是出了名的困难,最好的办法就是猜测消息的长度,等待然后拨“101”。 (我不知道你正在使用的库,但该函数可能称为 GenerateDigits)