Команды вернут пустую строку после выбора действия карты - PullRequest
0 голосов
/ 23 января 2020

Я отправлю адаптивную карту пользователю с двумя действиями, но когда я выберу действие, на сервер будет отправлена ​​пустая строка. Из-за этого бот не может понять, что хочет пользователь.

В качестве дополнительной проверки я повторяю все, что пользователь отправляет в бот. Есть пустой или пустой чек.

Здесь вы говорите в командах:

Здесь разговор в эмулятор:

Вот мой код для создания действия:

Activity activity = new Activity()
{
    Attachments = new List<Attachment>()
    {
        new Attachment()
        {
            ContentType = AdaptiveCard.ContentType,
            Content = new AdaptiveCard("1.0")
            {
                Body = new List<AdaptiveElement>()
                {
                    new AdaptiveTextBlock()
                    {
                        Text = $"Lorem reminder",
                        Size = AdaptiveTextSize.Large
                    },
                    new AdaptiveTextBlock()
                    {
                        Text = $"Hi {userName},\r\nYou've missed some lorem ipsum dolor sit amet:\r\n- **consectetur:** Ut porttitor\r\nChoose an action from below to add them."
                   }
               },
               Actions = new List<AdaptiveAction>()
               {
                   CreateCardAction("First action"),
                   CreateCardAction("Second action")
               }
           }
       }
   },
   From = turnContext.Activity.Recipient,
   Recipient = turnContext.Activity.From,
   Type = "message",
   Conversation = turnContext.Activity.Conversation
};
private AdaptiveAction CreateCardAction(string text)
{
    return new AdaptiveSubmitAction()
    {
        Title = text,
        Data = text
    };
}

Использование типа imBack для AdaptiveSubmitAction (например, предлагаемые действия ) здесь не работают. Смотрите скриншот с эмулятора ниже.

Ответы [ 2 ]

1 голос
/ 23 января 2020

Если вы запускаете это локально, используя NGrok, стоит взглянуть на полезную нагрузку в инспекторе ngrok, чтобы увидеть, что отправляется обратно (http://localhost: 4040 / ).

По сути, «Данные» - это просто тип «объект», поэтому вы можете отправлять туда все, что захотите. Скажем, например, что вы хотите, чтобы он отправлял обратно значение «id» - просто присоедините его как свойство «Data», например:

private AdaptiveAction CreateCardAction(string text, string id)
{
    return new AdaptiveSubmitAction()
    {
        Title = text,
        Data = id
    };
}

В качестве альтернативы, это может быть более сложный объект, например:

public class Foo {
   public string something { get; set; }
   public string id{ get; set; }
}

    private AdaptiveAction CreateCardAction(string text, Foo foo)
    {
        return new AdaptiveSubmitAction()
        {
            Title = text,
            Data = foo
        };
    }

, затем при поступлении сообщения на вашем OnTurnAsyn c вы можете проверить, содержит ли Turncontext.Activity.Value что-то.

0 голосов
/ 06 апреля 2020

На самом деле, кажется, что Команды удаляют простую строку "Data", свойство (которое отлично работает на канале DirectLine). Если вы можете заменить простую строку на JObject, проблема решена.

Если - по какой-либо причине - вы хотите, чтобы ваш бот действовал как «мост» и направлял на Команды канал AdaptiveCard со свойством «Данные» в виде простой строки, поступающей из другого канала (т. Е. DirectLine) чем обернуть содержимое строки «Данные» в объект JObject может спасти ваш день.

...