所以,
我进行了无数次搜索,阅读了有关该主题的所有内容,但我仍然失败了。我设法向用户发送了主动消息,在团队中回复了主题,等等。但是我无法在团队 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 /组时,该事件在您最初收到的事件中可用,并且您需要存储它们以备将来引用(不要像示例中那样对它们进行硬编码)。因此,没有单独的
createConversation
和sendActivity
,它们都在一个调用中。感谢希尔顿为您提供的时间,以及我对MS Docs的手有模糊的印象:)
希望这对别人有帮助
关于node.js - 将主动消息发送到团队中的 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60801497/