#botframework #microsoft-teams
#ботфреймворк #microsoft-команды
Вопрос:
У меня проблема с моим проактивным ботом.
Моя проблема в том, что когда я добавляю бота в команду в первый раз, он запускает и событие, которое создает команду и общий канал.
Моя проблема в том, что он не создает ссылку на чат для других существующих каналов до добавления бота. Если я добавляю новый канал в команду, он запускает событие channelCreated и создается новая ссылка на разговор. Я переопределил OnConversationUpdateActivityAsync, и, как уже упоминалось, он работает при первом добавлении бота, а затем при добавлении новых каналов.
Кто-нибудь знает, что лучше всего использовать при первом добавлении бота? Должен ли я просто создавать ссылки на беседы для всех существующих каналов при первом добавлении бота?
Ответ №1:
Я предполагаю, что вы просто хотите иметь возможность отправлять сообщения бота по всем каналам. Если это не так, дайте мне знать, и я отредактирую ответ.
Я рекомендую взглянуть на Teams - Start New Thread in Channel
образец.
В принципе, вам нужно, чтобы бот получил список каналов:
public class MyBot : TeamsActivityHandler
{
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
IEnumerable<ChannelInfo> channels = await TeamsInfo.GetTeamChannelsAsync(turnContext, turnContext.Activity.TeamsGetTeamInfo().Id, cancellationToken);
await turnContext.SendActivityAsync($"The channel count is: {channels.Count()}");
}
}
И затем вы можете отправить упреждающее сообщение каналу, создав диалог, а затем продолжив его:
var conversationParameters = new ConversationParameters
{
IsGroup = true,
ChannelData = new { channel = new { id = teamsChannelId } },
Activity = (Activity)message,
};
ConversationReference conversationReference = null;
await ((BotFrameworkAdapter)turnContext.Adapter).CreateConversationAsync(
teamsChannelId,
serviceUrl,
credentials,
conversationParameters,
(t, ct) =>
{
conversationReference = t.Activity.GetConversationReference();
return Task.CompletedTask;
},
cancellationToken);
await ((BotFrameworkAdapter)turnContext.Adapter).ContinueConversationAsync(
_appId,
conversationReference,
async (t, ct) =>
{
await t.SendActivityAsync(MessageFactory.Text("This will be the first response to the new thread"), ct);
},
cancellationToken);
}
Комментарии:
1. Спасибо за ваш ответ. Проблема в том, что у меня есть бот и у меня есть приложение. При добавлении моего приложения в команду / канал бот получает событие и вызывает OnConversationUpdateActivityAsync, где я создаю ссылку на разговор. Если мое приложение добавляется к другому существующему каналу, событие не отправляется боту. Итак, я думаю, нужно ли мне самому создавать ссылку на беседу или мне чего-то не хватает.
2. Но, как вы упомянули в своем ответе, я мог бы просто получить все каналы в команде, когда приложение / бот добавляется в команду в первый раз, и создать ссылки на разговоры для каждого. Это для того, чтобы я мог позже отправлять упреждающие сообщения членам команды.
3. @OskarJenssonFjeld Это правильно. Вы получаете событие только один раз, потому что вы получаете его, когда добавляете бота в КОМАНДУ, а не в канал. Команда может состоять из множества каналов, поэтому, как только бот добавляется в команду, он получает доступ ко всем каналам этой команды, поэтому именно тогда вы хотите запросить все каналы.
4. @OskarJenssonFjeld Смогли ли вы заставить это работать с моим ответом? Если это так, пожалуйста, «примите» и проголосуйте за него, чтобы другие могли быстро найти ответ, и я могу очистить это из своего трекера поддержки. Если нет, дайте мне знать, как еще я могу помочь!