Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Delphi и WinAPI

Войти
Регистрация
Восстановить пароль
 
maestrostr88
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 6
#1

Delphi + АТС Panasonic NS500 + RanCom - Delphi WinAPI

26.01.2016, 14:59. Просмотров 811. Ответов 11
Метки нет (Все метки)

Добрый день уважаемые.
Задался вопросом интеграции АТС и программы своей. Пока реализовал на основе communication assistant. Из возможностей только получения номера звонящего, этого мало.
Нашел стороннюю программу Rander, в его состав входит RanCOM, но я ни как не могу его осилить.
Есть примеры на С#, помогите пожалуйста их перевести на Delphi
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using RanderComLib;
 
namespace RanComDemo
{
   public partial class Form1 : Form
   {
      RanCom ranCom = new RanCom();
      public Form1()
      {
         ranCom.NewCall2 += new _IRanComEvents_NewCall2EventHandler(ranCom_NewCall2);
         ranCom.CallInfoChanged += new _IRanComEvents_CallInfoChangedEventHandler(ranCom_CallInfoChanged);
         ranCom.CallStateChanged += new _IRanComEvents_CallStateChangedEventHandler(ranCom_CallStateChanged);
         InitializeComponent();         
      }
 
      private void buttonOpen_Click(object sender, EventArgs e)
      {
         try
         {
            ranCom.OpenLine(textBoxLine.Text);
         }
         catch
         {
            MessageBox.Show("Failed to open line");
         }
      }
 
      private void buttonConnect_Click(object sender, EventArgs e)
      {
          ranCom.Connect(textBoxServer.Text, "", "");
      }
 
      void ranCom_CallStateChanged(int call_id, CallState call_state)
      {
         listBoxMessages.Items.Add("Call " + call_id + " state changed to "+call_state);
      }
 
      void ranCom_CallInfoChanged(int call_id)
      {
         listBoxMessages.Items.Add("Call " + call_id + " info changed");
      }
 
      void ranCom_NewCall2(int line_id, int call_id)
      {
         listBoxMessages.Items.Add("New call "+call_id+" on line "+line_id);
      }
   }
}
так же есть примеры на php, C, VBA.
Сам RanCOM и примеры https://yadi.sk/d/sMuCBJIonky4V

Пишу на Delphi 7
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2016, 14:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Delphi + АТС Panasonic NS500 + RanCom (Delphi WinAPI):

На междугородной АТС - Delphi
5.На междугородной АТС информация о разговорах содержит дату разговора, код и название города, время разговора, тариф, номер телефона в...

Panasonic kx ns500 как определить IP адрес - Телефония
Добрый день Установили нам panasonic kx ns500 пару месяцев назад , сейчас потребовалось изменить чуток настройки трубки в очереди местами...

Panasonic KX-NS500 распределение внешних вызовов - Телефония
Имеется NS500, подключены 4 CO-линии. Каким образом для определенного COS указать приоритет выбора исходящей линии? Например, по умолчанию...

Настройка АТС Panasonic KX-TEM824 - Телефония
Доброго времени суток, товарищи! Сам я зелёный дилетант в этом всём, поэтому описываю всё своими словами. Имеется АТС типа...

Выбор Астериск или готовая АТС Panasonic - Телефония
Доброго времени суток! Стою перед выбором - брать готовую железку, или с нуля ставить астериск на тачку+плата дигиум TDM404B . в...

Тихий звонок, Перехват на атс panasonic d1232 - Телефония
Добрый день уважаемые форумчане !!! Сам телефонией не занимаюсь , однако возникла неприятная ситуация ... Прошу помощи у знающих. ...

11
fidel42rus
24 / 24 / 7
Регистрация: 24.10.2015
Сообщений: 392
26.01.2016, 15:15 #2
Больше информации надо, как она подключена, что отдаёт, есть ли веб интерфейс, и т.д. что ты хочешь видеть? Если номера мало, что от программы нужно? Давай всю инфу будем думать
0
maestrostr88
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 6
26.01.2016, 17:05  [ТС] #3
У Rander-a есть серверная часть, которая подключается к АТС Panasonic. RanCOM работает с сервером Rander.
Мне в Delphi надо получить номер звонящего, возможность взять трубку и положить трубку.
0
fidel42rus
24 / 24 / 7
Регистрация: 24.10.2015
Сообщений: 392
26.01.2016, 17:50 #4
maestrostr88, "Render" значит знает какие-то библиотеки для этой атски, у нас с тобой их нет. Думаю без
"using RanderComLib; у нас ничего не выйдет
0
maestrostr88
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 6
26.01.2016, 18:04  [ТС] #5
Я понимаю что используется using RanderComLib, но не понимаю откуда его берет C#.
Вот пример работы RanCOM на PHP
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// starting word
$rancom = new COM("RanderCom.RanCom.1") or die("Unable to instantiate RanCOM");
echo "RanCOM loaded...<br>";
 
$rancom->ConnectUnsec("rander.ranat.ru", "","", "109");
echo "RanCOM connected...<br>";
 
$rancom->Dial("115");
echo "RanCOM dialed extension...<br>";
 
$rancom->Disconnect();
echo "RanCOM disconnected...";
 
?>
я как понял к RanCOM надо подключаться как к COM порту, только не знаю как это реализовать в Delphi
0
fidel42rus
24 / 24 / 7
Регистрация: 24.10.2015
Сообщений: 392
26.01.2016, 18:41 #6
библиотека берется у производителя panasonic. Она интегрируется ПО, ты ведь сам ее на стадии разработки подключаешь
0
cotseec
Пишу на Delphi...иногда
1399 / 1259 / 174
Регистрация: 03.12.2012
Сообщений: 3,912
Записей в блоге: 5
Завершенные тесты: 3
26.01.2016, 19:21 #7
Цитата Сообщение от maestrostr88 Посмотреть сообщение
Сам RanCOM и примеры https://yadi.sk/d/sMuCBJIonky4V
Пишу на Delphi 7
в папке с примерами (конкретно в RanCom\examples\c\RanComTest(cpp).rar\RanComTest(cpp)\RanComTest\) имеется библиотека типов (файл RanCom.tlb) из нее очень замечательно вытаскивается модуль с описанием типов
часть unit RanderComLib_TLB
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
unit RanderComLib_TLB;
 
// ************************************************************************ //
// WARNING                                                                    
// -------                                                                    
// The types declared in this file were generated from data read from a       
// Type Library. If this type library is explicitly or indirectly (via        
// another type library referring to this type library) re-imported, or the   
// 'Refresh' command of the Type Library Editor activated while editing the   
// Type Library, the contents of this file will be regenerated and all        
// manual modifications will be lost.                                         
// ************************************************************************ //
 
// PASTLWTR : 1.2
// File generated on 2016-01-26 19:11:58 from Type Library described below.
 
// ************************************************************************  //
// 
// LIBID: {7469A0E3-66B4-4981-9AF4-7BE4B4C1A73F}
// LCID: 0
// Helpfile: 
// HelpString: RanCom 1.0 Type Library
// DepndLst: 
//   (1) v2.0 stdole, (C:\Windows\system32\stdole2.tlb)
// Errors:
//   Error creating palette bitmap of (TRanCom) : No Server registered for this CoClass
// ************************************************************************ //
// *************************************************************************//
// NOTE:                                                                      
// Items guarded by $IFDEF_LIVE_SERVER_AT_DESIGN_TIME are used by properties  
// which return objects that may need to be explicitly created via a function 
// call prior to any access via the property. These items have been disabled  
// in order to prevent accidental use from within the object inspector. You   
// may enable them by defining LIVE_SERVER_AT_DESIGN_TIME or by selectively   
// removing them from the $IFDEF blocks. However, such items must still be    
// programmatically created via a method of the appropriate CoClass before    
// they can be used.                                                          
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. 
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface
 
uses Windows, ActiveX, Classes, Graphics, OleServer, StdVCL, Variants;
  
 
const
  // TypeLibrary Major and minor versions
  RanderComLibMajorVersion = 1;
  RanderComLibMinorVersion = 0;
 
  LIBID_RanderComLib: TGUID = '{7469A0E3-66B4-4981-9AF4-7BE4B4C1A73F}';
 
  DIID__IRanComEvents: TGUID = '{EB1FE0B9-4CCD-48FA-87C9-2819354EB3C2}';
  IID_IRanCom: TGUID = '{976F744A-3962-46D7-BB17-46D8D4CCCB86}';
  CLASS_RanCom: TGUID = '{597FC297-FD13-4A86-9BD2-C43B97586738}';
type
  __MIDL___MIDL_itf_RanCom_0000_0001 = TOleEnum;
const
  state_idle = $00000000;
  state_connected = $00000001;
  state_ringing = $00000002;
  state_dialing = $00000003;
  state_busy = $00000004;
  state_hold = $00000005;
 
type
  RanCom = IRanCom;
 
  tagCallInfo = packed record
    Phone: WideString;
    CallerId: WideString;
    CalledId: WideString;
    ConnectedId: WideString;
    IsInternal: WordBool;
    IsIncoming: WordBool;
    CO: Integer;
  end;
 
  CallInfo = tagCallInfo; 
 
  tagDialPlan = packed record
    CoAccess: WideString;
    GroupAccess: WideString;
    LocalPlan: Integer;
    NationalCode: WideString;
    ZoneNumbers: WordBool;
  end;
 
  DialPlan = tagDialPlan; 
  CallState = __MIDL___MIDL_itf_RanCom_0000_0001; 
 
// *********************************************************************//
// DispIntf:  _IRanComEvents
// Flags:     (4096) Dispatchable
// GUID:      {EB1FE0B9-4CCD-48FA-87C9-2819354EB3C2}
// *********************************************************************//
  _IRanComEvents = dispinterface
    ['{EB1FE0B9-4CCD-48FA-87C9-2819354EB3C2}']
    procedure NewCall(call_id: Integer); dispid 1;
    procedure CallInfoChanged(call_id: Integer); dispid 2;
    procedure CallStateChanged(call_id: Integer; call_state: CallState); dispid 3;
    procedure PbxConnectionStatusChanged(status: WordBool); dispid 4;
    procedure ServerConnectionStatusChanged(status: WordBool); dispid 5;
  end;
 
// *********************************************************************//
// Interface: IRanCom
// Flags:     (4544) Dual NonExtensible OleAutomation Dispatchable
// GUID:      {976F744A-3962-46D7-BB17-46D8D4CCCB86}
// *********************************************************************//
  IRanCom = interface(IDispatch)
    ['{976F744A-3962-46D7-BB17-46D8D4CCCB86}']
    procedure ConnectUnsec(const server: WideString; const username: WideString; 
                           const password: WideString; const my_line_name: WideString); safecall;
    procedure Dial(const number: WideString); safecall;
    procedure Connect(const server: WideString; const username: WideString; 
                      const password_hash: WideString; const my_line_name: WideString); safecall;
    function GetCallInfo(call_id: Integer): CallInfo; safecall;
    procedure Disconnect; safecall;
    procedure Drop(call_id: Integer); safecall;
    function IsConnectedToServer: WordBool; safecall;
    function IsConnectedToPbx: WordBool; safecall;
    function GetNewCalls: OleVariant; safecall;
    function GetDialPlan: DialPlan; safecall;
    function ToDialable(const phone_in: WideString): WideString; safecall;
    procedure Answer(call_id: Integer); safecall;
    procedure Hold(call_id: Integer); safecall;
    procedure Unhold(call_id: Integer); safecall;
    procedure Transfer(call_id: Integer; const Phone: WideString); safecall;
  end;
 
// *********************************************************************//
// DispIntf:  IRanComDisp
// Flags:     (4544) Dual NonExtensible OleAutomation Dispatchable
// GUID:      {976F744A-3962-46D7-BB17-46D8D4CCCB86}
// *********************************************************************//
  IRanComDisp = dispinterface
    ['{976F744A-3962-46D7-BB17-46D8D4CCCB86}']
    procedure ConnectUnsec(const server: WideString; const username: WideString; 
                           const password: WideString; const my_line_name: WideString); dispid 1;
    procedure Dial(const number: WideString); dispid 2;
    procedure Connect(const server: WideString; const username: WideString; 
                      const password_hash: WideString; const my_line_name: WideString); dispid 3;
    function GetCallInfo(call_id: Integer): {??CallInfo}OleVariant; dispid 4;
    procedure Disconnect; dispid 5;
    procedure Drop(call_id: Integer); dispid 6;
    function IsConnectedToServer: WordBool; dispid 7;
    function IsConnectedToPbx: WordBool; dispid 8;
    function GetNewCalls: OleVariant; dispid 9;
    function GetDialPlan: {??DialPlan}OleVariant; dispid 10;
    function ToDialable(const phone_in: WideString): WideString; dispid 11;
    procedure Answer(call_id: Integer); dispid 12;
    procedure Hold(call_id: Integer); dispid 13;
    procedure Unhold(call_id: Integer); dispid 14;
    procedure Transfer(call_id: Integer; const Phone: WideString); dispid 15;
  end;
 
  CoRanCom = class
    class function Create: IRanCom;
    class function CreateRemote(const MachineName: string): IRanCom;
  end;
 
  TRanComNewCall = procedure(ASender: TObject; call_id: Integer) of object;
  TRanComCallInfoChanged = procedure(ASender: TObject; call_id: Integer) of object;
  TRanComCallStateChanged = procedure(ASender: TObject; call_id: Integer; call_state: CallState) of object;
  TRanComPbxConnectionStatusChanged = procedure(ASender: TObject; status: WordBool) of object;
  TRanComServerConnectionStatusChanged = procedure(ASender: TObject; status: WordBool) of object;
 
 
// *********************************************************************//
// OLE Server Proxy class declaration
// Server Object    : TRanCom
// Help String      : RanCom Class
// Default Interface: IRanCom
// Def. Intf. DISP? : No
// Event   Interface: _IRanComEvents
// TypeFlags        : (2) CanCreate
// *********************************************************************//
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  TRanComProperties= class;
{$ENDIF}
  TRanCom = class(TOleServer)
  private
    FOnNewCall: TRanComNewCall;
    FOnCallInfoChanged: TRanComCallInfoChanged;
    FOnCallStateChanged: TRanComCallStateChanged;
    FOnPbxConnectionStatusChanged: TRanComPbxConnectionStatusChanged;
    FOnServerConnectionStatusChanged: TRanComServerConnectionStatusChanged;
    FIntf:        IRanCom;
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
    FProps:       TRanComProperties;
    function      GetServerProperties: TRanComProperties;
{$ENDIF}
    function      GetDefaultInterface: IRanCom;
  protected
    procedure InitServerData; override;
    procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
    procedure Connect; override;
    procedure ConnectTo(svrIntf: IRanCom);
    procedure Disconnect; override;
    procedure ConnectUnsec(const server: WideString; const username: WideString; 
                           const password: WideString; const my_line_name: WideString);
    procedure Dial(const number: WideString);
    procedure Connect1(const server: WideString; const username: WideString; 
                       const password_hash: WideString; const my_line_name: WideString);
    function GetCallInfo(call_id: Integer): CallInfo;
    procedure Disconnect1;
    procedure Drop(call_id: Integer);
    function IsConnectedToServer: WordBool;
    function IsConnectedToPbx: WordBool;
    function GetNewCalls: OleVariant;
    function GetDialPlan: DialPlan;
    function ToDialable(const phone_in: WideString): WideString;
    procedure Answer(call_id: Integer);
    procedure Hold(call_id: Integer);
    procedure Unhold(call_id: Integer);
    procedure Transfer(call_id: Integer; const Phone: WideString);
    property DefaultInterface: IRanCom read GetDefaultInterface;
  published
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
    property Server: TRanComProperties read GetServerProperties;
{$ENDIF}
    property OnNewCall: TRanComNewCall read FOnNewCall write FOnNewCall;
    property OnCallInfoChanged: TRanComCallInfoChanged read FOnCallInfoChanged write FOnCallInfoChanged;
    property OnCallStateChanged: TRanComCallStateChanged read FOnCallStateChanged write FOnCallStateChanged;
    property OnPbxConnectionStatusChanged: TRanComPbxConnectionStatusChanged read FOnPbxConnectionStatusChanged write FOnPbxConnectionStatusChanged;
    property OnServerConnectionStatusChanged: TRanComServerConnectionStatusChanged read FOnServerConnectionStatusChanged write FOnServerConnectionStatusChanged;
  end;
 
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
 TRanComProperties = class(TPersistent)
  private
    FServer:    TRanCom;
    function    GetDefaultInterface: IRanCom;
    constructor Create(AServer: TRanCom);
  protected
  public
    property DefaultInterface: IRanCom read GetDefaultInterface;
  published
  end;
{$ENDIF}
который затем можно использовать
1
maestrostr88
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 6
27.01.2016, 07:56  [ТС] #8
cotseec, черт ты даже не представляешь как я тебе благодарен. Ты открыл мне глаза. Получилось реализовать и прием звонка и разрыв звонка и номер телефона звонящего получить.
0
dim-76
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 10
08.10.2016, 23:40 #9
maestrostr88,
не поможешь, требуется получать номер телефона от ранком, у тебя получилось?
0
maestrostr88
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 6
09.10.2016, 17:22  [ТС] #10
Да у меня получилось. буду рад помочь, в чем у тебя загвоздка?
0
dim-76
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 10
09.10.2016, 19:30 #11
я пока еще в живую не пробовал, но вроде разобрался
в дельфи сделал Import Component -> Import a type Library выбрал RanCom, у меня сформировался компонент RanCom вот его и использую
а не пробовал на прямую без RanCom по ATAPI подключаться? я через smdr подключался, но там только после окончания звонка информация приходит, а хотелось бы как RanCom (но без денег )
0
maestrostr88
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 6
10.10.2016, 08:15  [ТС] #12
Я в начале все это пытался организовать через Communication Assistant. У программы есть в опциях CRM-интеграция. Работало всё это не очень. Так как информацию о номере телефоне и состояние (Входящий звонок, взята трубка или звонок завершен) он пишет в файл .CSV bkb .XML и приходилось в делфи отслеживать изменения файла и считывать из него информацию. Пробовал ATAPI но мозгов не хватило что бы добить этот вопрос до конца. RanCom самый легкий способ наверное из того что платный)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2016, 08:15
Привет! Вот еще темы с ответами:

Определить, в каком доме необходимо установить АТС, чтобы суммарное расстояние от АТС к телефонным аппаратам было минимальное - Алгоритмы
Здравствуйте!!! Есть вопрос по составлению алгоритма. Вот собственно задача: В деревне N домов, расположенных вдоль дороги с одной...

Разводка кабелей на kx-ns500 - Телефония
Купили АТС kx-ns500. Попросили найти разводку кабелей на АТС kx-ns500. Входящие-исходящие разводки пожалуйста помогите :wall: ЕСли...

АТС - SQL Server
Здравствуйте, нужна помощь в написании запроса (3). Задание: Телефонная станция Минимальный список характеристик:  Номер...

IP-АТС - Телефония
Уважаемые форумчане! Возникла необходимость поставить в конторе IP-АТС. Как это сделать, каким образом она работает, и вообще, что нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
10.10.2016, 08:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru