聊天机器人未在 Microsoft Teams 中发回消息

2024-04-20

对于一个天蓝色的聊天机器人,我希望它在回答后问我一个简单的问题,这样我就可以提供反馈作为回报。 我正在使用HeroCard class.

dialog

private async Task ShowWeatherResult(IDialogContext context, LuisResult result)
{
    bool found = false;
    foreach (var entity in result.Entities)
    {
        if (entity.Type.Equals(Entity_Location))
        {
            WeatherAPI weather = new WeatherAPI(entity.Entity);
            found = true;
            await context.PostAsync(weather.ForecastReport());
            await Task.Delay(500);

            // ask for happiness
            Attachment attachment = new Attachment()
            {
                ContentType = HeroCard.ContentType,
                Content = CardsBuilder.CreateHappinessCard()
            };
            var reply = context.MakeMessage();
            reply.Attachments.Add(attachment);
            await context.PostAsync(reply, CancellationToken.None);

            context.Wait(MessageReceivedAsync);
        }
    }
    if (!found)
    {
        await context.PostAsync($"I don't speak human fluently, try another question asking for a specific city!");
        context.Wait(MessageReceived);
    }
}


public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
    var message = await result;

    if (message.Text != null)
    {
        //
        var happiness = new HappinessAPI();

        // Got an Action Submit
        string value = message.Text;
        //string submitType = value.Type.ToString();
        switch (value)
        {
            case "ShowGif":
                await context.PostAsync(happiness.ShowGif(context), CancellationToken.None);
                await Task.Delay(500);
                break;
            case "HappinessSearch":
                await context.PostAsync(happiness.GetJoke(context), CancellationToken.None);
                await Task.Delay(500);
                break;
            default:
                break;
        }
    }

    context.Wait(MessageReceived);
}

赫多卡

    internal static HeroCard CreateHappinessCard()
    {
        HeroCard card = new HeroCard()
        {
            Title = "Hi!",
            Text = "Are you happy?",
            Buttons = new List<CardAction>()
            {
                new CardAction()
                {
                    Title = "Yes",
                    Text = "Yes",
                    DisplayText = "Yes",
                    Type = ActionTypes.PostBack,
                    Value = "ShowGif"
                },
                new CardAction()
                {
                    Title = "Meh...",
                    Text ="No",
                    DisplayText = "Meh...",
                    Type = ActionTypes.PostBack,
                    Value = "HappinessSearch"
                }
            }

        };

        return card;
    }

幸福API

public class HappinessAPI
{
    internal IMessageActivity ShowGif(IDialogContext context)
    {
        Attachment attachment = new Attachment()
        {
            ContentType = HeroCard.ContentType,
            Content = new HeroCard()
            {
                Images = new List<CardImage>()
                {
                    new CardImage("https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/220px-Smiley.svg.png")
                }
            }
        };
        var reply = context.MakeMessage();
        reply.Attachments.Add(attachment);

        return reply;
    }

    internal IMessageActivity GetJoke(IDialogContext context)
    {
        var request = WebRequest.Create("http://api.icndb.com/jokes/random");
        request.ContentType = "application/json; charset=utf-8";
        string text;
        var response = (HttpWebResponse)request.GetResponse();

        using (var sr = new StreamReader(response.GetResponseStream()))
        {
            text = sr.ReadToEnd();
        }
        var reply = context.MakeMessage();
        reply.Text = (string)(JObject.Parse(text))["value"]["joke"];

        return reply;
    }
}

事实是,它在使用 AzurePortal 中的 WebChat 进行测试时可以正常工作,但在 Microsoft 团队中却无法对其问题进行回复。

Sample: Works in Webchat:

我:法兰克福的天气

机器人:“很冷……无论如何”

机器人:你快乐吗?

我:点击“是/否”

Bot: Sends a joke or a smiley enter image description here

Doesn't work in Microsoft Teams

Everything is ok until I click "yes/no", then it just tris to do something(the "is typing..." appears but after that, nothing happens. enter image description here

EDIT

我在 Microsoft Teams 中使用聊天机器人时看到,当我单击英雄卡时,聊天中会写入一条消息,但实际上不应该,因为它被设置为 ActionTypes.Postback

EDIT 2

HeroCard 现在看起来像这样:

    internal static HeroCard CreateHappinessCard()
    {
        HeroCard card = new HeroCard()
        {
            Title = "Hi!",
            Text = "Are you happy?",
            Buttons = new List<CardAction>()
            {
                new CardAction()
                {
                    Title = "Yes",
                    Text = "ShowGif",
                    //DisplayText = null,
                    Type = ActionTypes.MessageBack,
                    Value= "{\"action\": \"ShowGif\" }"
                },
                new CardAction()
                {
                    Title = "Meh...",
                    Text ="HappinessSearch",
                    //DisplayText = null,
                    Type = ActionTypes.MessageBack,
                    Value = "{\"action\": \"HappinessSearch\" }"
                }
            }

        };

        return card;
    }
}

但仍然不起作用。没有消息发送回机器人。如果我使用imBack键入它,但该消息出现在聊天中,我不想要什么messageBack应该可以工作。

EDIT 3按照提供的代码

dialog

    private async Task ShowLuisResult(IDialogContext context, LuisResult result)
    {
        await context.PostAsync($"You have reached {result.Intents[0].Intent}. You said: {result.Query}");

        context.Call(new HeroCardDialog(), MessageReceivedAsync);
    }

    public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    {
        var message = await result;

        if (message != null)
        {
            //

        }

        //context.Wait(MessageReceived);
        context.Done<object>(null);
    }

英雄卡对话框

public class HeroCardDialog : IDialog<object>
{
    public async Task StartAsync(IDialogContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        //Set the Last Dialog in Conversation Data
        context.UserData.SetValue("HeroCardId", "HerdoCard Dialog");

        var message = context.MakeMessage();
        var attachment = GetHeroCard();

        message.Attachments.Add(attachment);

        await context.PostAsync((message));

        context.Done<object>(null);
    }

    private static Attachment GetHeroCard()
    {
        var heroCard = new HeroCard()
        {
            Title = "Hi!",
            Text = "Are you happy?",
            Buttons = new List<CardAction>()
                {
                    new CardAction()
                    {
                        Title = "Yes",
                        Text = "ShowGif",
                        DisplayText = null,
                        Type = ActionTypes.MessageBack,
                        Value= "{\"msgback\" : \"ShowGif\"}"
                    },
                    new CardAction()
                    {
                        Title = "Meh...",
                        Text ="HappinessSearch",
                        DisplayText = null,
                        Type = ActionTypes.MessageBack,
                        Value= "{\"msgback\" : \"HappinessSearch\"}"
                    }
                }

        };

        return heroCard.ToAttachment();
    }
}

PostBackMicrosoft Teams 不支持。请检查以下列表支持的按钮活动 https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/bots/bots-cards#buttons在微软团队中。

我们建议您使用messageBack因为您可以创建完全自定义的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聊天机器人未在 Microsoft Teams 中发回消息 的相关文章

随机推荐

  • 为什么这个 css 动画无限自动播放轮播会在项目重置时跳转?

    我正在努力根据此处的示例创建无限自动播放轮播 https codepen io jackoliver pen qVbQqW https codepen io jackoliver pen qVbQqW 请注意 codepen 示例是多么流畅
  • java jar 的清单属性

    在您的帮助下 我完成了我的第一个 Java 项目 现在我想创建一个 jar 并从 jar 运行应用程序 Java 项目 它是一个普通的控制台应用程序 它有另一个项目 控制台应用程序 作为依赖项 我通过右键单击 导出 创建一个 jar 使用
  • 使用 C# 运行 T4 模板

    我有 T4 模板 mycode tt 它生成一个 cs 文件 我通常右键单击 tt 文件并选择 RunCustomTool 它会在内部获取 xml 文件并为我生成代码 现在我想使用 C Windows 应用程序运行自定义工具 因此 单击按钮
  • 如果您无法控制类,如何模拟类中的方法?

    我使用 Xunit 和 Moq 进行单元测试 到目前为止 我能够成功地模拟和测试接口中的方法 但是我应该如何模拟和测试我无法控制的类的方法 该类没有接口 方法也不是虚拟的 我研究了 Type Mock Isolator 但我无法使其工作 而
  • 订购 ActiveRecord 关系对象

    我有一个名为的 ActiveRecord 对象contact 它有一个关系叫做profiles 这些配置文件具有 url 属性 配置文件应按 url 按字母顺序排序 我试过了sort by也order但我收到此错误 contact prof
  • 使用 Ajax 将 JSON 发送到 WCF 3.5

    我在将 JSON 传递给 Weight 方法时遇到问题 我不断得到HTTP 1 1 415 Cannot process the message because the content type application x www form
  • 将照片上传到 Google Photos API 不返回上传令牌

    我正在使用 2018 版 Google Photos API 来上传图像和媒体 如下所述 上传字节 https developers google com photos library guides upload media uploadi
  • 嵌入式 Windows XP 中的网络接口设置

    给定设备描述 即出现在 设备属性 gt 连接使用 文本框中的字符串 我们如何获取网络接口名称 即出现在 网络连接 对话框中的名称 我们必须使用纯 C C 语言 或者通过一些标准命令行工具 例如 netsh ipconfig 或者两者的组合来
  • 数字中的下划线是什么意思? [复制]

    这个问题在这里已经有答案了 我想知道为什么以下变量被视为数字 a 1 000 000 print a 1000000 不应该print a return 1 000 000 使用 Python 3 6 以及PEP 515 https www
  • AspNetCore 抽象无法加载

    I use 适用于 Visual Studio 的 ASP NET Core Angular 2 模板 http blog stevensanderson com 2016 10 04 angular2 template for visua
  • 从 User.rb 模型访问 ApplicationHelper

    这是一些不起作用的简单代码 module ApplicationHelper def industries industries Agriculture Food etc end end class User lt ActiveRecord
  • Oracle Apex - REST 数据源 - 嵌套 JSON 数组 - 触发两个表 - 删除函数错误 ORA-04091

    这个问题是另一个问题的后续所以问题 https stackoverflow com questions 75219903 oracle apex rest data source nested json array trigger two
  • '类型'从不'上不存在属性

    这类似于 40796374 https stackoverflow com questions 40796374 property x does not exist on type never但这是关于类型的 而我正在使用接口 给出下面的代
  • 使用 LifecycleObserver 的生命周期感知组件如何感知屏幕方向的变化

    制作生命周期感知组件非常简单LifecycleObserver例如暂停和停止MediaPlayer当用户离开屏幕时 但有什么办法让我知道生命周期是否正在经历onPause onStop等等只是因为配置发生了变化 在这种情况下 我不会对Med
  • 较大数的非不同质因数

    我编写并使用这个函数来生成数字的质因数 import numpy as np from math import sqrt def primesfrom3to n Returns a array of primes p lt n assert
  • QML GridLayout 跨度

    如何使洋红色矩形比红色矩形短 6 倍 GridLayout id gridLayout anchors fill parent flow GridLayout TopToBottom Rectangle color magenta Layo
  • 如何在实例化时将值插入到 C# 字典中?

    有谁知道是否有办法在创建 C 字典时将值插入到它中 我可以 但不想这样做dict Add int string 对于每个项目 如果有更有效的东西 例如 Dictionary
  • 使用正则表达式验证电子邮件地址

    我刚刚开始学习 PHP 和 HTML 编码 并查看了一些有关正则表达式的教程 但很难理解这些含义 我很感激任何帮助 例如 我想验证电子邮件地址 电子邮件受保护 cdn cgi l email protection 我从代码开始 收到消息无效
  • 如何在选择查询中创建新列

    在 MS Access 中 我想将新列插入到选择查询的返回结果中 新列的每一行都具有相同的值 例如 我的选择返回列 A B 我希望 C 成为选择查询创建的新列 A B C a1 b1 c a2 b2 c a3 b3 c select A B
  • 聊天机器人未在 Microsoft Teams 中发回消息

    对于一个天蓝色的聊天机器人 我希望它在回答后问我一个简单的问题 这样我就可以提供反馈作为回报 我正在使用HeroCard class dialog private async Task ShowWeatherResult IDialogCo