node.js - 将主动消息发送到团队中的 channel

标签 node.js botframework microsoft-teams

所以,

我进行了无数次搜索,阅读了有关该主题的所有内容,但我仍然失败了。我设法向用户发送了主动消息,在团队中回复了主题,等等。但是我无法在团队 channel 中发送主动消息(创建新帖子)。

是否有可用的示例(我找不到任何示例)?用于NodeJS的MS Docs似乎显示了一个向团队中的每个用户发送消息的示例,但没有向 channel 本身发送消息的示例。

我浏览了源代码,并将channelData硬编码为null内的botFrameworkAdapter.js,这只会增加困惑。

因此,基本代码是:

const builder = require('botbuilder');
const adapter = new builder.BotFrameworkAdapter({
    appId: 'XXX',
    appPassword: 'YYY'
});

const conversation = {
  channelData: {
    //I have all this (saved from event when bot joined the Team)
  },
  ...
  // WHAT THIS OBJECT NEEDS TO BE TO SEND A SIMPLE "HELLO" TO A CHANNEL?
  // I have all the d
};

adapter.createConversation(conversation, async (turnContext) => {
  turnContext.sendActivity('HELLO'); //This may or may not be needed?
});

有人用Node完成此操作吗?如果是这样,谁能给我展示一个有效的示例(带有正确构造的conversation对象)?

*编辑*

正如希尔顿在下面的答案中建议的那样,我尝试直接使用ConnectorClient,但它返回的资源不可用(/v3/conversations)

这是我正在使用的代码(实际上只是为了发送演示消息而已):
const path = require('path');
const { ConnectorClient, MicrosoftAppCredentials } = require('botframework-connector');

const ENV_FILE = path.join(__dirname, '.env');
require('dotenv').config({ path: ENV_FILE });

const serviceUrl = 'https://smba.trafficmanager.net/emea/';

async function sendToChannel() {
    MicrosoftAppCredentials.trustServiceUrl(serviceUrl);

    var credentials = new MicrosoftAppCredentials(process.env.MicrosoftAppId, process.env.MicrosoftAppPassword);
    var client = new ConnectorClient(credentials, { baseUri: serviceUrl });

    var conversationResponse = await client.conversations.createConversation({
        bot: {
            id: process.env.MicrosoftAppId,
            name: process.env.BotName
        },
        isGroup: true,
        conversationType: "channel",
        id: "19:XXX@thread.tacv2"
    });

    var acivityResponse = await client.conversations.sendToConversation(conversationResponse.id, {
        type: 'message',
        from: { id: process.env.MicrosoftAppId },
        text: 'This a message from Bot Connector Client (NodeJS)'
    });

}

sendToChannel();

我究竟做错了什么?

最佳答案

好的,这就是我的工作方式。我将其张贴在这里以供将来引用。

免责声明:我仍然不知道如何像我最初的问题中所述将它与botbuilder一起使用,并且此答案将使用ConnectorClient,这是可以接受的(至少对我而言)。根据希尔顿的指示和我之前看到的GitHub问题(https://github.com/OfficeDev/BotBuilder-MicrosoftTeams/issues/162#issuecomment-434978847),我终于使它工作了。 MS Documentation并不是那么有用,因为它们始终使用context变量,该变量在Bot响应消息或事件时可用,并且在Bot运行时在内部记录这些上下文。但是,如果您的Bot由于某种原因而重新启动,或者您想要将数据存储在数据库中以供以后使用,则可以采用这种方法。

因此,代码(NodeJS):

const path = require('path');
const { ConnectorClient, MicrosoftAppCredentials } = require('botframework-connector');

const ENV_FILE = path.join(__dirname, '.env');
require('dotenv').config({ path: ENV_FILE });

const serviceUrl = 'https://smba.trafficmanager.net/emea/';

async function sendToChannel() {
    MicrosoftAppCredentials.trustServiceUrl(serviceUrl);

    var credentials = new MicrosoftAppCredentials(process.env.MicrosoftAppId, process.env.MicrosoftAppPassword);
    var client = new ConnectorClient(credentials, { baseUri: serviceUrl });

    var conversationResponse = await client.conversations.createConversation({
        bot: {
            id: process.env.MicrosoftAppId,
            name: process.env.BotName
        },
        isGroup: true,
        conversationType: "channel",
        channelData: {
            channel: { id: "19:XXX@thread.tacv2" }
        },
        activity: {
            type: 'message',
            text: 'This a message from Bot Connector Client (NodeJS)'
        }
    });

}

sendToChannel();

注意:正如希尔顿指出的那样,还需要从数据库中加载serviceUrl以及 channel ID。当您将Bot与您还将需要的channelId一起添加到团队/ channel /组时,该事件在您最初收到的事件中可用,并且您需要存储它们以备将来引用(不要像示例中那样对它们进行硬编码)。

因此,没有单独的createConversationsendActivity,它们都在一个调用中。

感谢希尔顿为您提供的时间,以及我对MS Docs的手有模糊的印象:)

希望这对别人有帮助

关于node.js - 将主动消息发送到团队中的 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60801497/

相关文章:

sql-server - Node Express 多个 SQL 服务器连接

botframework - 隐藏 Facebook Messenger Bot 中的软键盘

azure - 如何发布 Azure 机器人

java - 我们能否将测试结果 TestNG 报告或范围报告集成到 Microsoft 团队

microsoft-teams:我们如何更新所有用户的应用程序?缺乏功能加上问题

Node.js 服务器监听 0.0.0.0 和 localhost 上的同一端口,没有错误

node.js - 容器 Circleci/node :10. 14-浏览器 - 错误 : euid ! = 0,目录/tmp/.X11-unix 将不会被创建

node.js - 使用 Angular 和 NodeMailer 发送电子邮件

azure - Microsoft 应用程序 ID 和密码有何用途?

Node.js MS Teams 移动应用程序无法使用日期输入呈现 O365 连接器卡