Как получить уведомление, когда бот отправляет сообщение в Команды? - PullRequest
0 голосов
/ 19 февраля 2019

Я разработал бота для команд Microsoft, используя Microsoft Bot Framework v4 Nodejs SDK (botbuilder-sdk для nodejs).Мы реализовали бота таким образом, что, когда мы получаем данные с помощью вызова API REST от одного из наших CRM, эти данные публикуются на каналах команд Microsoft.Однако, когда я это делаю, мы не получаем уведомление на устройствах.Кто-нибудь сталкивался с такой проблемой?

Я изначально сохраняю состояние контекста.Каждый раз, когда мы получаем данные из CRM, я увеличиваю идентификатор активности сообщения (чтобы отправить его как новое сообщение, а не как ответ) и отправляю его в команды Microsoft с помощью context.sendActivity ().

enter image description here

Когда мы получаем эту адаптивную карту, мы не получаем уведомление в ленте активности или на любом из устройств.

Я прошел все шаги, как вы описали выше.Я также прошел шаги по устранению неполадок.Однако, это все еще не дает мне уведомление для карты.Однако, когда я начинаю разговор с ботом, я получаю уведомление, когда бот отвечает.

https://i.stack.imgur.com/Bi4fc.png

https://i.stack.imgur.com/ab6uP.png

На этом изображении я получаю уведомление при запуске бота TMS!сообщение.Однако я не получаю уведомления о следующих двух сообщениях.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Я прошел все шаги, как вы описали выше.Я также прошел шаги по устранению неполадок.Однако, это все еще не дает мне уведомление для карты.Однако, когда я начинаю разговор с ботом, я получаю уведомление, когда бот отвечает.

https://i.stack.imgur.com/Bi4fc.png

https://i.stack.imgur.com/ab6uP.png

На этом изображении я получаю уведомление при запуске TMS Bot!сообщение.Однако я не получаю уведомления о следующих двух сообщениях.

0 голосов
/ 07 марта 2019

Редактировать: OP и я обменялись несколькими письмами, чтобы получить ответ.В целом, этот ответ является хорошей информацией для проактивного обмена сообщениями в группах, но основной ответ содержится в последнем разделе, Упрощенный код.

Это длинный ответ, охватывающий многие области.просто потому, что я не на 100% уверен, что знаю, какого рода уведомление вы не получаете.

Устранение неполадок

  • Руководство по устранению неполадок
    • Обратите особое внимание на множество областей, где необходимо включить уведомления
      • В частности, пользователю может потребоваться «Следовать» и / или «Избирать» канал, чтобыполучать от него уведомления
  • Если у пользователя открыто настольное приложение, оно получит уведомление там и не получит его на свой телефон, если тольконеактивны в настольном приложении более 3 минут.В противном случае это скорее всего ошибка в командах.

Уведомления чата

Если вы следовали приведенному выше руководству по устранению неполадок, ваши пользователи должны получать уведомления в чате.Если нет, попробуйте обновить настольный или мобильный клиент MS Teams.Как упомянул @KyleDelaney, может быть полезно @ упомянуть пользователей и / или каналы

Уведомления ленты активности

Вы также можете создать Уведомления ленты активности .Суть в том, что вам нужно:

  1. Включить text и summary в сообщение
  2. Включить channelData, который устанавливает notifications.alert в истинное значение

Этот код выполнит следующее:

const msg = MessageFactory.text('my message');
msg.summary = 'my summary';
msg.channelData = {
    notification: {
        alert: true,
    },
};
return await dc.context.sendActivity(msg);

Результат:

enter image description here enter image description here

Примечание. Если ваш бот 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);

Результат:

enter image description here enter image description here

Использование расширения команд

Существует расширение команд для 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);
}

Примечание. Чтобы получать уведомления, вы и ваши пользователи должны следоватьканал.

...