Node.js DirectLine API:定义新的ChannelId
我正在使用botframework directlinejs NodeJS SDK为我的机器人前端实现一个新通道。该频道将提供一些定制的后台频道功能;但是,我的bot需要知道它正在与之通信的会话是通过此通道进行的,然后才能构建活动来使用它 我可以从API中的中收集到,Node.js DirectLine API:定义新的ChannelId,node.js,botframework,direct-line-botframework,Node.js,Botframework,Direct Line Botframework,我正在使用botframework directlinejs NodeJS SDK为我的机器人前端实现一个新通道。该频道将提供一些定制的后台频道功能;但是,我的bot需要知道它正在与之通信的会话是通过此通道进行的,然后才能构建活动来使用它 我可以从API中的中收集到,channelId字段应该由通道设置 但是, myChannel.postActivity({ type: 'message', text: 'hi', from: { id: "Node t
channelId
字段应该由通道设置
但是,
myChannel.postActivity({
type: 'message',
text: 'hi',
from: {
id: "Node test user",
},
channelId: 'myChannel'
}).subscribe(
id => console.log("Posted activity, assigned ID ", id),
error => console.log("Error posting activity", error)
);
确实会向我的机器人发送消息“嗨”,但channelId显示为“directline”
在Fiddler中执行与发送到https://directline.botframework.com/v3/directline/conversations//activities
具有相同的响应
我怀疑Activity对象的“channelId”属性是只读的,并且API添加了这个值
是否可以设置频道的自定义id?否,无法设置自定义频道id。每个频道类型都有相应的连接器服务。如果您使用的是Direct Line,channelId应该是directline 您可以通过以下方式通过通道数据发送自定义信息:
BotChat.App({
botConnection: Object.assign({}, dl, {
postActivity: activity => {
var newActivity = Object.assign({}, activity, { channelData: { "MyKey": "MyValue" } });
return dl.postActivity(newActivity);
}
}),
bot: bot,
user: user,
resize: 'detect',
}, document.getElementById('bot'));
我还接受一种以编程方式标识DirectLine实例的“站点名称”的方法;这将提供一个合适的黑客绕过这是的,这也让我讨厌!它们提供一个属性,但bot接收
directline
。我有多个用于不同目的的directline实例。我使用user
属性来识别它们。但这不是最好的办法。如果有合适的解决方案,我会在这里留心。正如MasterChief提到的,我们可以通过user
属性或从活动的字段传递自定义频道信息,如以下从:{id:'Node test user',channelID:'myChannel}
。然后我们可以从bot应用程序中的activity.from.Properties[“channelID”]
中获取它。我使用的是TypeScript,所以虽然我可以这样做,但用户键入的内容不同意它。诚然,我可以像从:{…}作为用户一样强制它,但如果我能找到一个更令人满意的解决方案,我更喜欢它。我突然想到在两个方向上使用channelData
对象(特别是因为它的类型为any
)。您找到解决方案了吗?