首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bot框架-没有按钮的imBack或postBack消息?有可能吗?

Bot框架-没有按钮的imBack或postBack消息?有可能吗?
EN

Stack Overflow用户
提问于 2017-12-07 05:20:22
回答 2查看 2K关注 0票数 2

我正在尝试显示一张卡片(或链接列表)给我的Skype、Slack或Messenger用户,其中包括一些postBack操作。

Herocard工作得很好,它们用文本显示按钮,如本例所示:

代码语言:javascript
复制
    IMessageActivity replyMessage = context.MakeMessage();
    replyMessage.Attachments.Add(
    new HeroCard
    {
        Subtitle = "Settings",
        Buttons = new List<CardAction> {
            new CardAction(ActionTypes.ImBack, $"Spell-check {spellcheckst}", value: $"Set Spell-check setting {spellcheckst}", text: $"Spell-check {spellcheckst}", displayText: $"Spell-check {spellcheckst}"),
            new CardAction(ActionTypes.ImBack, $"Small-talk {smalltalkst}", value: $"Set Small-talk setting {smalltalkst}", text: $"Small-talk {smalltalkst}", displayText: $"Small-talk {smalltalkst}")

        }
    }.ToAttachment()
    );
    await context.PostAsync(replyMessage);

但是按钮占用了大量的屏幕房地产,很多时候它们的标题都被删减了。

是否有一种不显示按钮而触发postBack或imBack卡操作的方法。下面是一个示例场景,当用户请求帮助时,Bot将显示命令列表:

  1. 添加网页Try Me
  2. 删除网页Try Me
  3. 显示帮助Try Me
  4. 等。

“试试看我”的链接会和上面的按钮一样,postBack到机器人。

这有可能做到吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-07 12:58:23

事实上,大按钮名会造成一个问题,它看起来就像陌生的卡片。取而代之的是,你可以用旋转木马卡来代替它。将下面的代码放在您的对话框中并检查。我正在做这件事,而且它在起作用。

代码语言:javascript
复制
 public Task StartAsync(IDialogContext context)
        {
            context.Wait(MessageReceivedAsync);

            return Task.CompletedTask;
        }
        public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
        {
            var reply = context.MakeMessage();

            reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
            reply.Attachments = GetCardsAttachments();

            await context.PostAsync(reply);

            context.Wait(this.MessageReceivedAsync);
        }

        private static IList<Attachment> GetCardsAttachments()
        {
            return new List<Attachment>()
            {
                GetHeroCard(
                    "Add a webpage",
                    "",
                    "",
                    new CardImage(url: "https://cdn.dribbble.com/users/22691/screenshots/1958250/attachments/340010/Button_800x600.gif?sz=328"),
                    new CardAction(ActionTypes.ImBack, "Add a webpage", value: "Add a webpage")),
                GetHeroCard(
                    "delete a webpage",
                    "",
                    "",
                    new CardImage(url: "https://cdn.dribbble.com/users/22691/screenshots/1958250/attachments/340010/Button_800x600.gif?sz=328"),
                    new CardAction(ActionTypes.ImBack, "delete a webpage", value: "delete a webpage")),
                GetHeroCard(
                    "Display help",
                    "",
                    "",
                    new CardImage(url: "https://cdn.dribbble.com/users/22691/screenshots/1958250/attachments/340010/Button_800x600.gif?sz=328"),
                    new CardAction(ActionTypes.ImBack, "Display help", value: "Display help")),
                GetHeroCard(
                    "etc",
                    "",
                    "",
                    new CardImage(url: "https://cdn.dribbble.com/users/22691/screenshots/1958250/attachments/340010/Button_800x600.gif?sz=328"),
                    new CardAction(ActionTypes.ImBack, "etc", value: "etc")),

            };
        }

        private static Attachment GetHeroCard(string title, string subtitle, string text, CardImage cardImage, CardAction cardAction)
        {
            var heroCard = new HeroCard
            {
                Title = title,
                Subtitle = subtitle,
                Text = text,
                Images = new List<CardImage>() { cardImage },
                Buttons = new List<CardAction>() { cardAction },
            };

            return heroCard.ToAttachment();
        }

我希望这能帮助你解决你的问题。

下面是供您参考的屏幕截图。

票数 0
EN

Stack Overflow用户

发布于 2017-12-07 19:07:13

使用按钮,您可以将标题设置为显示文本,并将值设置为回发所需的值。然后,你可以在按钮上方放上一小块文字,上面写着“点击任意一个按钮来尝试”。

我在信使中使用这种方法,使我的按钮文本简短,但按钮的“有效载荷”(或值)设置为更丰富的描述。其次,该值不显示给用户,而是由消息活动的通道数据部分中的框架接收。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47688102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档