DirectLine API: определите новый ChannelId

Я создаю новый канал для интерфейса моего бота, используя пакет NodeJS SDK botframework-directlinejs. Этот канал будет обеспечивать некоторую настраиваемую функциональность обратного канала; однако моему боту необходимо знать, что диалог, с которым он общается, осуществляется через этот канал, прежде чем он сможет создать действие для его использования.

Из того, что я могу узнать из объект 'Activity' в 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 отображается как «прямая линия».

Выполнение той же операции в Fiddler в качестве сообщения https://directline.botframework.com/v3/directline/conversations/<conversationID>/activities дает такой же ответ.

Я подозреваю, что свойство channelId объекта Activity доступно только для чтения и что API добавляет это значение.

Можно ли установить собственный идентификатор канала?


person BM-    schedule 31.08.2018    source источник
comment
Я бы также согласился на способ программной идентификации «имени сайта» экземпляра DirectLine; это даст подходящий способ обойти это   -  person BM-    schedule 31.08.2018
comment
Да, это меня тоже беспокоит! Они предоставляют свойство, но бот получает directline. У меня есть несколько экземпляров прямой линии для разных целей. Каждого из них я идентифицирую по свойству user. Но это не лучший способ. Буду здесь присматривать, если будет подходящее разрешение.   -  person Master Chief    schedule 31.08.2018
comment
Как упоминал MasterChief, мы можем передавать информацию о пользовательском канале через свойство user или поле from действия, как это from: { id: 'Node test user', channelID: "myChannel" }. А потом мы можем получить его от activity.From.Properties["channelID"] в приложении-боте.   -  person Fei Han    schedule 31.08.2018
comment
Я использую TypeScript, поэтому, хотя я мог это сделать, вводимые пользователем данные не согласны с этим. Верно, я мог бы заставить его, как from: { ... } as User, но я бы предпочел более приемлемое решение, если смогу его найти. Мне пришло в голову использовать объект channelData в обоих направлениях (тем более, что он имеет тип any).   -  person BM-    schedule 31.08.2018
comment
Вы нашли для этого решение?   -  person Mumin Asaad    schedule 27.10.2019


Ответы (1)


Нет, установить идентификатор клиентского канала невозможно. Для каждого типа канала существует соответствующая служба коннектора. Если вы используете прямую линию, 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'));
person Eric Dahlvang    schedule 05.09.2018