Bot Framework Directline Отправить уведомление C#
Я собрал бота, используя бот-фреймворк, и интегрировал его в мой сайт по прямой линии Я также начал с создания портала администратора, где администратор может взглянуть на аналитику ботов.
В настоящее время у меня есть требование, чтобы администратор был в состоянии найти всех пользователей, которые в настоящее время имеют чат с отправкой, и при необходимости отправить уведомление всем этим пользователям, если какой-либо орган уже реализовал такой сценарий, пожалуйста, направьте меня в правильном направлении.
Благодарю.
1 ответ
Упреждающие сообщения - это термины для "push-уведомлений" в пространстве Bot Framework. Некоторая документация может быть найдена здесь: https://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-proactive-messages?view=azure-bot-service-3.0
Концептуально, разработчик бота где-то сохраняет ConversationReference, который позже используется для отправки Проактивного сообщения.
Сохраните куда-нибудь разговор (ссылка на кэш, базу данных и т. Д.):
var conversationReference = message.ToConversationReference();
Используйте эту ссылку на разговор, чтобы отправить пользователю Проактивное сообщение:
var message = JsonConvert.DeserializeObject<ConversationReference>(conversationReference).GetPostToBotMessage();
var client = new ConnectorClient(new Uri(message.ServiceUrl));
// Create a scope that can be used to work with state from bot framework.
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
var botData = scope.Resolve<IBotData>();
await botData.LoadAsync(CancellationToken.None);
// This is our dialog stack.
var task = scope.Resolve<IDialogTask>();
// Create the new dialog and add it to the stack.
var dialog = new WhateverDialog();
// interrupt the stack. This means that we're stopping whatever conversation that is currently happening with the user
// Then adding this stack to run and once it's finished, we will be back to the original conversation
task.Call(dialog.Void<object, IMessageActivity>(), null);
await task.PollAsync(CancellationToken.None);
// Flush the dialog stack back to its state store.
await botData.FlushAsync(CancellationToken.None);
}