-
Notifications
You must be signed in to change notification settings - Fork 35
/
УправлениеТелефониейКлиент.txt
440 lines (332 loc) · 31 KB
/
УправлениеТелефониейКлиент.txt
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
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
//Внутренние функции телефонии
Процедура ВыполнитьКоманду(СтрокаКоманды) Экспорт;
#Если ВебКлиент Тогда
Возврат Ложь;
#КонецЕсли
ПС = Символы.ВК + Символы.ПС;
ПослеВызоваМетодаВыполнитьКоманду = Новый ОписаниеОповещения("ОповещениеОВызовеМетода",УправлениеТелефониейКлиент,"InnovaIT-Asterisk-Native-ВыполнитьКоманду");
Если Найти(СтрокаКоманды,ПС+ПС)=0 Тогда
Сообщить("ВыполнитьКоманду: Неверный формат команды: "+ПС+СтрокаКоманды);
Возврат;
КонецЕсли;
ГлТелефония.НачатьВызовВыполнитьКоманду(ПослеВызоваМетодаВыполнитьКоманду,СтрокаКоманды);
КонецПроцедуры
// Action: Events - Посылает команду Events
// EventMask: маска типов событий, может принимать следующие значения:
// 'on' – включает отправку всех событий.
// 'off' – выключает отправку всех событий.
// 'system,call,log' – перечисление типов событий, которые будут отправляться в текущее соединение.
// ActionID - В него приетает ID команды и результат выполнения. (Это уже во ВнешнееСобытие)
Функция Event(СтрокаФильтр="on", ИД="") Экспорт;
ПС = Символы.ВК + Символы.ПС;
ТекстКоманды="Action: Events"+ПС+
"EventMask: "+СтрокаФильтр+ПС;
Если НЕ ПустаяСтрока(ИД) Тогда
ТекстКоманды = ТекстКоманды + "ActionID: "+ИД+ПС;
КонецЕсли;
ТекстКоманды = ТекстКоманды + ПС;
ВыполнитьКоманду(ТекстКоманды);
КонецФункции
//Action: login - Посылает команду Login
//Username: user
//Secret: pass
Функция Login(Логин,Пароль) Экспорт
Если ПустаяСтрока(Логин) Тогда
Сообщить("Login(). Не указан параметр <Логин>");
Возврат Ложь;
КонецЕсли;
Если ПустаяСтрока(Пароль) Тогда
Сообщить("Login(). Не указан параметр <Пароль>");
Возврат Ложь;
КонецЕсли;
ПС = Символы.ВК + Символы.ПС;
СтрокаКоманды= "Action: Login"+ПС+
"Username: "+Логин+ПС+
"Secret: "+Пароль+ПС+ПС;
ВыполнитьКоманду(СтрокаКоманды);
КонецФункции
//Action: Logoff - Посылает команду Logoff
//Отключает текущую сессию
Функция Logoff() Экспорт
ПС = Символы.ВК + Символы.ПС;
ТекстКоманды = "Action: Logoff"+ПС+ПС;
ВыполнитьКоманду(ТекстКоманды);
КонецФункции
// Источник(Channel)** : Название канала, с которого совершается исходящий вызов (В том же формате, как если бы Вы совершали вызов этому абоненту командой Dial.)
// Приемник(Exten)** : Extension to use on connect (используется только совместно с параметрами Context и Priority)
// Контекст(Context) : Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority)
// Таймаут(Timeout) : Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию: 30000 миллисекунд).
// Приоритет(Priority) : Priority to use on connect (используется только совместно с параметрами Context и Exten)
// ЦИД(CallerID) : Значение CallerID, используемое для совершения исходящего вызова.
// СтрокаПеременных(Variable) : Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов, участвующих в соединении (локального, для абонента от которого совершается вызов и для вызываемого канала).
// КодДоступа(Account) : Значение для “Account code” исходящего вызова.
// КомандаНабора(Application) : Команда плана набора, используемая для совершения исходящего вызова (используется параметр “Data”, для указания ее параметров)
// ДанныеНабора(Data) : Параметры команды плана набора, используемой для совершения исходящего вызова.
// ФлагАсинхронно(Async) : Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды, совершающей исходящий вызов)
// ИД(ActionID) : Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать, когда выполняется несколько асинхронных запросов одновременно.
// ** - Обязательные поля;
Функция Originate(Источник, Приемник, Контекст = "", Таймаут="30000", Приоритет="1", ЦИД="", СтрокаПеременных="", КодДоступа="", КомандаНабора="", ДанныеНабора="", ФлагАсинхронно="true", ИД="")
ПС = Символы.ВК + Символы.ПС;
Если ПустаяСтрока(Приемник) Тогда
Сообщить("Originate(). Ошибка. Не указан номер, на который выполняется звонок");
Возврат Ложь;
КонецЕсли;
Если ПустаяСтрока(Источник) Тогда
Сообщить("Originate(). Ошибка. Не указан номер-источник, с которого выполняется звонок");
Возврат Ложь;
КонецЕсли;
Если ПустаяСтрока(Контекст) Тогда
Сообщить("Originate(). Ошибка. Не указан контекст");
Возврат Ложь;
КонецЕсли;
Если ПустаяСтрока(ЦИД) Тогда
ЦИД = Источник;
КонецЕсли;
Если ПустаяСтрока(СтрокаПеременных) Тогда
СтрокаПерем = "";
КонецЕсли;
ТекстКоманды="Action: Originate"+ПС+
"Channel: "+Источник+ПС+
"Context: "+Контекст+ПС+
"Exten: "+Приемник+ПС+
"Priority: "+Приоритет+ПС+
"Callerid: "+ЦИД+ПС+
"Timeout: "+Таймаут+ПС;
Если НЕ ПустаяСтрока(СтрокаПерем) Тогда
ТекстКоманды = ТекстКоманды + "Variable: "+СтрокаПерем+ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(КодДоступа) Тогда
ТекстКоманды = ТекстКоманды + "Account: "+КодДоступа+ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(КомандаНабора) Тогда
ТекстКоманды = ТекстКоманды + "Application: "+КомандаНабора+ПС;
КонецЕсли;
Если НЕ ПустаяСтрока(ДанныеНабора) Тогда
ТекстКоманды = ТекстКоманды + "Data: "+ДанныеНабора+ПС;
КонецЕсли;
ТекстКоманды = ТекстКоманды + "Async: "+ФлагАсинхронно+ПС;
Если НЕ ПустаяСтрока(ИД) Тогда
ТекстКоманды = ТекстКоманды + "ActionID: "+ИД+ПС;
КонецЕсли;
ТекстКоманды = ТекстКоманды + ПС;
ВыполнитьКоманду(ТекстКоманды);
Возврат Истина;
КонецФункции // Originate
Функция НабратьНомер (НомерДляЗвонка) Экспорт;
ПараметрыПодключенияКТелефонии = УправлениеТелефониейСервер.ВернутьПараметрыПользователяТелефонии();
Протокол = "PJSIP/"; // SIP/,PJSIP/,IAX/, и т.д. - в зависимости от настроект АТС
Контекст = "from-internal"; // "from-local, from-internal" - в зависимости от настроект АТС
ПС = Символы.ВК + Символы.ПС;
Если ПустаяСтрока(НомерДляЗвонка) Тогда
Сообщить("Звонить(). Ошибка. Не указан номер куда выполняется звонок");
Возврат Ложь;
КонецЕсли;
ВнутреннийНомер = Протокол+ПараметрыПодключенияКТелефонии.ВнутреннийНомер;
Результат = Originate(ВнутреннийНомер, НомерДляЗвонка, Контекст, , 1, НомерДляЗвонка);
КонецФункции
Функция ДанныеВСоответствие(Данные) Экспорт;
ПС = Символы.ВК + Символы.ПС;
Массив=Новый Соответствие;
// Пакет может быть завершен \r, без \n. Дополним...
Если Прав(Данные,1)=Символы.ВК Тогда
Данные=Данные+Символы.ПС;
КонецЕсли;
КолвоСтрок = СтрЧислоСтрок(Данные);
Разделитель=": ";
ДлинаРазделителя=СтрДлина(Разделитель);
Для Индекс=1 По КолвоСтрок Цикл
ТекСтрока= СтрПолучитьСтроку(Данные, Индекс);
ПозицияРазделителя=Найти(ТекСтрока,Разделитель);
Ключ=Лев(ТекСтрока,ПозицияРазделителя-1);
Значение=Сред(ТекСтрока,ПозицияРазделителя+ДлинаРазделителя);
Если ЗначениеЗаполнено(Ключ) Тогда
Массив.Вставить(Ключ,Значение);
КонецЕсли;
КонецЦикла;
Возврат Массив;
КонецФункции //ДанныеВСоответствие
Процедура НачатьУстановкуКомпонентыТелефонии(АдресВнешнейКомпоненты) Экспорт
ДополнительныеДанные = Новый Соответствие;
ДополнительныеДанные.Вставить("Источник","InnovaIT-Asterisk-Native");
ДополнительныеДанные.Вставить("АдресВременногоХранилища", АдресВнешнейКомпоненты);
ДополнительныеДанные.Вставить("ЭтоПервыйЗапуск", Истина);
ПослеУстановки = Новый ОписаниеОповещения("ОповещениеОбУстановкеВнешнихКомпонент",УправлениеТелефониейКлиент,ДополнительныеДанные);
НачатьУстановкуВнешнейКомпоненты(ПослеУстановки,АдресВнешнейКомпоненты);
КонецПроцедуры
Процедура НачатьУстановкуПодключенияТелефония() Экспорт
ПараметрыПодключенияКТелефонии = УправлениеТелефониейСервер.ВернутьПараметрыПользователяТелефонии();
ПослеВызоваМетодаПодключиться = Новый ОписаниеОповещения("ОповещениеОВызовеМетода",УправлениеТелефониейКлиент,"InnovaIT-Asterisk-Native-Подключиться");
глТелефония.НачатьВызовПодключиться(ПослеВызоваМетодаПодключиться, ПараметрыПодключенияКТелефонии.АдресСервера,ПараметрыПодключенияКТелефонии.ПортСервера);
Login(ПараметрыПодключенияКТелефонии.Логин,ПараметрыПодключенияКТелефонии.Пароль);
ПослеЧтенияСвойстваИдентификатор = Новый ОписаниеОповещения("ОповещениеОЧтенииСвойства",УправлениеТелефониейКлиент,"InnovaIT-Asterisk-Native-Идентификатор");
ГлТелефония.НачатьПолучениеИдентификатор(ПослеЧтенияСвойстваИдентификатор);
ПослеУстановкиСвойстваКлючПродукта = Новый ОписаниеОповещения("ОповещениеОбУстанвкеСвойства",УправлениеТелефониейКлиент,"InnovaIT-Asterisk-Native-КлючПродукта");
глТелефония.НачатьУстановкуКлючПродукта(ПослеУстановкиСвойстваКлючПродукта, ПараметрыПодключенияКТелефонии.КлючПродукта); // Устанавливаем полученный ключ. Т.к. Ключ проверяется при установке режима прослушивания.
ПослеВызоваМетодаРежимПрослушивания = Новый ОписаниеОповещения("ОповещениеОВызовеМетода",УправлениеТелефониейКлиент,"InnovaIT-Asterisk-Native-РежимПрослушивания");
ГлТелефония.НачатьВызовРежимПрослушивания(ПослеВызоваМетодаРежимПрослушивания,Истина);
ПослеЧтенияСвойстваДемонстрационныйРежим = Новый ОписаниеОповещения("ОповещениеОЧтенииСвойства",УправлениеТелефониейКлиент,"InnovaIT-Asterisk-Native-ДемонстрационныйРежим");
ГлТелефония.НачатьПолучениеДемонстрационныйРежим(ПослеЧтенияСвойстваДемонстрационныйРежим);
// Response - Нужен на команды Login. Там есть ответ, залогинены мы или нет. Т.к. Link Established - Говорит только о том что "поднято соединение".
// Newstate - В момент начала звонка, поднятия трубки генерируется именно это событие. 4 - Звонит, 6 - поляли трубку.
// MIXMONITOR_FILENAME - Тут мы получаем ссылку на файл записи телефонного разговора.
// Hangup - Ловим событие, что трубку положили
// Bridge - ловим событие что переключили звонок.
// Вообще доступны любые выражения в формате ECMAScript. Это если верить Microsoft.
ПослеВызоваМетодаУстановитьРегулярноеВыражение = Новый ОписаниеОповещения("ОповещениеОВызовеМетода",УправлениеТелефониейКлиент,"InnovaIT-Asterisk-Native-УстановитьРегулярноеВыражение");
ГлТелефония.НачатьВызовУстановитьРегулярноеВыражение(ПослеВызоваМетодаУстановитьРегулярноеВыражение, "BridgeEnter([^.]*)CallerIDNum: "+ПараметрыПодключенияКТелефонии.ВнутреннийНомер+"|BridgeLeave([^.]*)CallerIDNum: "+ПараметрыПодключенияКТелефонии.ВнутреннийНомер+"|MIXMONITOR_FILENAME|Disconnected");
КонецПроцедуры
Процедура НачатьПодключениеКомпонентыТелефонии() Экспорт
АдресВнешнейКомпоненты=УправлениеТелефониейСервер.ПолучитьАдресВнешнейКомпоненты(Новый УникальныйИдентификатор);
ДополнительныеДанные = Новый Соответствие;
ДополнительныеДанные.Вставить("Источник","InnovaIT-Asterisk-Native");
ДополнительныеДанные.Вставить("АдресВременногоХранилища", АдресВнешнейКомпоненты);
ДополнительныеДанные.Вставить("ЭтоПервыйЗапуск", Истина);
ПослеПодключения = Новый ОписаниеОповещения("ОповещениеОПодключенииВнешнихКомпонент",УправлениеТелефониейКлиент, ДополнительныеДанные);
НачатьПодключениеВнешнейКомпоненты(ПослеПодключения, АдресВнешнейКомпоненты,"InnovaIT",ТипВнешнейКомпоненты.Native);
КонецПроцедуры
Функция ИнициализироватьТелефонию() Экспорт;
// кроме веб-клиента
#Если ВебКлиент Тогда
Возврат Ложь;
#КонецЕсли
ИДОбъекта="AddIn.InnovaIT.InnovaIT-Asterisk-Native";
Попытка
ГлТелефония = Новый (ИДОбъекта);
Исключение
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
Процедура Активизировать() Экспорт
Если УправлениеТелефониейСервер.ПроверитьВозможностьРаботыСТелефонией() тогда
НачатьПодключениеКомпонентыТелефонии();
КонецЕсли;
КонецПроцедуры
Процедура Деактивизировать() Экспорт
Если глТелефония<> Неопределено тогда
ПослеЧтенияСвойстваПодключено = Новый ОписаниеОповещения("ОповещениеОЧтенииСвойства",УправлениеТелефониейКлиент,"InnovaIT-Asterisk-Native-Подключено");
ГлТелефония.НачатьПолучениеПодключено(ПослеЧтенияСвойстваПодключено);
КонецЕсли;
КонецПроцедуры
Процедура ОповещениеОбУстановкеВнешнихКомпонент(ДополнительныеДанные) Экспорт
Если ДополнительныеДанные["Источник"] = "InnovaIT-Asterisk-Native" тогда
АдресВнешнейКомпоненты=ДополнительныеДанные["АдресВременногоХранилища"];
ПослеПодключения = Новый ОписаниеОповещения("ОповещениеОПодключенииВнешнихКомпонент",УправлениеТелефониейКлиент,ДополнительныеДанные);
Если ДополнительныеДанные["ЭтоПервыйЗапуск"] тогда
НачатьПодключениеВнешнейКомпоненты(ПослеПодключения, АдресВнешнейКомпоненты,"InnovaIT",ТипВнешнейКомпоненты.Native);
ДополнительныеДанные["ЭтоПервыйЗапуск"] = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОповещениеОПодключенииВнешнихКомпонент(Результат, ДополнительныеДанные) Экспорт
Если ДополнительныеДанные["Источник"] = "InnovaIT-Asterisk-Native" тогда
Если Результат тогда
Сообщить("Компонента "+ДополнительныеДанные + " Подключена");
Инициализирована = УправлениеТелефониейКлиент.ИнициализироватьТелефонию();
Если Инициализирована тогда
УправлениеТелефониейКлиент.НачатьУстановкуПодключенияТелефония();
КонецЕсли;
Иначе
Сообщить("!!!Компонента "+ДополнительныеДанные + " не подключена. Вызов установки.");
УправлениеТелефониейКлиент.НачатьУстановкуКомпонентыТелефонии(ДополнительныеДанные["АдресВременногоХранилища"]);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОповещениеОВызовеМетода(Результат, Параметры, ДополнительныеДанные) Экспорт
Если ДополнительныеДанные = "InnovaIT-Asterisk-Native-Подключиться" тогда
Если НЕ Результат тогда
Сообщить("!!!Не удалось подключиться к серверу. (Адрес: " + Параметры[0] + " Порт: " +Параметры[1]+")");
КонецЕсли;
ИначеЕсли ДополнительныеДанные = "InnovaIT-Asterisk-Native-ВыполнитьКоманду" тогда
Если НЕ Результат тогда
Сообщить("!!!Не удалось выполнить команду. Команда:" + СИмволы.ПС + Параметры[0]);
КонецЕсли;
ИначеЕсли ДополнительныеДанные = "InnovaIT-Asterisk-Native-РежимПрослушивания" тогда
Если НЕ Результат тогда
Сообщить("!!!Не удалось перейти в режим прослушивания");
Иначе
Сообщить("Режим прослушивания включен.");
КонецЕсли;
ИначеЕсли ДополнительныеДанные = "InnovaIT-Asterisk-Native-Отключиться" тогда
Если НЕ Результат тогда
Сообщить("!!!Не удалось отключиться");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОповещениеОЧтенииСвойства(Результат, ДополнительныеДанные) Экспорт
Если ДополнительныеДанные = "InnovaIT-Asterisk-Native-Идентификатор" тогда
Сообщить("ИД компьютера: " +Результат);
ИначеЕсли ДополнительныеДанные = "InnovaIT-Asterisk-Native-ДемонстрационныйРежим" тогда
Сообщить("Демонстрационный режим: " + Результат);
ИначеЕсли ДополнительныеДанные = "InnovaIT-Asterisk-Native-Подключено" тогда
Если Результат тогда
ПослеВызоваМетодаОтключиться = Новый ОписаниеОповещения("ОповещениеОВызовеМетода",УправлениеТелефониейКлиент,"InnovaIT-Asterisk-Native-Отключиться");
ГлТелефония.НачатьВызовОтключиться(ПослеВызоваМетодаОтключиться); //
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОповещениеОбУстанвкеСвойства (Результат) Экспорт
// Тут я так понимаю ответ компоненты. Удалось или нет установить свойство.
КонецПроцедуры
Процедура ОбработатьВнешнееСобытие(Событие, Данные) Экспорт
Если Событие = "Disconnected" тогда
Сообщить ("Обрыв соединения " + Формат(ТекущаяДата(),"ДЛФ=DT"));
//ПодключитьОбработчикОжидания("ИНН_УправлениеТелефониейКлиент.Автоподключение",5,Ложь);
НачатьУстановкуПодключенияТелефония();
КонецЕсли;
ДанныеСобытия = ДанныеВСоответствие(Данные);
Если ДанныеСобытия.Получить("Event") <> Неопределено тогда
Если ДанныеСобытия["Event"] = "VarSet" и ДанныеСобытия["Variable"] = "MIXMONITOR_FILENAME" тогда // Заполним данные для записи
// Запись разговора
ВходящийНомер = УправлениеТелефониейСервер.ВернутьДестизначныйНомер(ДанныеСобытия["CallerIDNum"]);
СсылкаНаЗапись = ДанныеСобытия["Value"];
ИД = ДанныеСобытия["Uniqueid"];
СвязанноеИД = ДанныеСобытия["Linkedid"];
ВходящийТранк = Сред(ДанныеСобытия["Channel"],5,11);
Если Лев(ВходящийТранк,1) = "7" тогда
ВходящийТранк = Прав(ВходящийТранк,10);
Иначе
ВходящийТранк = Лев(ВходящийТранк,10);
КонецЕсли;
ВнутреннийАбонент = "";
УправлениеТелефониейСервер.ЗаписатьСобытиеТелефонии(ИД, СвязанноеИД, ВходящийТранк,ВходящийНомер,СсылкаНаЗапись,ВнутреннийАбонент, 0);
ИначеЕсли ДанныеСобытия["Event"] = "BridgeEnter" тогда
ВходящийНомер = УправлениеТелефониейСервер.ВернутьДестизначныйНомер(ДанныеСобытия["ConnectedLineNum"]);
СсылкаНаЗапись = "";
ИД = ДанныеСобытия["Uniqueid"];
СвязанноеИД = ДанныеСобытия["Linkedid"];
ВходящийТранк = "";
ВнутреннийАбонент = ДанныеСобытия["CallerIDNum"];
УправлениеТелефониейСервер.ЗаписатьСобытиеТелефонии(ИД, СвязанноеИД, ВходящийТранк,ВходящийНомер,СсылкаНаЗапись,ВнутреннийАбонент, 1);
МассивКонтакты = Новый Массив;
Параметры = Новый Структура("МассивКонтакты", МассивКонтакты);
Параметры.Вставить("НомерТелефона",ВходящийНомер);
ФормаТелефонии = ПолучитьФорму("Обработка.РабочееМестоОператораТелефонии.Форма",Параметры);
Если ФормаТелефонии.Открыта() тогда
Оповестить("НовыйЗвонок",Параметры,"ВнешнееСобытиеТелефонныйЗвонок");
ФормаТелефонии.Активизировать();
ФормаТелефонии.ТекущийЭлемент = ФормаТелефонии.Элементы.ГруппаСтраницаРабочееМесто;
Иначе
ФормаТелефонии.Открыть();
КонецЕсли;
ИначеЕсли ДанныеСобытия["Event"] = "BridgeLeave" тогда
ВходящийНомер = УправлениеТелефониейСервер.ВернутьДестизначныйНомер(ДанныеСобытия["ConnectedLineNum"]);
СсылкаНаЗапись = "";
ИД = ДанныеСобытия["Uniqueid"];
СвязанноеИД = ДанныеСобытия["Linkedid"];
ВходящийТранк = "";
ВнутреннийАбонент = ДанныеСобытия["CallerIDNum"];
УправлениеТелефониейСервер.ЗаписатьСобытиеТелефонии(ИД, СвязанноеИД, ВходящийТранк,ВходящийНомер,СсылкаНаЗапись,ВнутреннийАбонент, 2);
//МассивКонтакты = Новый Массив;
//Параметры = Новый Структура("МассивКонтакты", МассивКонтакты);
//Параметры.Вставить("НомерТелефона",ВходящийНомер);
//ФормаТелефонии = ПолучитьФорму("Обработка.РабочееМестоОператораТелефонии.Форма",Параметры);
//Если ФормаТелефонии.Открыта() тогда
// Оповестить("НовыйЗвонок",Параметры,"ВнешнееСобытиеТелефонныйЗвонок");
// ФормаТелефонии.Активизировать();
//Иначе
// ФормаТелефонии.Открыть();
//КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры