Как сделать идентификатор вызывающего абонента в С#.net


Я знаю, что на этот вопрос дан ответ, однако я хочу знать, какое оборудование требуется и как его настроить.

Я пытаюсь создать систему доставки на вынос, в которой пользователи звонят, и их номер телефона фиксируется в WINFORM.

Я погуглил, и он говорит, что мне нужно использовать TAPI API. Это хорошо, но нужно ли мне что-либо подключать к ПК или будет работать только использование TAPI?

Эта ссылка объясняет это в VB.net. Я ищу его в С#.net. Я также просмотрел предоставленные ссылки здесь.

Но нигде не объясняется установка. Пожалуйста, помогите.


person mark    schedule 07.10.2015    source источник
comment
Взгляните на эту статью: Разработка приложений TAPI 3.0 с использованием С# .NET   -  person Tim    schedule 07.10.2015
comment
Код здесь кажется немного более актуальным, каким бы ни был мой первый проблема в настройке оборудования.   -  person mark    schedule 07.10.2015
comment
en.wikipedia.org/wiki/ см. раздел "Оборудование"   -  person Abdul Rehman Sayed    schedule 22.12.2015
comment
Вы пытались задать вопрос на serverfault.com?   -  person Marc L.    schedule 22.12.2015
comment
@AbdulRehmanSayed Не могли бы вы предложить дешевый и лучший вариант? Поскольку нет необходимости в обширном приложении телефонии только для того, чтобы получить номер телефона.   -  person mark    schedule 22.12.2015
comment
@МаркЛ. Я не уверен, связана ли его сеть. пожалуйста, порекомендуйте   -  person mark    schedule 22.12.2015
comment
@МаркЛ. Отказ сервера не отвечает на вопросы по программированию.   -  person Michael Hampton    schedule 23.12.2015
comment
@MichaelHampton Да, но, несмотря на заголовок, текст вопроса и комментария ясно дает понять, что ресурсов TAPI предостаточно, а OP нужна более конкретная информация о настройке оборудования. В качестве альтернативы, если он не относится к сбою сервера, его следует все равно закрыть как не относящийся к теме/слишком широкий.   -  person Marc L.    schedule 23.12.2015
comment
Прежде всего ... просто посмотрите, поддерживает ли это ваше оборудование (затем откройте программу терминала последовательного порта .. шпатлевка) и позвоните по номеру телефона, подключенному к модему, и посмотрите, что произойдет, вы должны увидеть что-то вроде ATA 5555555555.   -  person Someone that matters    schedule 23.12.2015


Ответы (2)


Первым делом

  • Посмотрите, поддерживает ли ваше оборудование определитель номера
  • Добавьте управление последовательным портом, установите его на любой коммуникационный порт, на котором находится ваш модем, и следите за номером CALLER ID, а затем реагируйте

Чтобы узнать, поддерживает ли ваш модем идентификатор вызывающего абонента, откройте терминал последовательного порта (мне нравится замазка) и установите его на COM-порт вашего модема, затем позвоните по номеру телефона, подключенному к этому модему, вы должны увидеть что-то вроде RING 5555555555 (где 5555555555 номер телефона человека, который вам звонит)

Возможно, вам придется включить определитель номера для этого модема (если это так)

1) Откройте панель управления «Параметры телефона и модема».

2) Перейдите на вкладку "Модемы"

3) Выберите свой модем в списке (если он еще не выбран)

4) Нажмите кнопку "Свойства"

5) Перейдите на вкладку «Дополнительно».

6) Введите «#CID=1» в поле «Дополнительные команды инициализации». Примечание: замените «#CID=1» на команду, чтобы включить идентификатор вызывающего абонента на вашем модеме. Не включайте часть «AT» в команду. включить кавычки 7) Нажмите OK

8) Нажмите ОК

9) перезагрузить компьютер

Вот некоторый код для взаимодействия с последовательным портом в С# (если вам это нужно)

public SerialPort sp;
string dataReceived = string.Empty;
private delegate void SetTextDeleg(string text);

private void FormLoad()
{
 sp = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
 this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
 sp.Open();
}

void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
 try
 {
      Thread.Sleep(500);
       string x = sp.ReadLine(); // will read to the first carriage return
       this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { x });
  }
  catch
  { }
}  

private void si_DataReceived(string data)
{
  dataReceived = data.Trim();

  // Do whatever with the data that is coming in.
}

Кроме того, я только что искал на Amazon «Модем для идентификации вызывающего абонента», и, кажется, есть много от 10 до 20 долларов (США), которые поддерживают именно это использование. Я бы рекомендовал Trendnet TFM-561U

person Someone that matters    schedule 23.12.2015
comment
Я следовал инструкциям на шаге 3, модема не было, поэтому я настроил его вручную. Также на шаге 6 окно «Дополнительные команды инициализации» не было включено, поэтому я нажал «Общие» и перешел к «Изменить настройки», а затем заранее запустил #CID=1. После перезагрузки ПК и следования коду, но ничего не произошло. Нужен ли мне этот модем Caller ID. Эти настройки находятся на ПК для разработки, на стороне клиента я не вижу COMM-порт для установки модема, так что мне не хватает - person mark; 24.12.2015
comment
У вас есть физический модем, установленный на этом компьютере? Вам нужно устройство, которое подключается к телефонным линиям, чтобы все это работало. - person Someone that matters; 24.12.2015
comment
Я так не думаю, будет ли Trendnet TFM-561U работать с тем, чего мы пытаемся достичь? и я предполагаю, что мне тоже нужен разветвитель для телефона? - person mark; 24.12.2015
comment
Trendnet будет работать, и вы можете использовать разветвитель (что может быть проще) или подключить его к другому телефонному разъему. (Убедитесь, что вы подключаете телефонную линию к аналоговой телефонной линии телефонной компании, а не к телефонной системе) - person Someone that matters; 24.12.2015
comment
Привет, извините за поздний ответ, только что купил это устройство Trendnet и сделал, как вы упомянули, однако я просто получаю RING при каждом входящем звонке. - person mark; 07.01.2016
comment
У них есть определитель номера? (от телефонной компании) - person Someone that matters; 07.01.2016
comment
У клиента есть стационарный телефон и на нем работает определитель номера. Также отправьте ту же проблему в Trendnet, и они ответят Обратите внимание, что Windows 8 не поддерживается, а модем не имеет идентификатора вызывающего абонента в качестве функции. - person mark; 08.01.2016
comment
Привет, я заменил устройство на TFM-561u, ранее было 560U, однако не могли бы вы указать, где я могу найти драйверы для Win 8.1 - person mark; 16.01.2016

Если вы используете модем для телефона и факса, просто подключите телефонную линию к модему.

Затем в ваших окнах перетащите элемент управления SerialPort и инициализируйте его.

    this.serialPort1.PortName = "COM3"; 
    this.serialPort1.BaudRate = 9600;
    this.serialPort1.DataBits = 8;
    this.serialPort1.RtsEnable = true;
    this.serialPort1.DataReceived += serialPort1_DataReceived;
    this.serialPort1.Open();      

Передайте модему следующую команду, чтобы активировать Caller-ID

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

Обработать его событие DataReceived и отобразить полученные данные

     void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
     {
          richTextBox1.Text += this.serialPort1.ReadLine();          
     }

Вывод:

RING               //On 1st Ring
DATE = xxxxx       //On 2nd Ring
TIME = xxxx
NMBR = xxxxxxxxx

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

P.S. Если телефонная линия отправляет тональные сигналы DTMF в качестве идентификатора вызывающего абонента, вам потребуется преобразователь DTMF в FSK для определения номера, иначе вы получите звонки, но не номер.

person Marshal    schedule 23.12.2015
comment
Можете ли вы просто использовать модем как последовательный порт? Только что написал программу, которая использует последовательные порты, поэтому в последнее время я довольно много узнал о них. Я не знал, что модем работает как один. Каждый день чему-то учишься... лол. - person ProgrammingDude; 24.12.2015
comment
Да, ты можешь. Там же виртуальный ком порт создан для связи с модемом. Последовательный порт может взаимодействовать с реальными последовательными портами и виртуальными COM-портами. - person Marshal; 24.12.2015
comment
@ProgrammingDude извините за наивность, но где я пишу this.serialPort1.WriteLine("AT#cid=1" + System.Environment.NewLine); я имею в виду событие - person mark; 24.12.2015
comment
@mark вам нужно написать это сразу после открытия последовательного порта. - person Marshal; 24.12.2015
comment
И вам не нужно делать это вручную, как описано в ответе выше. Таким образом, вам не нужно беспокоиться о сбросе идентификатора модема и т. д. - person Marshal; 24.12.2015
comment
правильно @Marshal насчет аппаратного обеспечения, будет ли достаточно модема для идентификации вызывающего абонента, как объяснялось выше? Также о подключении Мне нужно разделить телефонную линию на 2, из которых 1 идет на телефон, другая на модем определителя номера? - person mark; 24.12.2015
comment
отлично, я закажу оборудование, позвольте мне проверить все, если возникнут какие-либо проблемы, дам вам знать, большое спасибо @Marshal - person mark; 24.12.2015
comment
Сначала проверьте с помощью обычного разветвителя. Если вы получаете сообщения RING, но не получаете информацию о номере, вам также необходимо получить конвертер DTMF в FSK. Всего наилучшего в вашем приключении - person Marshal; 24.12.2015
comment
Привет, @Marshal, это было давно, но по той же проблеме пришлось приобрести новый USB-факс-модем HiRO H50113, у них есть телефонный лоток, и это получает номер, но мое приложение просто < я>Кольцо . Любая идея, что не так - person mark; 03.02.2016
comment
Можете ли вы уточнить .. это получает номер. Где вы его берете, в текстовом поле? - person Marshal; 03.02.2016