Редактировать: OP и я обменялись несколькими письмами, чтобы получить ответ.В целом, этот ответ является хорошей информацией для проактивного обмена сообщениями в группах, но основной ответ содержится в последнем разделе, Упрощенный код.
Это длинный ответ, охватывающий многие области.просто потому, что я не на 100% уверен, что знаю, какого рода уведомление вы не получаете.
Устранение неполадок
- Руководство по устранению неполадок
- Обратите особое внимание на множество областей, где необходимо включить уведомления
- В частности, пользователю может потребоваться «Следовать» и / или «Избирать» канал, чтобыполучать от него уведомления
- Если у пользователя открыто настольное приложение, оно получит уведомление там и не получит его на свой телефон, если тольконеактивны в настольном приложении более 3 минут.В противном случае это скорее всего ошибка в командах.
Уведомления чата
Если вы следовали приведенному выше руководству по устранению неполадок, ваши пользователи должны получать уведомления в чате.Если нет, попробуйте обновить настольный или мобильный клиент MS Teams.Как упомянул @KyleDelaney, может быть полезно @
упомянуть пользователей и / или каналы
Уведомления ленты активности
Вы также можете создать Уведомления ленты активности .Суть в том, что вам нужно:
- Включить
text
и summary
в сообщение - Включить
channelData
, который устанавливает notifications.alert
в истинное значение
Этот код выполнит следующее:
const msg = MessageFactory.text('my message');
msg.summary = 'my summary';
msg.channelData = {
notification: {
alert: true,
},
};
return await dc.context.sendActivity(msg);
Результат:
Примечание. Если ваш бот only создает уведомления и не ведет разговоров, вы можете воспользоваться , создающим бота только для уведомлений .
Полный код реализации
import * as adaptiveCard from '../src/adaptiveCard.json';
...
const card = CardFactory.adaptiveCard(adaptiveCard);
const activity = {
attachments: [card],
text: 'Test Card',
summary: 'my summary',
channelData: {
notification: {
alert: true,
},
},
};
await turnContext.sendActivity(activity);
Результат:
Существует расширение команд для BobBuilder V4, которое в настоящее время находится в бета-версии, но, похоже, выполняет то, что вам нужно.Я полагаю, что причина, по которой вы не получали уведомления при использовании вышеупомянутого, заключается в том, что ваш бот создает новую цепочку ответов в канале, а не отвечает непосредственно пользователю.Я считаю, что вы можете сделать все это без расширения (путем ручного редактирования свойств действия / контекста), но расширение должно упростить его.
Вот код, который я использовал для получения рабочих уведомлений в канале:
В index.js
(или app.js
):
import * as teams from 'botbuilder-teams';
[...]
// Change existing to use "new teams.TeamsAdapter..."
const adapter = new teams.TeamsAdapter({
appId: endpointConfig.appId || process.env.microsoftAppID,
appPassword: endpointConfig.appPassword || process.env.microsoftAppPassword,
});
Куда бы вы ни отправляли сообщение:
import * as teams from 'botbuilder-teams';
import * as adaptiveCard from '../src/adaptiveCard.json';
...
const card = CardFactory.adaptiveCard(adaptiveCard);
const activity = {
attachments: [card],
text: 'Test Card',
summary: 'my summary',
channelData: {
notification: {
alert: true,
},
},
};
const adapter = context.adapter as teams.TeamsAdapter;
await adapter.createReplyChain(context, [activity]);
Упрощенный код
OPи я отправлял письма туда и обратно, и ключевая проблема в том, что ему нужно было добавить код trustServiceUrl
снизу.Обычно это проявляется с ошибкой 500, но в этом случае кажется, что она не создает уведомления. После значительного тестирования, вот все, что вам действительно нужно сделать, чтобы отправлять разные уведомления на разные каналы.Это в основном сводится к установке нескольких свойств turncontext.activity и доверию serviceUrl.Никаких трогательных идентификаторов действий или использования расширения команд вообще.Мой код ниже показывает, как я отправлял сообщения из эмулятора, которые затем могли отправлять карты на разные каналы Команд:
public onTurn = async (turnContext: TurnContext) => {
const dc = await this.dialogs.createContext(turnContext);
const dialogResult = await dc.continueDialog();
// Route message from Emulator to Teams Channel - I can send "1", "2", or "3" in emulator and bot will create message for Channel
let teamsChannel;
switch (turnContext.activity.text) {
// You can get teamsChannel IDs from turnContext.activity.channelData.channel.id
case '1':
teamsChannel = '19:8d60061c3d104exxxxxxxxxxxxxxxxxx@thread.skype';
break;
case '2':
teamsChannel = '19:0e477430ebad4exxxxxxxxxxxxxxxxxx@thread.skype';
break;
case '3':
teamsChannel = '19:55c1c5fb0d304exxxxxxxxxxxxxxxxx0@thread.skype';
break;
default:
break;
}
if (teamsChannel) {
const card = CardFactory.adaptiveCard(adaptiveCard);
const activity = {
attachments: [card],
summary: 'my summary',
text: 'Test Card',
};
const serviceUrl = 'https://smba.trafficmanager.net/amer/';
turnContext.activity.conversation.id = teamsChannel;
turnContext.activity.serviceUrl = serviceUrl;
// This ensures that your bot can send to Teams
MicrosoftAppCredentials.trustServiceUrl(serviceUrl);
await turnContext.sendActivity(activity);
} else {
[...Normal onTurn Code...]
await this.conversationState.saveChanges(turnContext);
}
Примечание. Чтобы получать уведомления, вы и ваши пользователи должны следоватьканал.