我使用下面的代码:
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.Location;
using Microsoft.Bot.Connector;
using System;
using System.Threading.Tasks;
namespace LocationBotDemo.Dialogs
{
[Serializable]
public class MainDialog : IDialog<object>
{
public async Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedStart);
}
public async Task MessageReceivedStart(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var message = await argument;
var apiKey = Keys.bingMapsKey;
var prompt = "Where should I ship your order? Type or say an address.";
var locationDialog = new LocationDialog(apiKey, message.ChannelId, prompt, LocationOptions.None, LocationRequiredFields.StreetAddress | LocationRequiredFields.PostalCode);
context.Call(locationDialog, AfterLocationProvided);
}
private async Task AfterLocationProvided(IDialogContext context, IAwaitable<object> result)
{
var message = await result;
// loop back to beginning
context.Wait(MessageReceivedStart);
}
}
}
但是
var locationDialog = new LocationDialog(apiKey, message.ChannelId, prompt, LocationOptions.None, LocationRequiredFields.StreetAddress | LocationRequiredFields.PostalCode);
上面一行询问用户的位置,街道和邮政编码。我不想那样。我想显示位置而不向用户询问任何内容。
例如我想展示&#34;购物中心,威斯敏斯特,伦敦SW1A 2WH,英国&#34;不向用户询问任何内容。我怎么能这样做?
答案 0 :(得分:0)
想要显示位置而不向用户询问任何内容
据我所知,并非所有频道都允许用户共享其位置,如果用户从特定频道发送的消息中不包含消息实体中的位置信息,您将无法检索用户的位置您的bot应用程序通过消息实体。
正如您所做的那样,如果频道当前不支持共享其位置,您可以在bot应用程序中提示用户输入位置信息。我们可以使用Bing location control来收集和验证用户所需的位置。
此外,以下github问题讨论了类似的问题:从特定频道获取用户位置,您可以查看链接以获取详细信息。
答案 1 :(得分:0)
使用Bot框架无法做到这一点。你可以做的是使用像Bing Maps API这样的API,并生成带有图钉的地图图像,然后将该图像作为file attachment或card发送给用户。顺便说一句,这是您在问题中提到的LocationDialog使用的精确API。 :)