# 💰 IEE BPM | Интеграция с SMS и мессенджерами

Модуль интеграции ядра системы с операторами SMS и мессенджерами

# Настройки

# Настройки чат бота Telegram

Для настройки подключения к чат боту Telegram нужно пройти по ссылке **Администрирование - (секция Настройки системы) SMS уведомления**:

[![image-1635058521131.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/scaled-1680-/SXghoBVclToZceGW-image-1635058521131.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/SXghoBVclToZceGW-image-1635058521131.png)

Необходимо указать API Token чат бота, полученный от [@BotFather](https://botcreators.ru/blog/botfather-instrukciya/):

[![image-1635058736703.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/scaled-1680-/s8qfsNVluqqh4V9x-image-1635058736703.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/s8qfsNVluqqh4V9x-image-1635058736703.png)

В случае успешного соединения, будет отображена следующая информация:

[![image-1635058795350.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/scaled-1680-/djAMfGWdlCdCWrKr-image-1635058795350.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/djAMfGWdlCdCWrKr-image-1635058795350.png)

Если токен указан не верно, будет выдана соответствующая ошибка:

[![image-1635058857281.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/scaled-1680-/ZOj3GDUt0zYQkIm8-image-1635058857281.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/ZOj3GDUt0zYQkIm8-image-1635058857281.png)

Если токен не указан, то интеграция отключена:

[![image-1635058929923.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/scaled-1680-/XUDMHw2vZLq6VR57-image-1635058929923.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/XUDMHw2vZLq6VR57-image-1635058929923.png)

<p class="callout warning">Доступно только в Корпоративной редакции</p>

Сервис чат бота Telegram реализован в виде кворум сервиса. Если просмотр настроек производиться на пассивном узле кластера, то будет выдано следующее предупреждение:

[![image-1635057998084.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/scaled-1680-/tL7rI8oMhhFGOtUB-image-1635057998084.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/tL7rI8oMhhFGOtUB-image-1635057998084.png)

# Примеры сценариев

# Отправка сообщения в чат бот Telegram

При создании задачи в бизнес процессе можно отправить пользователю сообщение в чат бот Telegram:

```C#
public override void OnTaskCreate (ITaskBase task, P_SupplierAdvPayment context)
{
	var wtask = task as IWorkflowTaskBase;
  	// {3d701012-72a0-4f87-8b27-5405c91d7181} - Uid задачи на схеме
  	if (wtask != null && wtask.WorkflowBookmark.ElementUid.Equals (new Guid ("{3d701012-72a0-4f87-8b27-5405c91d7181}")) && wtask.Executor.MobilePhone != null) {
    	try {
      		GateManager.CurrentGate.SendMessage (wtask.Executor.MobilePhone, SR.T ("🖌 Подписать ПП для: {0}", context.Supplier.Name));
    	}
    	catch {
      		// ignored
    	}
  	}
}
```

В Telegram придет следующее сообщение:

[![image-1622009345537.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/scaled-1680-/FDb0ZTMD4O2Dx2r2-image-1622009345537.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/FDb0ZTMD4O2Dx2r2-image-1622009345537.png)

Так же возможна отправка напрямую через метод **SMSHelper.ChatBotTelegram.SendTextMessage(user, message)**

# Задача согласования документа в Telegram

При постановке в бизнес процессе задачи согласования документа, можно ее продублировать в Telegram:

```C#
public override void OnTaskCreate (ITaskBase task, P_SupplierAdvPayment context)
{
	// d8ef716f-f819-4578-9cde-698ba71524b1 - Uid задачи на диаграмме 
	SMSHelper.ChatBotTelegram.LinkWorkflowTask(new Guid("d8ef716f-f819-4578-9cde-698ba71524b1"), task, model =>
	{
      	// 542bdff7-8d93-4946-bbc3-e2941d210daf - Uid перехода Согласовано
		model.Buttons.Add(new TelegramButton { Name = "Согласовано", Emoji = "✅", ConnectorUid = new Guid("542bdff7-8d93-4946-bbc3-e2941d210daf") });
      	// c17b1064-0dbf-4372-b74d-38c84af7d05a - Uid перехода Не согласовано
		model.Buttons.Add(new TelegramButton { Name = "Отказано", Emoji = "❌", ConnectorUid = new Guid("c17b1064-0dbf-4372-b74d-38c84af7d05a") });

      	// Счет
		if (context.Invoice != null)
			model.Document = new TelegramDocument { Name = context.Invoice.Name, File = context.Invoice.CurrentVersion.File };
		
      	// Дополнительная информация
		model.Details.Add("Покупатель: " + context.Invoice.IEECustomer.Name);
      
      	// Лист согласования документа
		SMSHelper.ChatBotTelegram.AddApprovalList(model, context.Invoice);
	});
}
```

Необходимо добавить:

```C#
using ITino.ELMA.SMS.Helpers;
using ITino.ELMA.SMS.Models;
```

В результате в Telegram придет блок сообщений с кнопками:

[![image-1622009770424.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/scaled-1680-/h85FSf33Xmt4dIpf-image-1622009770424.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/h85FSf33Xmt4dIpf-image-1622009770424.png)

При выборе действия "Отказано" задачу будет завершена и в бизнес процессе произойдет переход "Не согласовано":

[![image-1622009851749.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/scaled-1680-/R2v1CmmleZ8mE2Iv-image-1622009851749.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/R2v1CmmleZ8mE2Iv-image-1622009851749.png)

# Обычная задача бизнес процесса в Telegram

При выполнении обычной задачи бизнес процесса ее можно продублировать в Telegram, например задача подписания документа (не docflow):

```C#
public override void OnTaskCreate (ITaskBase task, P_SupplierAdvPayment context)
{
	// 1c2cbe8f-73b7-4618-930a-aeefe4ae06ff - Uid задачи на схеме
  	SMSHelper.ChatBotTelegram.LinkWorkflowTask(new Guid("1c2cbe8f-73b7-4618-930a-aeefe4ae06ff"), task, model =>
	{
      	// 5d682c20-4a47-433b-95c6-a08f97d56e68 - Uid перехода на схеме
		model.Buttons.Add(new TelegramButton { Name = "Подписано", Emoji = "🖋", ConnectorUid = new Guid("5d682c20-4a47-433b-95c6-a08f97d56e68") });
      	
      	// Файл (версия) документа
		model.Document = new TelegramDocument { File = context.PaymentOrder.File };
	});
}
```

Необходимо добавить:

```C#
using ITino.ELMA.SMS.Helpers;
using ITino.ELMA.SMS.Models;
```

В Telegramt будет сформирован блок сообщений:

[![image-1622010216372.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/scaled-1680-/lYw7XDEQ4aTimeGK-image-1622010216372.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/lYw7XDEQ4aTimeGK-image-1622010216372.png)

После нажатия "Подписано" задача будет завершена и бизнес процесс пойдет дальше:

[![image-1622010265032.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/scaled-1680-/8sUoTSPN7IN7aoaE-image-1622010265032.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-05/8sUoTSPN7IN7aoaE-image-1622010265032.png)

# Возможность ввода комментария к документу

Для реализации возможности ввода комментария к документу в процессной задаче, необходимо указать его Id:

```C#
// Просто задача
SMSHelper.ChatBotTelegram.LinkWorkflowTask(new Guid("d07a5dc2-e7d8-457e-861a-ed2daeb7e199"), task, model =>
{
	model.Buttons.Add(new TelegramButton {Name = "Согласовано", Emoji = "🖋", ConnectorUid = new Guid("9de8cf05-e5a1-4cdb-9e5a-7a2af6d22fa3")});
	// Указываем Id документа для возможности ввода комментария
	model.Document = new TelegramDocument { File = context.Invoice.CurrentVersion.File, Id = context.Invoice.Id };
});
```

В результате создания задачи будет добавлена кнопка "+ Комментарий к документу":

[![image-1624709222682.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/scaled-1680-/HUW2hByfBaZc0Csg-image-1624709222682.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/HUW2hByfBaZc0Csg-image-1624709222682.png)

При нажатии на указанную кнопку бот выдаст подсказку:

[![image-1624709266574.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/scaled-1680-/fHLb0r7rqLRvmXgC-image-1624709266574.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/fHLb0r7rqLRvmXgC-image-1624709266574.png)

После ввода комментария и отправки его боту, получим подтверждение и комментарий в самом документе:

[![image-1624709324213.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/scaled-1680-/ktlrVpGDMFdK4iJK-image-1624709324213.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/ktlrVpGDMFdK4iJK-image-1624709324213.png)

[![image-1624709342376.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/scaled-1680-/jcgZynkXjlemrWnC-image-1624709342376.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/jcgZynkXjlemrWnC-image-1624709342376.png)

Если нужно отменить ввод комментария, необходимо отправить команду **/none**:

[![image-1624709390488.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/scaled-1680-/9lGLbkqvTEMc3saJ-image-1624709390488.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/9lGLbkqvTEMc3saJ-image-1624709390488.png)

# Комментарии к согласованию и ознакомлению

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

- Не вводить
- Опционально
- Обязательно

```C#
// По умолчанию AddCommentOption = EOAddCommentOption.None
model.Buttons.Add(new TelegramButton { Name = "Согласовано", Emoji = "✅", ConnectorUid = new Guid("9d0c9a7d-5db0-4c3e-b7b3-e8083fa0dd27"), AddCommentOption = EOAddCommentOption.Optional });
model.Buttons.Add(new TelegramButton { Name = "Отказано", Emoji = "❌", ConnectorUid = new Guid("b8f9eca4-6a1a-408e-af99-3a546499e191"), AddCommentOption = EOAddCommentOption.Required });
```

Для опционального комментария чат бот пришлет следующе сообщение:

[![image-1625047191354.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/scaled-1680-/hIBsx17zAbnWSxmi-image-1625047191354.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/hIBsx17zAbnWSxmi-image-1625047191354.png)

И если будет введена команда **/none**, действие будет выполнено без фиксации комментария:

[![image-1625047259226.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/scaled-1680-/dyF1AOgUHD4eOxcZ-image-1625047259226.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/dyF1AOgUHD4eOxcZ-image-1625047259226.png)

Для обязательного комментария действие не будет выполнено, пока не будет введен текст, а по факту его ввода будет выдано соответствующее уведомление:

[![image-1625047326916.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/scaled-1680-/WzlTmDbLhBTrCeQF-image-1625047326916.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-06/WzlTmDbLhBTrCeQF-image-1625047326916.png)

# Задача ознакомления с документом в Telegram

Функционал аналогичен [Задаче согласования документа в Telegram](https://kb.randmgroup.ru/books/iee-bpm-integratsiya-s-sms-i-messendzherami/page/zadacha-soglasovaniya-dokumenta-v-telegram "Задаче согласования документа в Telegram").

При этом можно сформировать лист ознакомления следующим образом:

```C#
SMSHelper.ChatBotTelegram.LinkWorkflowTask(new Guid("932cffc4-7f2e-4570-81f4-42fc25a7ea28"), task, model =>
{
	model.Buttons.Add(new TelegramButton { Name = "Ознакомлен", Emoji = "👀", ConnectorUid = new Guid("8a771e9c-b538-4b3e-8815-d57107fd8dfd") });

	if (context.Invoice != null)
		model.Document = new TelegramDocument {Name = context.Invoice.Name, File = context.Invoice.CurrentVersion.File};
	
  	// Добавить лист ознакомления по документу
	SMSHelper.ChatBotTelegram.AddAcquaintanceList(model, context.Invoice);
});
```

# Отключение вывода описания задачи в Telegram

По умолчанию, в чат выводится после названия задачи ее описание, которое заполнено в Дизайнере. Если описание слишком большое, либо его не надо выводить в чат, необходимо в модели при создании задачи указать следующее:

```C#
model.DisableTaskDescription = true;
```

Ссылка на пример сценария: [Обычная задача бизнес процесса в Telegram](https://kb.randmgroup.ru/books/iee-bpm-integratsiya-s-sms-i-messendzherami/page/obychnaya-zadacha-biznes-protsessa-v-telegram "Обычная задача бизнес процесса в Telegram")