我有一个Dialog类,它是一个FormDialog(比如,FormDialog <SandwichOrder>;根据机器人框架文档网站建立一个三明治的订单).SandwichOrder包含"价格"属性.
我还有一个派生自LuisDialog的Dialog类,它获得了价格(根据,例如,大小和/或省).
如何将Luis功能挂钩到表单对话框中?
我正在创建一个机器人,允许用户与现有的Web服务进行交互.我希望用户能够与我的机器人开始对话并检索对他们个性化的信息.
如何将僵尸程序用户与其现有帐户相匹配?并非所有频道都使用电子邮件地址,因此我不能将其用于匹配.
我想在聊天窗口中添加一个链接,上面写着"你需要在继续之前注册僵尸框架",并提供一个链接回我的服务,其中包含他们的Bot Framework全局UserId.然后,我可以将此Id存储在我现有服务的数据库中,并使用它来验证用户身份.
有一个更好的方法吗?机器人应该被视为独立应用程序吗?
我使用Microsoft Bot Framework(版本3.0.0.59)为Skype实现了bot应用程序.
我实现了如何检索Skype名称和ID,但我无法检索Skype帐户的用户名.我怎样才能获得Skype帐户的用户名?
我想在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) 如何访问从Visual Studio部署到Azure的所有文件?我正在使用bot框架创建一个机器人,然后我发布.但是,当我在网上查看代码时,我无法通过App Service Editor/Kudu /等查看所有文件.无法找到导航站点目录的文件.
有人知道吗?
在探索botframeworkv4C# 中的新预览时,我遇到了一个案例,我需要对某个频道执行特定操作。在 中botframeworkv3,我曾经使用过访问所有频道字符串名称,ChannelIds但在这里找不到。
"facebook"例如,我知道我可以直接编写,但是使用提供的列表可以防止任何拼写错误并提高可读性。
因此,ChannelIdsin的等价物是botframeworkv4什么?
我想使用自适应卡设计器创建(然后编辑)自适应卡设计,并在我的机器人中使用它们.
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)在将卡发送给用户之前,我必须用实际值填充它,替换样本数据.
如何"John Doe"使用真实用户名替换?什么是最简单的方法?(我已经写了一个扩展方法来获取AdaptiveElement它的id,所以我可以很容易地改变它的值.但请告诉我,如果有一个更简单的方法)
我如何克隆现有的AdaptiveElement并将其他值放入其中?例如,如果我想FactSet通过复制现有myFactSet的所有相同样式来添加另一个卡?AdaptiveElement没Clone()办法.
我希望能够使用Designer轻松编辑卡片的设计,但如果我用C#代码重写整张卡片,每次卡片的设计发生变化时我都要对其进行更改,我不会看到设计师的结果.
我知道用javascript很容易做到,但我在我的机器人中使用C#.
我也明白,我可以解析卡片JsonObject并直接处理JsonObjects,克隆它们,改变它们的属性,但是
它们没有输入,因此没有IntelliSense支持,我可以输入错字
我仍然需要遍历所有元素以找到具有给定id的那个元素(顺便说一句,是否有一个扩展方法可以轻松地执行此操作?)
使用JsonObject不会消除AdaptiveCards库的需要和调用AdaptiveCard.FromJson(card) …
我有一个用 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
我试图通过启动一个线程让我的机器人框架机器人回复用户.通过这种方式,我可以在一个有很多人的频道中保持机器人正在与谁交谈.
根据松弛的文档,我需要做的是将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)
这不适合我.
我正在尝试向在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 ×10
c# ×6
azure ×1
azure-language-understanding ×1
kik ×1
skype ×1
skype-bots ×1
slack ×1