CallerID检测:不适用于某些电话

本文关键字:电话 适用于 不适用 检测 CallerID | 更新日期: 2023-09-27 17:54:48

当有人呼叫时,我使用以下方法检测来电显示。

在表单加载时,我设置了以下代码:

this.serialPort1.PortName = "COM3"; 
this.serialPort1.BaudRate = 9600;
this.serialPort1.DataBits = 8;
this.serialPort1.RtsEnable = true;
this.serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
this.serialPort1.Open();
this.serialPort1.WriteLine("AT#cid=1" + System.Environment.NewLine);
void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            richTextBox1.Text += this.serialPort1.ReadLine();
            //richTextBox1.Text += this.serialPort1.ReadExisting();
            //richTextBox1.Text += this.serialPort1.ReadByte().ToString();
        }

的命令
this.serialPort1.WriteLine("AT#cid=1" + System.Environment.NewLine);

给出了输出

OK

确保调制解调器支持来电显示并正常工作。

我在我们国家(印度)尝试了一些私人电话线,它给出的预期输出如下:

RING               //On 1st Ring
DATE = xxxxx       //On 2nd Ring
TIME = xxxx
NMBR = xxxxxxxxx
RING               //On 3rd Ring    
RING               //On 4th Ring

但是当我用政府电话(印度的BSNL公司)时,它没有给出日期、时间和NMBR部分。它给出如下输出:

RING               //On 1st Ring    
RING               //On 3rd Ring        
RING               //On 4th Ring

请注意,二环期间没有显示任何内容。

重要提示:

  • 政府电话确实支持来电显示,因为当电话线连接到电话仪器时,号码确实显示出来。
  • 以上代码已成功地与许多其他私人公司的固定电话一起工作。

——你知道为什么我不能从BSNL电话得到号码,尽管它们显示在电话来电显示屏幕上吗?

编辑:我通过以下初始化命令来设置调制解调器为DTMF接收模式。

AT#CID=1  //Enable Caller ID (Verbose)
AT#VLS=0  //Voice Source--Telephone Line (Go on hook)
AT#VTD=3F,3F,3F  //Enable DTMF Transmit, Receive and Voice Online 
AT#CLS=8  //Sets Modem to Voice Mode

提前感谢。

CallerID检测:不适用于某些电话

如果您使用通用调制解调器,不幸的是不能保证它将在所有国家的所有情况下工作;例如,美国使用FSK信号来传递CID,而印度似乎使用DTMF信号。

很可能是BSNL使用调制解调器不支持的信令类型(如果是CID没有被传递的情况,您仍然希望看到一个空的NMBR=)

我会用你知道的支持DTMF信令的调制解调器进行测试。

此外,如果政府电话在PBX后面的办公室,那么这可能会扰乱CID的发送方式。