Добавление переменных в ответ Directline API в Botframework

Я успешно отправил запрос к Botframework Directline API и получил этот пример ответа в формате json:

{
  "type": "message",
  "id": "XXXXXXXXXXXXXXXX|0000022",
  "timestamp": "2019-10-02T21:09:25.001296Z",
  "channelId": "directline",
  "from": {
    "id": "LuchoBotV1",
    "name": "LuchoBotV1"
  },
  "conversation": {
    "id": "XXXXXXXXXXXXXXXXX"
  },
  "text": "Hay algo mas en que pueda ayudarte?",
  "speak": "Hay algo mas en que pueda ayudarte?",
  "inputHint": "expectingInput",
  "replyToId": "XXXXXXXXXXXXXXXX|0000020"
}

Теперь я работаю в диалоге-водопаде, который запрашивает у пользователя некоторую личную информацию (лицензия, адрес, продажи), и я хочу добавить эти данные в ответ и получить ответ json следующим образом:

{
  "type": "message",
  "id": "XXXXXXXXXXXXXXXX|0000022",
  ...
  "context": {address: "Street 123", sales: "5000"}
}

Я хочу знать, возможно ли включить эту информацию в ответ API. Я искал в документации, но ничего не нашел, кроме как отправить текст.

await stepContext.context.sendActivity(messageText, null, InputHints.IgnoringInput);

person Diego Lopez    schedule 02.10.2019    source источник


Ответы (2)


Вы можете добавить контекст к данным канала активности.

BotFramework SDK v4 (узел)

await stepContext.context.sendActivity({
   text: 'Hello, World!',
   channelData: {
     context: {address: 'Street 123', sales: '5000'}
   }
});

Ожидаемый результат

{
  "type": "message",
  "id": "XXXXXXXXXXXXXXXX|XXXXXX",
  ...
  "text": "Hello, World!",
  "channelData": {
    "context": {"address": "Street 123", "sales": "5000"}
  }
}

Надеюсь это поможет!

person tdurnford    schedule 03.10.2019
comment
Я попробовал ваше решение: return await stepContext.context.sendActivity({text: msg,context: result});, но ответ json тот же. Может быть, какая-то часть кода фильтрует атрибуты, отличные от текста? - person Diego Lopez; 03.10.2019
comment
Извините, в моем первоначальном ответе была ошибка. Вам нужно поместить контекст в данные канала активности. Я обновил свой ответ, чтобы отразить изменение. - person tdurnford; 03.10.2019

Вы пытались отправить переменную, в которой хранится информация о пользователе?

Скажем, у вас есть:

var name = 'Anna';

Вы отправляете его вместо текста:

await stepContext.context.sendActivity(name);

Ожидаемый результат:

{
  "type": "message",
  "id": "XXXXXXXXXXXXXXXX|XXXXXX",
  ...
  "text": "Anna"
}
person Beast    schedule 03.10.2019
comment
Две проблемы с этим подходом. Во-первых, сложно отличить обычный текстовый ответ бота от контекстной переменной. Во-вторых, ответ должен быть объектом, а не строкой. - person Diego Lopez; 03.10.2019