标签: botframework

如何将Luis挂钩到Bot Framework FormDialog中

我有一个Dialog类,它是一个FormDialog(比如,FormDialog <SandwichOrder>;根据机器人框架文档网站建立一个三明治的订单).SandwichOrder包含"价格"属性.

我还有一个派生自LuisDialog的Dialog类,它获得了价格(根据,例如,大小和/或省).

如何将Luis功能挂钩到表单对话框中?

botframework azure-language-understanding

8
推荐指数
1
解决办法
1375
查看次数

如何通过我的机器人验证现有用户?

我正在创建一个机器人,允许用户与现有的Web服务进行交互.我希望用户能够与我的机器人开始对话并检索对他们个性化的信息.

如何将僵尸程序用户与其现有帐户相匹配?并非所有频道都使用电子邮件地址,因此我不能将其用于匹配.

我想在聊天窗口中添加一个链接,上面写着"你需要在继续之前注册僵尸框架",并提供一个链接回我的服务,其中包含他们的Bot Framework全局UserId.然后,我可以将此Id存储在我现有服务的数据库中,并使用它来验证用户身份.

有一个更好的方法吗?机器人应该被视为独立应用程序吗?

botframework

8
推荐指数
1
解决办法
5049
查看次数

从Microsoft Bot Framework Channel查找Skype的用户名

我使用Microsoft Bot Framework(版本3.0.0.59)为Skype实现了bot应用程序.

我实现了如何检索Skype名称和ID,但我无法检索Skype帐户的用户名.我怎样才能获得Skype帐户的用户名?

c# skype botframework skype-bots microsoft-skype-bot

8
推荐指数
1
解决办法
2362
查看次数

Bot框架:如何在Kik中的herocard上创建一个OpenUrl按钮

我想在kik ActionTypes.OpenUrl上使用CardAction英雄卡上的类型.它所做的就是回复消息.它实际上并没有打开URL.我有相同的代码在多个渠道上工作,但无法让它在kik上工作.有没有人能找到一个解决这个问题的方法?

这是我正在使用的代码:

Activity reply = activity.CreateReply();
var card = new HeroCard
{
    Title = "title",
    Text = "text",
    Buttons = new List<CardAction> {new CardAction(ActionTypes.OpenUrl,"url 1", text: "open url 1", value:@"https://www.google.com/"),
        new CardAction(ActionTypes.OpenUrl,title:"url 2", text: "open url 2", value:@"https://www.google.com/"),
        new CardAction(ActionTypes.OpenUrl,title:"url 3", text: "open url 3", value:@"https://www.google.com/")
    }
};
reply.Attachments.Add(card.ToAttachment());
await context.PostAsync(reply);
Run Code Online (Sandbox Code Playgroud)

c# kik botframework

8
推荐指数
1
解决办法
328
查看次数

如何访问Azure上部署的VS代码

如何访问从Visual Studio部署到Azure的所有文件?我正在使用bot框架创建一个机器人,然后我发布.但是,当我在网上查看代码时,我无法通过App Service Editor/Kudu /等查看所有文件.无法找到导航站点目录的文件.

有人知道吗?

azure botframework azure-bot-service

8
推荐指数
2
解决办法
91
查看次数

botframeworkv4 - 可用频道 ID 列表

在探索botframeworkv4C# 中的新预览时,我遇到了一个案例,我需要对某个频道执行特定操作。在 中botframeworkv3,我曾经使用过访问所有频道字符串名称,ChannelIds但在这里找不到。

"facebook"例如,我知道我可以直接编写,但是使用提供的列表可以防止任何拼写错误并提高可读性。

因此,ChannelIdsin的等价物是botframeworkv4什么?

c# botframework

8
推荐指数
2
解决办法
1097
查看次数

使用自适应卡设计器,然后在C#中使用实际值替换样本值

目标

我想使用自适应卡设计器创建(然后编辑)自适应卡设计,并在我的机器人中使用它们.

步骤

1)我在Designer中创建了自适应卡,带有样本值,并复制了它的JSON表示.例如:

{
  "type": "AdaptiveCard",
  "body": [
    {
      "type": "FactSet",
      "id": "myFactSet",
      "facts": [
        {
          "title": "Name:",
          "value": "John Doe"
        }
      ]
    }
  ],
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0"
 }
Run Code Online (Sandbox Code Playgroud)

2)现在我想在我的C#Bot Framework机器人中使用这张卡的设计.我把这个JSON放到我的项目中,其中包含了AdaptiveCards v1.1.0 nuget包.

3)我用这行代码将卡JSON解析为AdaptiveCards库类:

var card = AdaptiveCard.FromJson(card).Card;
Run Code Online (Sandbox Code Playgroud)

4)在将卡发送给用户之前,我必须用实际值填充它,替换样本数据.

问题

  1. 如何"John Doe"使用真实用户名替换?什么是最简单的方法?(我已经写了一个扩展方法来获取AdaptiveElement它的id,所以我可以很容易地改变它的值.但请告诉我,如果有一个更简单的方法)

  2. 我如何克隆现有的AdaptiveElement并将其他值放入其中?例如,如果我想FactSet通过复制现有myFactSet的所有相同样式来添加另一个卡?AdaptiveElementClone()办法.

为什么其他解决方案不合适

用C#写

我希望能够使用Designer轻松编辑卡片的设计,但如果我用C#代码重写整张卡片,每次卡片的设计发生变化时我都要对其进行更改,我不会看到设计师的结果.

在javascript中执行此操作

我知道用javascript很容易做到,但我在我的机器人中使用C#.

解析JSON并使用它

我也明白,我可以解析卡片JsonObject并直接处理JsonObjects,克隆它们,改变它们的属性,但是

  1. 它们没有输入,因此没有IntelliSense支持,我可以输入错字

  2. 我仍然需要遍历所有元素以找到具有给定id的那个元素(顺便说一句,是否有一个扩展方法可以轻松地执行此操作?)

  3. 使用JsonObject不会消除AdaptiveCards库的需要和调用AdaptiveCard.FromJson(card) …

c# botframework adaptive-cards

8
推荐指数
1
解决办法
1836
查看次数

Bot Framework Composer 技能主机端点 401 未经授权

我有一个用 C# 编写的机器人框架技能,它将消息从后端服务中继到使用 Bot Framework Composer 制作的消费者机器人。Skill Bot 在单独的控制器 api/message/BackendMessage 上接收来自后端服务的消息。

[Route("api/message")]
[ApiController]
public class SkillBotBackendController : ControllerBase
{
   ...
Run Code Online (Sandbox Code Playgroud)

当技能机器人收到消息时,它会将其发送到与消费者机器人的对话中,如下所示......

[HttpPost]
[Route("BackendMessage")]
public async Task PostAsync([FromBody] BackendMessage content)
{
   ...

     await _botFrameworkAdapter.ContinueConversationAsync(
         msAppId,
         conversationRec.ConversationReference,
         (ITurnContext turnContext, CancellationToken cancellationToken) =>
             turnContext.SendActivityAsync(MessageFactory.Text(backendMessage), 
                cancellationToken), default(CancellationToken));
Run Code Online (Sandbox Code Playgroud)

消费者机器人可以看到直接来自技能机器人的所有消息,但看不到技能机器人从后端服务接收的消息。这是一些 ngrok 条目,显示...

POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/e13d97b4-c715-4572-8d 200 OK
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/e13d97b4-c715-4572-8d 200 OK
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 401 Unauthorized
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 401 Unauthorized
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 401 Unauthorized
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 401 Unauthorized
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 200 OK
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 200 OK …
Run Code Online (Sandbox Code Playgroud)

c# botframework direct-line-botframework bot-framework-composer

8
推荐指数
1
解决办法
434
查看次数

机器人如何在Slack中启动一个线程

我试图通过启动一个线程让我的机器人框架机器人回复用户.通过这种方式,我可以在一个有很多人的频道中保持机器人正在与谁交谈.

根据松弛的文档,我需要做的是将thread_ts属性设置为ts发送到我的机器人的属性.我尝试了一些事情并且无法实现这一目标.这是我最简洁的例子:

var reply = (Activity)activity;
reply = reply.CreateReply("reply");

reply.ChannelData = JObject.Parse($"{{thread_ts:'{ts}'}}");
await context.PostAsync(reply);
Run Code Online (Sandbox Code Playgroud)

这不适合我.

c# slack botframework

7
推荐指数
1
解决办法
425
查看次数

Botbuilder SDK v4从组创建1:1对话

我正在尝试向在Microsoft Teams的频道中标记机器人的特定用户发送1:1 /私信.因为没有botbuilder-teams与botbuilder v4兼容,我想我必须自己实现这个功能.我知道主动消息,你可以使用adapter.continueConversation哪些正常,但adapter.createConversation没有.以下是我的一个对话框中的相关代码段:

let reference = TurnContext.getConversationReference(cx.activity);

await adapter.createConversation(reference, async (context) => {
    await context.sendActivity("Hello World!");
});
Run Code Online (Sandbox Code Playgroud)

botframework microsoft-teams

7
推荐指数
1
解决办法
270
查看次数