我开始使用Microsoft Bot Framework并一步一步地遵循所有教程.我已经能够注册一个新的机器人,并部署它与模拟器一起工作,但除了没有其他工作. 测试与机器人聊天的连接不起作用,尽管我从模拟器和所有连接的通道得到答案,在正确创建和注册的地方我总是得到未经授权的响应或类似的东西,无论如何没有响应,所以没有任何作用.我尝试使用Twilio,Web Chat,Telegram(Skype auth正在等待)获得始终相同的响应.由于我似乎严格遵循教程,还有其他事情要做或被批准吗?或者只是因为太年轻,服务仍然不能100%工作?
谢谢
我希望在我的应用程序中使用Microsoft Bot Framework.但是,我有一个自定义UI聊天控件(根据我的要求设计),我需要连接这个机器人.(而不是像slack或skype这样的预配置通道).
是否有用于此目的的Web(最好是有角度的)和/或移动的客户端sdk?
我想使用Microsoft Bot Framework为我正在构建的应用程序构建一个聊天机器人,我不希望它在Skype,Facebook或任何其他渠道中工作.
那可能吗?是否涉及成本.
c# artificial-intelligence chatbot botframework botconnector
我正在尝试使用LUIS构建一个机器人,但它比我想象的要难得多.到目前为止,我已经设法创建我的LUIS应用程序并创建一个Intent和一个实体,我创建了一些似乎工作正常的话语.
然后我创建了我的机器人,并将它连接到路易斯.当我测试我的机器人时,它按预期工作.现在是有趣的部分.我想处理参数.在Luis上我向我的意图添加了一个动作:
如您所见,我添加了提示.我机器人中的代码目前看起来像这样:
/// <summary>
/// Tries to find the category
/// </summary>
/// <param name="result">The Luis result</param>
/// <param name="alarm"></param>
/// <returns></returns>
public string TryFindCategory(LuisResult result)
{
// Variable for the title
EntityRecommendation title;
// If we find our enenty, return it
if (result.TryFindEntity(PiiiCK.Category, out title))
return title.Entity;
// Default fallback
return null;
}
[LuisIntent("Choose category")]
public async Task ChooseCategory(IDialogContext context, LuisResult result)
{
// Get our category
var category = …Run Code Online (Sandbox Code Playgroud) 我有一个机器人,它使用.NET,MS Bot框架和LUIS.ai为它的智能.
一切都很好,除了我需要为非技术用户提供一种方法来训练机器人并教它新的东西,即LUIS.ai中的新意图.
换句话说,假设现在机器人可以用简单的包含方向的短语来回答诸如"嘿机器人我可以在哪里喝咖啡"和"我在哪里可以买些衣服"等消息.非技术用户需要能够训练它来回答"我在哪里可以获得一些食物".
这是我考虑过的:
继续使用LUIS.ai. 不起作用,因为LUIS.ai没有API.它最好的是用于优化现有意图的GUI,以及上传应用程序/短语列表功能.如果带有应用程序的JSON文件可以由我编写的某个应用程序生成,则该过程可以是半自动的; 但是,仍然需要有处理新意图的后端代码,并且必须由C#编码器实现.
如果我从C#切换到Node.js,它可以工作吗?然后理论上我将能够自动生成代码文件/意图处理程序.
Azure Bot服务.似乎它没有非技术接口,只是一个基于浏览器的IDE.
彻底抛弃机器人框架并使用第三方工具,如motion.ai.不起作用,因为没有LUIS.ai提供的"智力".
使用表单流程,它是Bot Framework的一部分.如果我的GUI bot构建器应用程序可以生成JSON文件,Bot Framework可以使用这些文件自动构建机器人.不起作用,因为没有像LUIS.ai那样的智力.
继续使用Bot Framework,但抛弃LUIS并基于node.js语言处理库构建单独的Web服务以确定意图.可能或可能不起作用,可能不如LUIS聪明,并且可能是一种矫枉过正.
覆盖方法,LuisDialog从中选择意图LuisResponse,以便用我自己的方式来决定意图(但是如何?).
在这一点上,我没有想法,任何指针将不胜感激.
我正在使用Node js构建聊天机器人。
我目前正在将会话数据存储到Microsoft默认存储中,每个用户会话的限制为64K。我想使用自己的存储设备来存储会话数据。这是我从Microsoft开发人员那里获得的帮助。
我能够存储在文档数据库和Azure表中。
不过,我还是很困惑。我们将如何实现IStorageClient存储在自己的数据库中的接口?
无论何时设置,session.UserData.name=""它都应存储在自己的数据库中。
我正在尝试在NodeJS上使用AdaptiveCards npm包以编程方式生成卡,但我没有看到如何生成要传递给消息的JSON.到目前为止,我的代码非常简单:
session.send(new builder.Message(session).addAttachment({
contentType: "application/vnd.microsoft.card.adaptive",
content: createCard()
}));
function createCard() {
let card = new adaptiveCards.AdaptiveCard({ type: "AdaptiveCard" });
// add a text block
card.addItem(new adaptiveCards.TextBlock({
text: 'Issue #1',
weight: "bolder",
size: "medium"
}));
return card;
}
Run Code Online (Sandbox Code Playgroud)
我试图打电话给render方法,但它不起作用.我也试着打电话JSON.stringify(card)但是我得到了TypeError: Converting circular structure to JSON消息错误.任何的想法?如果我将JSON传递给内容附件,那么一切正常.
我迁移到Table Azure Provider以管理Microsoft bot框架状态.
在我的遥测中,我看到依赖关系调用我的新表Azure存储,但是我仍然看到很多调用state.botframework.com,有些调用通常是随机的慢响应时间.
这似乎不正常,因为我希望所有的调用都被定向到我的新私有状态提供者:
示例:https: //state.botframework.com/v3/botstate/facebook/users/999999999999
:调用新的私有状态提供的示例 https://xxxxxxxxxx.table.core.windows.net:443/botdata(PartitionKey=的Facebook:私人",RowKey ='XXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXX
其他潜在的相关信息:
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
//Register custom datastore
builder
.RegisterKeyedType<TableBotDataStore, IBotDataStore<BotData>>()
.Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
.WithParameter((pi, c) => pi.Name == "connectionString",
(pi, c) =>
ConfigurationManager.ConnectionStrings["X"].ConnectionString)
.SingleInstance();
builder.RegisterAdapterChain<IBotDataStore<BotData>>
(
typeof(TableBotDataStore),
typeof(CachingBotDataStore)
)
.InstancePerLifetimeScope();
}
Run Code Online (Sandbox Code Playgroud)
public static async Task CheckClientVersion(Activity activity)
{
StateClient stateClient = activity.GetStateClient();
BotData userData = stateClient.BotState.GetUserData(activity.ChannelId, activity.From.Id);
if (userData?.GetProperty<string>("version")?.CompareTo(Assembly.GetExecutingAssembly().GetName().Version.ToString()) != 0)
{
string[] result = …Run Code Online (Sandbox Code Playgroud) 我想在我的Bot中使用建议的动作 - 所以用户有一个快速回复来回答问题,但也是一个输入字段.
所以Bot问的是:
"你喜欢吃披萨吗?" - > 是的!- > 不.
并且用户可能不会使用快速回复而是写道:"是的,还有汉堡 ".
现在我也需要" Burger " 作为实体--GitHub上的示例对我来说没有意义,因为他们将快速回复拉到选择提示 - 当用户只从建议的操作中选择时,这很好 - 但不是当他们在输入字段中输入自己的答案时.
bot.dialog('/', [
function (session) {
var msg = new builder.Message(session)
.text("Hi! What is your favorite color?")
.suggestedActions(
builder.SuggestedActions.create(
session,[
builder.CardAction.imBack(session, "green", "green"),
builder.CardAction.imBack(session, "blue", "blue"),
builder.CardAction.imBack(session, "red", "red")
]
)
);
builder.Prompts.choice(session, msg, ["green", "blue", "red"]);
},
function(session, results) {
session.send('I like ' + results.response.entity + ' too!');
}]);
Run Code Online (Sandbox Code Playgroud)
有解决方案吗?
当我收到来自Telegram的消息时,我会在Activity.ChannelData字段中获得有关帐户的详细信息(例如用户名,conversation_id等).
{
"update_id": ,
"callback_query": {
"id": "",
"from": {
"id": ,
"is_bot": false,
"first_name": "",
"last_name": "",
"username": "",
"language_code": ""
},
"message": {
"message_id": ,
"from": {
"id": ,
"is_bot": true,
"first_name": "",
"username": ""
},
"chat": {
"id": ,
"first_name": "",
"last_name": "",
"username": "",
"type": "private"
},
"date": ,
"text": "Example text"
},
"chat_instance": "",
"data": ""
}
}
Run Code Online (Sandbox Code Playgroud)
但是当涉及到Skype时,我所看到的只是消息文本,而不是其他内容.
{ "text": "Example text"}
Run Code Online (Sandbox Code Playgroud)
怎么知道,谁给我发了消息呢?
Upd:这不应该是用户的名字,任何其他数据,如用户唯一ID都适合.
botframework ×10
botconnector ×3
c# ×3
node.js ×3
azure-language-understanding ×2
bots ×1
chatbot ×1
skype ×1