Node.js DirectLine API:定义新的ChannelId

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

我正在使用botframework directlinejs NodeJS SDK为我的机器人前端实现一个新通道。该频道将提供一些定制的后台频道功能;但是,我的bot需要知道它正在与之通信的会话是通过此通道进行的,然后才能构建活动来使用它

我可以从API中的中收集到,
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
)。您找到解决方案了吗?