(Для справки у меня есть admin_consent
для организации с областью авторизации offline_access User.ReadWrite.All Group.ReadWrite.All AppCatalog.ReadWrite.All
для моего токена, который я использую для взаимодействия с экземпляром Teams.)
После установки приложения через POST / команды / {id} / instalApps отправляет событие conversationUpdate
, на которое я отвечаю, и сохраняет весь объект ConversationReference
. В нем много вещей, которые мне не нужны, но я не уверен, что нужно. Немедленный ответ направляется на канал General
указанной Команды.
Теперь я хочу использовать это ConversationReference
, чтобы публиковать проактивные уведомления в канале, который пользователь назначил за пределами Команд. Таким образом, пользователь не взаимодействовал с ботом в этом канале, но я могу перечислить канал и иметь его идентификатор.
Я могу отправить сообщение на канал General
, используя весь захваченный мной ConversationReference
, или отправить сообщение непосредственно пользователю в chat
, пропустив поля канала c, но не могу похоже, что сообщение отправляется на указанный c канал, если я укажу его как channelId
const msBotAdapter = new BotFrameworkAdapter({
appId: TEAMS_CLIENT_ID,
appPassword: TEAMS_CLIENT_SECRET,
});
//Paired down the saved reference to look like this
const conversationReference = {
"user" : {
"id" : "9:1rafmaopfopakdfafMzCYlCtg",
"aadObjectId" : "fffffff-ffff-ffff-ffff-ffffffff"
},
"bot" : {
"id" : "8:sdfsfsdf-dddd-ddddd-aaaaa-vvvvvvv",
"name" : "Bot Name"
},
"conversation" : {
"isGroup" : true,
"conversationType" : "channel",
"tenantId" : "ffffffff-ssssss-ssssss-ss-ssssss"
},
"channelId" : "msteams",
"serviceUrl" : "https://smba.trafficmanager.net/amer/"
}
const heroCard = CardFactory.heroCard(label, text, undefined, undefined, {
subtitle: fromUser?.name ? `From: ${fromUser.name}` : undefined,
});
const channelId = {...retrieve channel Id}
const activity = {
recipient: {
id: channelId,
name: 'Test channel 2',
},
type: ActivityTypes.Message,
timestamp: new Date(),
localTimezone: 'America/New_York',
callerId: TEAMS_CLIENT_ID,
serviceUrl: conversationReference.serviceUrl!,
channelId,
from: conversationReference.bot as { id: string; name: string },
valueType: 'text',
attachments: [heroCard],
};
await msBotAdapter.createConversation(
conversationReference,
async turnContext => {
await turnContext.sendActivity(activity);
}
);