如何使用C#Microsoft Bot Builder位置显示位置

时间:2018-04-20 19:25:41

标签: c# botframework

我使用下面的代码:

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;不向用户询问任何内容。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

  

想要显示位置而不向用户询问任何内容

据我所知,并非所有频道都允许用户共享其位置,如果用户从特定频道发送的消息中不包含消息实体中的位置信息,您将无法检索用户的位置您的bot应用程序通过消息实体。

正如您所做的那样,如果频道当前不支持共享其位置,您可以在bot应用程序中提示用户输入位置信息。我们可以使用Bing location control来收集和验证用户所需的位置。

此外,以下github问题讨论了类似的问题:从特定频道获取用户位置,您可以查看链接以获取详细信息。

答案 1 :(得分:0)

使用Bot框架无法做到这一点。你可以做的是使用像Bing Maps API这样的API,并生成带有图钉的地图图像,然后将该图像作为file attachmentcard发送给用户。顺便说一句,这是您在问题中提到的LocationDialog使用的精确API。 :)