我一直试图从MessagesController将服务传递给LuisDialog,如下所示:
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
...
await Conversation.SendAsync(activity, () => new ActionDialog(botService));
Run Code Online (Sandbox Code Playgroud)
使用依赖注入将botService注入到MessageController中.
当我开始机器人对话时,我收到一个错误:
在程序集'ThetaBot.Services,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'中键入'ThetaBot.Services.BotService'未标记为可序列化.
寻找解决方案我可以找到:https: //github.com/Microsoft/BotBuilder/issues/106
我现在更了解你的问题.我们对服务对象有类似的问题,我们希望从容器而不是序列化的blob中实例化.以下是我们如何在容器中注册这些对象 - 我们在对所有具有Key_DoNotSerialize键的对象进行反序列化时应用特殊处理:
builder
.RegisterType<BotToUserQueue>()
.Keyed<IBotToUser>(FiberModule.Key_DoNotSerialize)
.AsSelf()
.As<IBotToUser>()
.SingleInstance();
Run Code Online (Sandbox Code Playgroud)
但是,我找不到详细说明如何在现有Bot Framework模块中注册自己的依赖项的示例或文档.
我还发现了https://github.com/Microsoft/BotBuilder/issues/252,它表明应该可以从容器中实例化对话框.
我试过这个建议:
Func<IDialog<object>> makeRoot = () => actionDialog;
await Conversation.SendAsync(activity, makeRoot);
Run Code Online (Sandbox Code Playgroud)
和...一起:
builder
.RegisterType<ActionDialog>()
.Keyed<ActionDialog>(FiberModule.Key_DoNotSerialize)
.AsSelf()
.As<ActionDialog>()
.SingleInstance();
Run Code Online (Sandbox Code Playgroud)
这不起作用.
我也尝试过:
var builder = new ContainerBuilder();
builder.RegisterModule(new DialogModule_MakeRoot());
// My application module
builder.RegisterModule(new ApplicationModule());
using (var container = builder.Build())
using (var scope …Run Code Online (Sandbox Code Playgroud) 我正在使用带有Cognitive Services的Microsoft Bot Framework从用户通过bot上传的源图像生成图像.我正在使用C#.
Cognitive Services API返回一个byte[]或Stream表示处理过的图像.
如何将该图像直接发送给我的用户?所有的文档和示例似乎都指向我必须将图像托管为可公开寻址的URL并发送链接.我可以这样做,但我宁愿不这样做.
有谁知道如何简单地返回图像,有点像Caption Bot吗?
你好我是微软Bot框架的新手,我有一个问题,我找不到答案.我有一个FormFlow,询问用户一些问题,在一个特定问题后,我希望机器人做一些逻辑并相应地显示消息(例如,如果用户选择选项1然后显示消息X,如果用户选择选项2显示消息Y).
这是我的代码:
using Microsoft.Bot.Builder.FormFlow;
using Microsoft.Bot.Builder.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Bot_CRM.FormFlow
{
public enum RequestOptions { Unknown, CheckStatus, CreateCase };
[Serializable]
public class CaseFormFlow
{
public RequestOptions RequestType;
[Prompt("What is your first name?")]
public string FirstName;
public string LastName;
public string ContactNumber;
[Prompt("Please enter your id")]
public string Id;
public static IForm<CaseFormFlow> BuildForm()
{
OnCompletionAsyncDelegate<CaseFormFlow> processRequest = async (context, state) =>
{
await context.PostAsync($@"Thanks for your request");
};
return new FormBuilder<CaseFormFlow>()
.Message("Hello and welcom to …Run Code Online (Sandbox Code Playgroud) 有简单的函数返回错误:
错误:date.toLocaleDateString不是函数
TypeError: date.toLocaleDateString is not a function
at FormatTime (../Src/rootdialog.js:87:58)
Run Code Online (Sandbox Code Playgroud)
功能定义:
function FormatTime(time, prefix = "") {
var date = Date.parse(time);
return ((typeof time != "undefined") ? prefix + date.toLocaleDateString() : "");
}
Run Code Online (Sandbox Code Playgroud)
函数接收Date对象作为输入,但即使显式转换为Datewith Date.parse()也无济于事.使用Node.js 8.x. 有解决方案吗
PS问题是由BotBuilder架构引起的.
因为我们被迫放弃stateclient并转移到自定义存储,在我的情况下是一个azure表存储.使用我的storageexplorer,我可以看到它已经在我的azure上保存了对话数据.如何更新我的ff代码以获取过去的聊天记录?在我使用IActivityLogger类来记录对话之前,现在我对如何更新它感到困惑.
全球Asax之前:
protected void Application_Start()
{
var builder = new ContainerBuilder();
builder.RegisterType<Logger>().AsImplementedInterfaces().InstancePerDependency();
builder.Update(Conversation.Container);
GlobalConfiguration.Configure(WebApiConfig.Register);
}
Run Code Online (Sandbox Code Playgroud)
全球Asax之后:
protected void Application_Start()
{
Conversation.UpdateContainer(builder =>
{
builder.RegisterModule(new AzureModule(Assembly.GetExecutingAssembly()));
var store = new TableBotDataStore(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);
builder.Register(c => store)
.Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
.AsSelf()
.SingleInstance();
});
GlobalConfiguration.Configure(WebApiConfig.Register);
}
Run Code Online (Sandbox Code Playgroud)
记录器类:
public class Logger:IActivityLogger
{
public static ConcurrentDictionary<string, List<IActivity>> Messages = new ConcurrentDictionary<string, List<IActivity>>();
public Task LogAsync(IActivity activity)
{
try
{
var list = new List<IActivity>() { activity };
Messages.AddOrUpdate(activity.Conversation.Id, list, (k, v) => { v.Add(activity); return v; }); …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Microsoft Bot Framework与 WhatsApp集成。
我已经有与机器人服务对话的现有机器人(Skype 和网络聊天),并试图创建一个新的通信渠道。
我怎样才能构建这个新频道?
我已经有了可以从 WhatsApp 发送接收消息的 API,我计划在收到用户的消息时挂钩我的机器人服务,但我不知道如何使用我的机器人服务,因为它接受一个类Activity.
当我输入“重置”命令时,我希望对话再次重新启动并清除所有先前的对话框,请问该怎么做?我坚持了两天。在先进的感谢。
这里有我的源代码。
bot.dialog('/reset', (session) => {
session.endDialog();
var msg = new builder.Message(session)
.addAttachment(welcomecard_1.welcomeCard());
session.send(msg);
})
.triggerAction({
matches: /^reset$/i
});
Run Code Online (Sandbox Code Playgroud)
输入“重置”或“ /重置”后,先前的对话(红色)将从对话框中删除,并且此通道使用直线。

更新: 我尝试过此代码,但不起作用。
bot.use(builder.Middleware.dialogVersion({ version: 1.0, resetCommand: /^reset/i }));
Run Code Online (Sandbox Code Playgroud) 我开发了与 SharePoint On Premise 集成的 ChatBot。当我在模拟器中调试 ChatBot 时,它可以工作。但是,当我使用 DirectLine 在 Azure 中的 Web 模拟器和公司网站中托管的网站上进行调试时,它不起作用。
有谁知道如何解决它?
附上我的截图。左侧来自 Web Emulator,右侧来自本地 Bot Framework Emulator
更新源代码(2019 年 12 月 9 日)
XmlNamespaceManager xmlnspm = new XmlNamespaceManager(new NameTable());
Uri sharepointUrl = new Uri("https://mvponduty.sharepoint.com/sites/sg/daw/");
xmlnspm.AddNamespace("atom", "http://www.w3.org/2005/Atom");
xmlnspm.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices");
xmlnspm.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
NetworkCredential cred = new System.Net.NetworkCredential("engsooncheah@mvponduty.onmicrosoft.com", "Pa$$w0rd", "mvponduty.onmicrosoft.com");
HttpWebRequest listRequest = (HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + "_api/lists/getByTitle('" + "data@work" + "')/items?$filter=Keywords%20eq%20%27bloomberg%27");
listRequest.Method = "GET";
listRequest.Accept = "application/atom+xml";
listRequest.ContentType = "application/atom+xml;type=entry";
listRequest.Credentials = cred;
//LINE 136 start from below
HttpWebResponse listResponse …Run Code Online (Sandbox Code Playgroud) sharepoint-2013 botframework direct-line-botframework azure-bot-service
我正在创建一个机器人,允许用户与现有的Web服务进行交互.我希望用户能够与我的机器人开始对话并检索对他们个性化的信息.
如何将僵尸程序用户与其现有帐户相匹配?并非所有频道都使用电子邮件地址,因此我不能将其用于匹配.
我想在聊天窗口中添加一个链接,上面写着"你需要在继续之前注册僵尸框架",并提供一个链接回我的服务,其中包含他们的Bot Framework全局UserId.然后,我可以将此Id存储在我现有服务的数据库中,并使用它来验证用户身份.
有一个更好的方法吗?机器人应该被视为独立应用程序吗?
我使用Microsoft Bot Framework(版本3.0.0.59)为Skype实现了bot应用程序.
我实现了如何检索Skype名称和ID,但我无法检索Skype帐户的用户名.我怎样才能获得Skype帐户的用户名?
botframework ×10
c# ×4
javascript ×2
node.js ×2
skype-bots ×2
autofac ×1
bots ×1
chatbot ×1
date ×1
skype ×1
string ×1
whatsapp ×1