Dam*_*vic 6 node.js botframework microsoft-teams
所以,
我进行了广泛的搜索,阅读了我能找到的关于该主题的所有内容,但我仍然没有做到这一点。我已设法向用户发送主动消息、回复团队中的主题等,但我无法在团队频道中发送主动消息(创建新帖子)。
是否有可用的示例(我找不到任何示例)?NodeJS 的 MS Docs 似乎显示了向团队中的每个用户发送消息的示例,但没有显示通道本身。
我探索了源代码,并channelData硬编码到nullinside 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?
});
Run Code Online (Sandbox Code Playgroud)
有没有人用 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();
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
好的,所以,这就是我让它工作的方式。我把它贴在这里以供将来参考。
免责声明:我仍然不知道如何使用它,botbuilder正如我最初的问题所问的那样,这个答案将使用ConnectorClient,这是可以接受的(至少对我来说)。根据希尔顿的指示和我之前看到的 GitHub 问题( https://github.com/OfficeDev/BotBuilder-MicrosoftTeams/issues/162#issuecomment-434978847),我终于让它工作了。MS 文档没有那么有用,因为它们总是使用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();
Run Code Online (Sandbox Code Playgroud)
注意:正如希尔顿指出的那样,serviceUrl还需要从您的数据库中加载,以及频道 ID。当您的机器人被添加到团队/频道/组时,您最初收到的活动中可用channelId,您还需要这些活动,并且您需要存储它们以备将来参考(不要像示例中那样对它们进行硬编码)。
因此,没有单独的createConversation和sendActivity,一切都在一次调用中。
感谢希尔顿您的时间,以及我手的模糊图像 给 MS Docs :)
希望这对其他人有帮助
| 归档时间: |
|
| 查看次数: |
1575 次 |
| 最近记录: |