【问题标题】:DirectLine API: Define a new ChannelIdDirectLine API:定义新的 ChannelId
【发布时间】:2018-09-06 01:39:21
【问题描述】:

我正在使用 botframework-directlinejs NodeJS SDK 为我的机器人前端实现一个新通道。该通道将提供一些自定义的反向通道功能;但是,我的机器人需要知道它正在与之通信的对话是通过这个渠道进行的,然后才能构建一个活动来使用它。

根据我从 API 中的 'Activity' object 收集到的信息,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)
);

确实向我的机器人发送消息“hi”,但 channelId 以“directline”的形式出现。

在 Fiddler 中执行与 https://directline.botframework.com/v3/directline/conversations/<conversationID>/activities 的帖子相同的操作具有相同的响应。

我怀疑 Activity 对象的“channelId”属性是只读的,API 会添加这个值。

是否可以设置频道的自定义ID?

【问题讨论】:

  • 我也接受一种以编程方式识别 DirectLine 实例的“站点名称”的方法;这将提供一个合适的技巧来解决这个问题
  • 是的,这也困扰着我!他们提供了一个属性,但机器人收到了directline。我有多个用于不同目的的直达实例。我使用user 属性识别它们中的每一个。但这不是最好的方法。如果有合适的解决方案,我会留意这里。
  • MasterChief 提到,我们可以通过user 属性或活动的from 字段传递自定义频道信息,例如from: { id: 'Node test user', channelID: "myChannel" }。然后我们可以从bot应用程序中的activity.From.Properties["channelID"]获取它。
  • 我正在使用 TypeScript,所以虽然我可以这样做,但用户类型不同意它。确实,我可以像from: { ... } as User 那样强制它,但如果我能找到一个更合适的解决方案,我会更喜欢它。我想到在两个方向上都使用channelData 对象(特别是因为它有any 类型)。
  • 你找到解决办法了吗?

标签: node.js botframework direct-line-botframework


【解决方案1】:

不,无法设置自定义频道 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'));

【讨论】:

    猜你喜欢
    • 2018-03-06
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    相关资源
    最近更新 更多