Как отправить проактивное сообщение определенному каналу и конкретному пользователю, используя Bot на BotFramework SDK v4 - PullRequest
0 голосов
/ 04 июля 2019

Отправка уведомительного сообщения (адаптивная карта) в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...