Отправка уведомительного сообщения (адаптивная карта) в Microsoft Teams & Skype с использованием бота по отдельности.
У меня реализован рабочий процесс утверждения, я пытаюсь отправить уведомления об утверждении на эти каналы:
- скайп
- команды
В зависимости от предпочтений уведомлений пользователя, которые они могут устанавливать в настройках уведомлений приложений рабочего процесса.
Я создал проактивного бота для отправки адаптивной карты в Команды вместе со спусковым крючком. Но я не могу понять, как бот может отправить уведомление на нужный канал.
Мой код выглядит следующим образом:
ProActiveBot
public class ProActiveBot : ActivityHandler
{
private ConcurrentDictionary<string, ConversationReference> _conversationReferences;
public ProActiveBot(ConcurrentDictionary<string, ConversationReference> conversationReferences)
{
_conversationReferences = conversationReferences;
}
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> context, CancellationToken cancellationToken)
{
ConversationReference conversationReference = context.Activity.GetConversationReference();
_conversationReferences.AddOrUpdate(conversationReference.User.Id, conversationReference, (key, newValue) => conversationReference);
await context.SendActivityAsync(MessageFactory.Text($"Sent: {context.Activity.Text}"), cancellationToken);
}
protected override Task OnConversationUpdateActivityAsync(ITurnContext<IConversationUpdateActivity> context, CancellationToken cancellationToken)
{
ConversationReference conversationReference = context.Activity.GetConversationReference();
_conversationReferences.AddOrUpdate(conversationReference.User.Id, conversationReference, (key, newValue) => conversationReference);
return base.OnConversationUpdateActivityAsync(context, cancellationToken);
}
}
Контроллер уведомлений
Route("api/notify")]
[ApiController]
public class TriggerController : ControllerBase
{
private readonly IBotFrameworkHttpAdapter _adapter;
private readonly string _appId;
private readonly ConcurrentDictionary<string, ConversationReference> _conversationReferences;
public TriggerController(IBotFrameworkHttpAdapter adapter, ICredentialProvider credentials, ConcurrentDictionary<string, ConversationReference> conversationReferences)
{
_adapter = adapter;
_conversationReferences = conversationReferences;
_appId = ((SimpleCredentialProvider)credentials).AppId;
}
public async Task<IActionResult> Get()
{
foreach (var conversationReference in _conversationReferences.Values)
{
await ((BotAdapter)_adapter).ContinueConversationAsync(_appId, conversationReference, BotCallback, default(CancellationToken));
}
return new ContentResult()
{
Content = @"<html></body><h1>Sent</h1></body></html>",
ContentType = "text/html",
StatusCode = (int)HttpStatusCode.OK,
};
}
private async Task BotCallback(ITurnContext context, CancellationToken cancellationToken)
{
await context.SendActivityAsync(MessageFactory.Attachment(new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = JsonConvert.DeserializeObject(System.IO.File.ReadAllText(Path.Combine(".", "Cards", "notification.json"))),
}), cancellationToken);
}
}
Может кто-нибудь помочь мне понять, как я могу выбрать определенный канал для отправки уведомления на BotFramework.