Настройка виртуальной АТС МТС в УНФ (vpbx.mts.ru)
«Доводка» УНФ для реализации телефонных звонков с кнопки в программе.
- Описание
- Подробнее
Описание
Давно чесались руки, но не было времени для реализации данного функционала.
Итак, начнем настройку.
1. Настройка в личном кабинете https://vpbx.mts.ru/
Главное меню — Методы API:

Активируем API, генерируем ключ, указываем URL для обратных вызовов (об этом подробнее ниже).
Переходим Главное меню — web hooks, активируем.

Заполняем настройки CRM УНФ — Облачная телефония:

Ставим галочку здесь:

Копируем ключ API и заполняем адрес АТС:

Заполняем пользователей телефонии. Важно: вместо внутренних телефонов указываем идентификаторы абонентов отсюда (главное меню-абоненты):

Число в адресной строке и есть идентификатор абонента.

Заполняем действия при исходящих звонках (входящие мы пока не будем отслеживать, т.к. надо поднять отдельный HTTP сервис для callback-запросов МТС и об этом будет отдельная тема):

Теперь конфигуратор.
В конфигураторе добавляем расширение.
Заимствуем процедуру ДополнитьПараметрыОтправки общего модуля ОтправкаЗапросов для исправления запроса по требованиям API МТС:
Вставляем следующий код:
&После("ДополнитьПараметрыОтправки")
Процедура Расш1_ДополнитьПараметрыОтправки(ПараметрыОтправки)
ИДАбонента =ПараметрыОтправки.ПараметрыТела["user"];
ИсходящийНомер = ПараметрыОтправки.ПараметрыТела["phone"];
ПараметрыОтправки.URL = "https://vpbx.mts.ru/api/user/" + ИДАбонента + "/calls?address=tel:" + ИсходящийНомер;
ПараметрыОтправки.Заголовки.Вставить("X-AUTH-TOKEN", ПараметрыОтправки.ПараметрыТела["token"]);
ПараметрыОтправки.Заголовки.Вставить("cache-control", "no-cache");
КонецПроцедуры
Запускаем в режиме предприятия, находим контакт для звонка. Нажимаем трубочку, радуемся.
Немного про callback адрес и webhooks.
Из описания методов API:
Для активации API CRM необходимо выбрать в левом меню пункт "Активация API". В нем необходимо активировать API, сгенерировать токен авторизации и настроить URL для обратного вызова. URL для обратного вызова должен быть доступен в публичном интернете.
Если мы не предполагаем использование входящих вызовов в CRM, то можно поднять простой HTTP сервис с методом POST.


Адрес запроса будет выглядеть так:
http://ххх.ххх.ххх.ххх/mts/hs/api/post/subscription
Примерный код обработки входящих запросов
Функция ШаблонURL1subscription(Запрос)
ТекДата = ТекущаяДата();
суффикс = Формат(Год(текДата),"ЧГ=") + "_" + Формат(Месяц(Текдата),"ЧГ=") + "_" + Формат(День(Текдата),"ЧГ=");
ИмяЛога = "D:\Разработка\МТС\Логи\logHooks_" + суффикс + ".txt";
ткс = НайтиФайлы(ИмяЛога); //лог входящих запросо для отладки
Текст = Новый ТекстовыйДокумент;
Если НЕ ткс.Количество() = 0 тогда
Текст.Прочитать(ИмяЛога);
КонецЕсли;
СтрокаЗапрос = Запрос.ПолучитьтелоКакСтроку();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаЗапрос);
Попытка
мДаты = Новый Массив; //формат даты в запросе ФорматДатыJSON.JavaScript надо восстанавливать функцией ВосстановитьДатуJSON
мДаты.Добавить("startTime");
мДаты.Добавить("endTime");
мДаты.Добавить("answerTime");
Данные = ПрочитатьJSON(Чтение,,мДаты,ФорматДатыJSON.JavaScript,"ВосстановитьДатуJSON",МТС);
Исключение
иск = ОписаниеОшибки();
КонецПопытки;
Чтение.Закрыть();
Попытка
МТС.ДобавитьЗаписьВходящийЗапрос(Данные); //процедура заполнения регистра с протоколом входящих запросов
Исключение
КонецПопытки;
Текст.ДобавитьСтроку(Формат(ТекДата,"ДЛФ=T") + " " + СтрокаЗапрос);
Текст.Записать(ИмяЛога);
Ответ = Новый HTTPСервисОтвет(200);
Возврат Ответ;
КонецФункции И на всякий случай функция разбора даты:
&НаСервере
Функция ВосстановитьДатуJSON(Свойство, Значение, ДополнительныеПараметры) Экспорт
Если Свойство = "answerTime" Или Свойство = "endTime" Или Свойство = "startTime" Тогда
Результат = Дата(1,1,1);
Если ЗначениеЗаполнено(Значение) Тогда
Попытка
фЗначение = "new Date(" + Формат(Значение,"ЧГ=") + ")";
Результат = ПрочитатьДатуJSON(фЗначение, ФорматДатыJSON.JavaScript);
Возврат Результат;
Исключение
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецФункции
Теперь МТС при проверке нашего адреса получит код 200 и не отключит API взаимодействие. До выхода стабильной платформы 8.3.21 нет возможности поднять этот сервис на стороне УНФ. Т.к. МТС стучится к нам используя ключ авторизации а не Логин и пароль пользователя. Поэтому есть смысл поднять сервис на отдельно взятой конфигурации и обеспечить взаимодействие с ней УНФ. Но это мое мнение и оно может быть не единственным.

