在填写表格之前,我不需要任何确认.但是,在FormBuilder类的以下Build()方法中有一个Confirm("这是你的选择吗?\n { }")*.
public IForm<T> Build()
{
if (!_form._steps.Any((step) => step.Type == StepType.Field))
{
var paths = new List<string>();
FormBuilder<T>.FieldPaths(typeof(T), "", paths);
IFormBuilder<T> builder = this;
foreach (var path in paths)
{
builder.Field(new FieldReflector<T>(path));
}
builder.Confirm("Is this your selection?\n{*}");
}
Validate();
return this._form;
}
Run Code Online (Sandbox Code Playgroud)
在调用build之后,有什么办法可以从生成的Form中删除这一步吗?
var form = new FormBuilder<QuestionYourThinking>()
.OnCompletionAsync(async (context, state) =>
{
await context.PostAsync("L'exercice est maintenant terminé. A bientot !");
})
.Build();
Run Code Online (Sandbox Code Playgroud) 关于Microsoft Bot Framework,我们都知道Microsoft提供的示例.然而,这些样品通常具有"单一用途",即Pizzabot仅用于订购比萨饼,等等.
事实上,我希望创造一个更复杂的Bot,它实际上回答了一系列事情.为此,我正在使用此MessageController创建一个"大厅"对话框,其中包含所有消息:
return await Conversation.SendAsync(message, () => new LobbyDialog());
Run Code Online (Sandbox Code Playgroud)
在那个"Lobby"对话框中,我有一系列LUIS意图用于不同的事情,并且因为它根据意图选择任务,所以它工作得很好.
但是,对于更复杂的操作,我希望使用FormFlow机制,所以我可以使用像PizzaBot示例中的表单.问题是所有采样的"表单机器人"始终使用此消息控制器类型:
return Chain.From(() => new PizzaOrderDialog(BuildForm)
Run Code Online (Sandbox Code Playgroud)
并在同一个MessagesController中建立构建器流,如下所示:
var builder = new FormBuilder<PizzaOrder>();
ActiveDelegate<PizzaOrder> isBYO = (pizza) => pizza.Kind == PizzaOptions.BYOPizza;
ActiveDelegate<PizzaOrder> isSignature = (pizza) => pizza.Kind == PizzaOptions.SignaturePizza;
ActiveDelegate<PizzaOrder> isGourmet = (pizza) => pizza.Kind == PizzaOptions.GourmetDelitePizza;
ActiveDelegate<PizzaOrder> isStuffed = (pizza) => pizza.Kind == PizzaOptions.StuffedPizza;
return builder
// .Field(nameof(PizzaOrder.Choice))
.Field(nameof(PizzaOrder.Size))
.Field(nameof(PizzaOrder.Kind))
.Field("BYO.Crust", isBYO)
.Field("BYO.Sauce", isBYO)
.Field("BYO.Toppings", isBYO)
.Field(nameof(PizzaOrder.GourmetDelite), isGourmet)
.Field(nameof(PizzaOrder.Signature), isSignature)
.Field(nameof(PizzaOrder.Stuffed), isStuffed)
.AddRemainingFields()
.Confirm("Would you like …Run Code Online (Sandbox Code Playgroud) 我有一个用户上传的图片的字节数组.我需要使用Bot-framework在Skype和其他频道上将此字节数组渲染为图像
我正在创建一个简单的Skype聊天机器人.我注意到目录中的一些机器人可以引用我的用户名和/或名字/姓氏,而不需要机器人问.
如何在不询问用户的情况下在Skype(或任何其他频道)中检索用户的用户名?
我开始使用Microsoft Bot Framework,并尝试使用模拟器从入门教程运行非常基本的应用程序.当我发送消息时,我收到错误:401 Unauthorized
我做过的事情
我已更正模拟器中的URL以匹配应用程序的正确URL.已从模拟器字段中删除了APP ID和APP密码.
我假设我不需要担心https,因为我在本地运行(localhost).
我一直试图调用MS Luis.ai 程序化 API(bit.ly/2iev01n),并且每次请求都收到401未经授权的响应.这是一个简单的GET示例:https://api.projectoxford.ai/luis/v1.0/prog/apps/{appId}/entities?subscription-key={subscription_key}.
我从Luis.ai GUI(由API文档指定)提供我的appId,在这里:

我从Azure提供我的订阅密钥(由API文档指定),在这里:

来自上方的应用ID和订阅密钥与我用于成功点击查询API的内容完全相同(请参阅底部的注释).我的帐户是按需付费(不是免费的).
我在这里做错了吗?此API是否已弃用,移动,关闭或与文档不同步?
注意:我可以通过在线GUI操作我的模型,但这种方法对我们的业务需求来说太过手动,我们的模型需要在新业务实体出现时以编程方式更新.
注意:程序化API与具有此请求URL的查询API不同,这对我来说很好:
https://api.projectoxford.ai/luis/v2.0/apps/{appId}?subscription-key={subscription_key}&verbose=true&q={utterance}
注意:似乎没有适用于v2.0的Luis.ai编程API - 这就是查询和编程API的URL具有不同版本的原因.
azure chatbot azure-machine-learning-studio botframework azure-language-understanding
我们有一个客户端要求,Bot应用程序应该托管在本地,所有的Web聊天通信都直接进入Web服务器.我打算开发一个Bot .Net应用程序并配置网络聊天频道.我想知道是否可以在本地配置Bot应用程序
如果我使用网络聊天,客户端数据是如何安全的以及机器人服务如何将请求路由到Webapp.
我正在我的聊天机器人中为我的团队频道提供O365连接器卡,以便用户使用HttpPost动作将数据发送回机器人.以下是用户保存时的示例调用消息:
{
"name": "actionableMessage/executeAction",
"type": "invoke",
"timestamp": "2018-06-16T20:58:24.388Z",
"localTimestamp": "2018-06-16T21:58:24.388+01:00",
"id": "snip",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/emea-client-ss.msg/",
"from": {
"id": "snip",
"name": "my name",
"aadObjectId": "snip"
},
"conversation": {
"conversationType": "personal",
"id": "long conversation id"
},
"recipient": {
"id": "bot id",
"name": "bot name"
},
"entities": [
{
"locale": "en-US",
"country": "US",
"platform": "Web",
"type": "clientInfo"
}
],
"channelData": {
"tenant": {
"id": "tenant id"
},
"source": {
"name": "message"
}
},
"replyToId": "message id",
"value": {
"body": "{\"sportType\":\"1\", \"tournamentName\":\"FIFA Soccer …Run Code Online (Sandbox Code Playgroud) 我有一个表单流对话框,其中包含以下问题定义为枚举
public enum PreviousOwnerOptions
{
[Describe("Owned from new")]
[Terms("0", "new", ".*[O|o]wned from new")]
OwnedFromNew = 0,
[Terms("1", "One")]
One,
[Terms("2", "Two")]
Two,
[Terms("3", "Three")]
Three,
[Terms("4", "Four")]
Four,
[Terms("5", "Five")]
Five,
[Terms("6", "Six")]
Six,
[Describe("More than six")]
[Terms(".*More than six", "more")]
MoreThanSix
}
Run Code Online (Sandbox Code Playgroud)
以下是用户对问题的看法......
我遇到的问题是,如果输入数字"3"作为答案,那么响应是这样的......
看起来机器人不确定我的意思是在第3位或答案"三".我认为这个Terms属性可以解决这个问题吗?
我该如何解决这个问题?
当用户安装我的Teams机器人时,我希望发送欢迎消息。
我查看了Teams API文档,并收到了有关是否应该这样做的混合消息。我已经在各个地方阅读了我的机器人在安装bot时应该收到的会话更新,以及阅读了各种我不会收到此类事件的问题。
但是,存在具有此功能的机器人。Hipmunk与私有作用域一起安装时,向我发送了一条消息,而没有进一步激怒。该机器人如何做到这一点,以及如何复制此功能?
谢谢