我正在开发一个Bot Framework应用程序,它使用Microsoft Bot技术与Slack集成.在bot项目中,我试图在用户发送消息时获取用户位置.
我想要实现的是,当用户键入消息"向我显示附近的医院"时,我想让用户使用地理坐标并将其传递给API,该API将返回该位置附近的医院列表.那么关于如何获得用户在Microsoft Bot项目中的当前位置的任何想法?
我尝试使用Geo位置类,但是我无法直接添加类引用,当我为Geo位置类添加外部DLL时,Visual Studio会抛出一些错误.
有没有办法让用户在Bots中获得当前位置?
c# class-library bots botframework azure-language-understanding
我创建了一个简单的Android应用程序,它使用restfull jersey WS通过JSON格式发送消息
我应该在连接机器人的应用程序中输入哪个URL?
以及该机器人如何接收消息并发回响应?
截至目前,我正在使用微软的bot模拟器
提前致谢.
我正在研究Bot框架技术,最近微软宣布了bot的新版本(V3).我已经开发了使用旧版本的机器人,现在我正在尝试将我的机器人升级到更新的版本.为了一切正常,但在将我的机器人发布到azure之后,然后通过使用我试图在机器人框架通道模拟器(3.0.0.54)中测试的发布URL,它总是给出"500,内部服务器错误".但是当我将skype频道添加到我的机器人时它会正常工作.
唯一的问题是当我在机器人框架通道模拟器中使用我的机器人应用程序的已发布URL进行测试时,我只得到错误为"内部服务器错误".
我认为最新版本的bot框架通道模拟器可能存在问题
我喜欢僵尸框架,但我想扩展以支持数百个(如果不是数千个)Facebook页面都指向我的单个机器人实例.我的bot实例通过传入的页面ID区分功能,或者我想通过MSFT App/Secret ID.
该框架似乎要求MSFT托管的逻辑机器人与FB页面之间存在1:1的对应关系,但我的单个机器人实例可以处理数千个此类页面和应用程序.
看起来我可能需要为每个逻辑机器人页面创建一个唯一的ChatConnector和关联的UniversalBot实例.在我建议的规模上,这是非常低效的.
解决这个问题的一种方法可能是扩展UniversalBot以接受我创建的所有MSFT App和Secret ID的列表,但我还没有尝试过.在查看API之后,看起来可以使用单个UniversalBot实例注册更多连接器.
UniversalBot:
/**
* Registers or returns a connector for a specific channel.
* @param channelId Unique ID of the channel. Use a channelId of '*' to reference the default connector.
* @param connector (Optional) connector to register. If ommited the connector for __channelId__ will be returned.
*/
connector(channelId: string, connector?: IConnector): IConnector;
Run Code Online (Sandbox Code Playgroud)
但不确定我为channelId传递了什么,除非这是一个任意的唯一本地值.
我在这里查看了其他/类似的帖子,但没有找到我认为解决我的问题的具体内容.如果我弄错了,我道歉并希望得到参考.
我希望有人可能会有更好的主意.我正在使用Node btw.谢谢.
我使用Microsoft Bot Framework(C#)制作了一个机器人并在Azure上发布了它.它在模拟器和Skype上运行得非常好.但是在Facebook Messenger上,似乎有时,它没有正确地接收消息(即使没有显示错误),但是多次重新输入消息似乎将其唤醒.
有没有人遇到这个问题或者知道发生了什么?
我正在尝试在Microsoft Bot Framework上创建一个简单的聊天机器人,我想在我的应用程序中添加LUIS应用程序ID和LUIS订阅密钥.
我在哪里可以获得订阅密钥?

我得到了这个令牌请求:
{
"error": "invalid_request",
"error_description": "AADSTS90002: No service namespace named 'botframework.com' was found in the data store.\r\nTrace ID: d164a5d4-2c28-4491-bd88-1f8b31b52800\r\nCorrelation ID: 3ab5127e-690e-40b6-a433-2986bd711541\r\nTimestamp: 2017-07-25 18:38:00Z",
"error_codes": [90002],
"timestamp": "2017-07-25 18:38:00Z",
"trace_id": "d164a5d4-2c28-4491-bd88-1f8b31b52800",
"correlation_id": "3ab5127e-690e-40b6-a433-2986bd711541"
}
Run Code Online (Sandbox Code Playgroud)
命名空间是否已更改?无法想出任何地方.它也是V3.1所以不明白为什么它不工作?
我发送请求 https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token
我看过很多文章建议不要使用默认的bot状态数据存储,因为微软肯定会在2018年3月关闭这项服务.
我目前正在开发无状态机器人,不需要任何存储空间.
我试图创造一个假的
internal class DummyDataStore : IBotDataStore<BotData>
{
public DummyDataStore()
{
}
public Task<bool> FlushAsync(IAddress key, CancellationToken cancellationToken)
{
return Task.FromResult(true);
}
public Task<BotData> LoadAsync(IAddress key, BotStoreType botStoreType, CancellationToken cancellationToken)
{
return Task.FromResult(new BotData());
}
public Task SaveAsync(IAddress key, BotStoreType botStoreType, BotData data, CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
Run Code Online (Sandbox Code Playgroud)
并在global.asax中使用autofac注册它
Conversation.UpdateContainer(
builder =>
{
//Registration of message logger
builder.RegisterType<BotMessageLogger>().AsImplementedInterfaces().InstancePerDependency();
//Registration of dummy data storage
var store = new DummyDataStore();
builder.Register(c => store).As<IBotDataStore<BotData>>().AsSelf().SingleInstance();
});
Run Code Online (Sandbox Code Playgroud)
但它似乎搞乱了上下文而bot并没有响应任何context.wait()方法
我也试过这个:
Conversation.UpdateContainer(
builder => …Run Code Online (Sandbox Code Playgroud) 我想在团队频道上连接我的机器人,但我不知道如何确保仅在我们的域(组织)中使用它.
我已经测试了Azure Web App的(身份验证AAD),但它不适用于团队或网络聊天,因为端点不会重定向它.
我有测试来实现AUTH卡,但它不适用于团队.
注意:我正在使用botframework C#api BotBuilder 3.15.2.2
我看起来像其他"问": 微软团队为Bot Framework进行AAD身份验证
https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/authentication/auth-flow-bot
https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/authentication/auth-bot-AAD
https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/authentication/authentication
真诚的,帕斯卡尔.
编辑:我已经实现了Adrian提取的解决方案,下面是一段在MessasController.cs(Post Function)上实现此功能的C#代码:注意==>为localhost使用添加访问权限
//https://stackoverflow.com/questions/51090597/botframework-on-teams-channel-11-authentication-aad-integrated
string tenantIdAAD = "";
try
{
tenantIdAAD = activity.GetChannelData<TeamsChannelData>().Tenant.Id;
}
catch (Exception exception)
{
tenantIdAAD = "";
}
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
if ([AAD_TenantID].TenantIdAAD.Equals(tenantIdAAD) || activity.ServiceUrl.StartsWith("http://localhost") )
{
await Conversation.SendAsync(activity, () => new Dialogs.RootDialog().LogIfException());
}
else
{
await connector.Conversations.ReplyToActivityAsync(activity.CreateReply("Access Denied"));
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个对话框,在其中我定义了多个瀑布步骤.在此对话框的上下文中,我有时需要根据用户的选择返回上一个瀑布步骤.我找到了这个方法:
await stepContext.ReplaceDialogAsync("Name of the dialog");
Run Code Online (Sandbox Code Playgroud)
但是,这个方法重新执行整个对话框,这不是我需要的.
事实上,我创建的瀑布步骤有三个:
我的代码是:
public class ListAllCallsDialog : ComponentDialog
{
// Dialog IDs
private const string ProfileDialog = "ListAllCallsDialog";
/// <summary>
/// Initializes a new instance of the <see cref="ListAllCallsDialog"/> class.
/// </summary>
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/> that enables logging and tracing.</param>
public ListAllCallsDialog(ILoggerFactory loggerFactory)
: base(nameof(ListAllCallsDialog))
{
// Add control flow dialogs
var waterfallSteps = new WaterfallStep[]
{
ListAllCallsDialogSteps.ChoiceCallStepAsync,
ListAllCallsDialogSteps.ShowCallStepAsync,
ListAllCallsDialogSteps.EndDialog,
};
AddDialog(new WaterfallDialog(ProfileDialog, waterfallSteps));
AddDialog(new ChoicePrompt("cardPrompt"));
}
/// <summary> …Run Code Online (Sandbox Code Playgroud) botframework ×10
c# ×5
bots ×3
azure ×2
azure-language-understanding ×2
access-token ×1
api ×1
chatbot ×1
messenger ×1
node.js ×1
rest ×1
waterfall ×1