标签: botframework

使用Autofac在Microsoft Bot Framework对话框中注入外部依赖项

我一直试图从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)

c# autofac botframework

9
推荐指数
1
解决办法
3695
查看次数

发送图像而不是链接

我正在使用带有Cognitive Services的Microsoft Bot Framework从用户通过bot上传的源图像生成图像.我正在使用C#.

Cognitive Services API返回一个byte[]Stream表示处理过的图像.

如何将该图像直接发送给我的用户?所有的文档和示例似乎都指向我必须将图像托管为可公开寻址的URL并发送链接.我可以这样做,但我宁愿不这样做.

有谁知道如何简单地返回图像,有点像Caption Bot吗?

microsoft-cognitive botframework skype-bots

9
推荐指数
1
解决办法
2267
查看次数

更改Microsoft Bot Framework中的消息流

你好我是微软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)

c# botframework

9
推荐指数
1
解决办法
2152
查看次数

date.toLocaleDateString不是函数

有简单的函数返回错误:

错误: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架构引起的.

javascript string date node.js botframework

9
推荐指数
3
解决办法
2万
查看次数

如何从azure表存储中获取聊天记录

因为我们被迫放弃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)

c# chatbot azure-storage azure-table-storage botframework

9
推荐指数
1
解决办法
629
查看次数

Microsoft Bot 与 Whatsapp 的集成

我正在尝试将Microsoft Bot Framework与 WhatsApp集成。

我已经有与机器人服务对话的现有机器人(Skype 和网络聊天),并试图创建一个新的通信渠道。

我怎样才能构建这个新频道?

我已经有了可以从 WhatsApp 发送接收消息的 API,我计划在收到用户的消息时挂钩我的机器人服务,但我不知道如何使用我的机器人服务,因为它接受一个类Activity.

bots whatsapp botframework

9
推荐指数
2
解决办法
1万
查看次数

清除现有对话框

当我输入“重置”命令时,我希望对话再次重新启动并清除所有先前的对话框,请问该怎么做?我坚持了两天。在先进的感谢。

这里有我的源代码。

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)

javascript node.js botframework

9
推荐指数
1
解决办法
280
查看次数

ChatBot 在 Web 模拟器中不起作用,但在本地 Bot Framework 模拟器中运行良好

我开发了与 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

9
推荐指数
1
解决办法
567
查看次数

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

我正在创建一个机器人,允许用户与现有的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
查看次数