【问题标题】:Microsoft Teams: Message Extension fails in my loaded app (zip): 'Unable to reach app'Microsoft Teams:我加载的应用程序 (zip) 中的消息扩展失败:“无法访问应用程序”
【发布时间】:2019-09-03 15:16:53
【问题描述】:

我正在使用 Microsoft TEAMS 应用程序,我需要向我的应用程序添加调用。我的问题:

-------------- 问题 1 --------------

我正在尝试使用 TEAMS 应用程序中的 HelloWorld Web 应用程序 (HW),但出现“无法访问应用程序”消息。

我的硬件已编译(Visual Studio 2017 中的 Microsoft.Teams.Samples.HelloWorld)在本地运行(浏览器在 http://localhost:3333/ 中打开)

使用 ngrok 我可以远程访问 (https://5d4c6462.ngrok.io) ngrok http 3333 -host-header=localhost:3333

此硬件客户端生成一个包含 2 个 .png 文件和 manifest.json 文件的 .zip 文件

然后在我的 TEAMS 应用程序(左侧面板)中,我转到应用程序-“上传自定义应用程序”,浏览并获取该 .zip。我的用户可以看到我的硬件

在“团队”选项卡中,我选择了一个团队 (MyTeam),在“管理团队”-应用程序中,我安装了硬件应用程序(“更多应用程序”按钮),但对“机器人”/“选项卡”和“不执行任何操作”消息传递选项(所有选项都有一个似乎什么都不做的“设置”按钮)

之后,在 MyTeam 中,我可以在编写 @hello 时看到硬件应用程序,并且可以使用来自 composeExtensions (manifest) 的命令

但是当我输入文本时,会显示“无法访问应用程序”

我认为我的问题出在清单文件中,但我不知道在哪里...与 ID 相关的任何内容?真的没有消息扩展 URL 可以访问我的应用程序...

在我的可视化项目“装配信息”中,我有一个 GUID 值:“f543a88...”

我在清单中使用了这个值,用于“id”,以及“bots”和“composeExtensions”中的“botId” 清单文件中的其余值是默认值

-------------- 问题 2 --------------

我有一些概念没有真正理解,即使在阅读了应用程序机器人文档之后...

  • 如果我有一个应用程序(例如以前的 Hello World),我可以从 Teams 应用程序上传它(如上所述)。它可以向我的应用程序发送消息(或者它会在找到 Web 应用程序时发送)
  • 但是我如何使用正在运行的机器人来做到这一点?例如来自 .NET 框架示例(例如 csharp_dotnetcore 解决方案中的 EchoBot 项目)?我的意思是该项目没有要上传的清单,其中命令是可见的 TEAMS 来显示...我必须从 TEAMS 创建一个应用程序并在创建过程中加载这个机器人吗?
  • 在硬件示例应用程序中,我有一个 MessagesController : ApiController 来接收消息,我可以检查它是否是一个消息扩展

    public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
    {
        using (var connector = new ConnectorClient(new Uri(activity.ServiceUrl)))
        {
            if (activity.IsComposeExtensionQuery())
    

但是我可以在 BOT 中检查吗? AsFarAsIKnow,ActivityHandler用于处理接收到的消息,其方法(OnMessageActivityAsync, ...)

  • 在像硬件示例这样的应用程序中,是否可以在收到文本时返回比文本更复杂的内容?例如,一张卡片

  • 在应用程序清单文件中,“composeExtensions”有“命令”,其中需要参数(可以使用不同的类型:文本、日期等)但是是否可以创建不带参数的命令?我的意思是也许我只是想向我的应用程序发送一个命令

对不起,如果我说什么毫无意义的话,我真的是 TEAMS 应用程序/机器人的新手......

有什么帮助吗?

谢谢, 迭戈

【问题讨论】:

  • 您找到问题所在了吗?我正在尝试同样的事情,它表明该应用程序无法访问。 @diego

标签: microsoft-teams


【解决方案1】:

在尝试让示例机器人在 C# Hello World Teams 演示 (https://github.com/OfficeDev/msteams-samples-hello-world-csharp) 中工作时搜索类似问题,这一点来自上述@Diego 的回复之一:

c。我在清单中的哪里设置密码?我看不到那个地方

让我意识到,尽管如上所述,我在 manifest.json 中输入了 botid,但必须在 appsettings.json 文件中输入 bot 密码。

【讨论】:

    【解决方案2】:

    @Deigo

    关于问题1:

    您是否创建了自己的机器人?我可以看到您正在使用清单中的默认值。请尝试creating a bot 并将bot's messaging endpoint 设置为“https://yourngrokurl/api/messages”。

    创建机器人后,请在清单文件中添加生成的机器人 ID 和密码。将 botid 添加到“bots”和“composeExtensions”中的“botId”。创建一个 zip 文件和upload it into teams

    关于问题2:

    我的意思是该项目没有要上传的清单,

    您可以使用App Studio 创建自己的清单文件。

    是否有可能返回比文本更复杂的内容? 收到文字了吗?例如,一张卡片

    是的,您可以返回 cards。请检查此示例以获取Adaptive cards

    但是是否可以创建不带参数的命令?

    Parameters 对象是可选的。您可以配置不带参数的消息扩展。

    如果我错过了回答问题,请告诉我。如果您遇到任何问题,也请与我们联系。

    【讨论】:

      【解决方案3】:

      感谢您的回复。我真的很感谢你的时间... 我添加了一个回复,因为评论的文字太多...... :(

      问题 1。

      我尝试使用https://dev.botframework.com/bots/new 创建一个机器人:

      1. 我输入 NameBot, Messaging Endpoint 并生成一个新的应用 ID(创建 Ms App Id 并通过 -> 应用注册门户):我看到一个新的 AppID,但没有密码...
      2. 我设置了 AppID 并注册:'Bot created'(这个 id 是 Bot Id?)
      3. 我可以在 https://dev.botframework.com/bots 中看到:“网络聊天”“正在运行”,我将 TEAMS 添加为频道 -> 我看到两个“正在运行”,但 TEST righe 面板不起作用(发送失败。重试)

      那我必须更改 HW 应用程序或 WebConfig 文件中的清单吗? 我必须在哪里设置新 ID(在前面的步骤 2 中获得)?

      一个。我必须更改顶部 id(这是我的应用程序原始 id)

      b.我必须将此 id 设置为 botId 吗? (bots & composeExtensions) -> 我做到了

      c。我在清单中的哪里设置密码?我看不到那个地方

      那么我如何构建机器人? (“创建机器人”链接中的第 2 步)。我想我必须重新编译我的 Visual 项目并将新的 zip 加载到 TEAMS 中。

      我做错了,我确定与 ID 有关:尝试使用我的消息扩展命令时,我总是收到“无法访问应用程序”消息

      我的身份:

      • 在我的硬件应用程序清单(Visual Studio 示例)中,我有 2 个 ID(顶部和 2xbot)
      • 在我的 HW Web.config 文件中,我有一个 MicrosoftAppId 和一个 MicrosoftAppPassword

      • 在 Azure 门户 (https://portal.azure.com) 中,我使用 1. 应用程序(客户端)ID、2. 目录(租户)ID、3. ObjectID 注册了我的新(必需)应用程序。

      • 在 Bot Framework (https://dev.botframework.com) 中,我有一个新创建的机器人,我在其中从 Azure 门户设置应用程序(客户端)ID...对吗?

      此外,当我使用 ngrok 时,我看到 POST /api/messages 是 401 Unauthorized... 为什么会这样?


      我也尝试过使用 App Studios 创建机器人:

      • “导入现有应用”并加载我现有的 HelloWorld zip
      • 在应用详情中,加载清单中的当前值
      • 在 Capabilities/Bots 中,我创建了一个机器人(获得了新的 ID 和密码),并添加了 Bot 端点地址
      • 在消息扩展中,我使用这个机器人(加载相同的值) 但是当我尝试安装(测试和分发)时,我得到“不允许上传自定义应用程序”

      问题 2 ******************************

      我有 DoNetCore 示例,我可以看到如何使用 ActivityHandler(OnMessageActivityAsync 方法)发送复杂的响应 BUT

      我的疑问是如何从 HelloWorld 应用程序发送卡片(例如),它没有 ITurnContext(使用 SendActivityAsync 方法)。此应用使用 ApiController 和此方法管理传入请求

         public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
      

      我看到了 ComposeExtensionResponse,但在这里看不到如何发送复杂的响应 我看到了activity.CreateReply(),但只有文本

      在 dotNet 机器人示例中,我有一个 Microsoft.Bot.Schema.Activity,但在 Hello World 应用中我有一个 Microsoft.Bot.Connector.Activity

      恐怕我混合了一些概念(1. app-ApiController-POST 和 2. Bot-ActivityHandler),我无法理解阅读文档...

      我的目标是拥有一个带有消息扩展的应用程序(HelloWorld 示例应用程序),从 TEAMS 获取命令(使用 @MyApp...),但我需要将卡片或富文本等内容发送到 TEAMS( dotNet 机器人样本)


      关于“参数对象”,我在消息扩展中添加新命令时看到为必需(App Studio-ManifestEditor-导入应用程序)

      非常感谢,

      迭戈

      【讨论】:

      • 您使用的是哪个样本?您需要在清单文件中的 3 个位置添加您在清单文件中获得的机器人 ID(顶部的“id”,机器人部分中的“botId”,composeExtension 部分中的“botId”)。在 appsettings.json 文件或 web.config 文件中添加 botid 和密码(取决于您使用的示例)。请确保您在清单和配置文件中使用相同的机器人 ID 和密码。
      【解决方案4】:

      我遇到了同样的问题。如果用户没有足够的权限来安装机器人应用程序,似乎会出现问题。可以安装应用程序并使用选项卡,但机器人将无法工作。如related problem 中所述,我已设法向用户提供所需的权限。

      机器人现在在我身边工作。

      【讨论】:

        猜你喜欢
        • 2021-02-12
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        • 2021-10-08
        相关资源
        最近更新 更多