[Resolvido] Obter Longitude e Latitude do Request Location SDK C#


#1

Pessoal,

Peguei um exemplo do Request Location disponibilizado na documentação, onde ele solicita ao usuário compartilhar a sua localização através de um botão. Ao clicar no botão é mostrado um mapa com a localização do usuário.

Como eu faço para obter a longitude e latitude dele? Ele aparece o mapa com a localização no chat, mas o método de ReceiveAsync não está sendo chamado…

Exemplo utilizado: https://docs.blip.ai/#request-location

Não sei se precisa fazer alguma alteração no application.json.

O meu está assim (retirei apenas o identifier e accesKey):

{
  "identifier": "",
  "accessKey": "",
  "messageReceivers": [
	{
      "type": "PlainTextMessageReceiver",
      "mediaType": "text/plain"
    }    
  ],
  "settings": {
    "key1": "value1",
    "key2": 2
  },
  "settingsType": "Settings",
  "startupType": "Startup"
}

Obrigado.


#2

Olá, @lucasfsilva.

O tipo que será enviado para o bot é um Location.

Você precisará adicionar um outro MessageReceiver, com o media type especifico deste conteudo. Algo como:

"messageReceivers": [
   {
      "type": "PlainTextMessageReceiver",
      "mediaType": "text/plain"
    },    
   {
      "type": "LocationMessageReceiver",
      "mediaType": "application/vnd.lime.location+json"
    }    
  ],

#3

Olá @andreminelli.

Obrigado pelo retorno, mas ainda não consegui fazer ele funcionar :pensive:

Eu adicionei outro MessageReceiver, conforme você explicou:

{
  "identifier": "",
  "accessKey": "",
  "messageReceivers": [
	{
  "type": "PlainTextMessageReceiver",
  "mediaType": "text/plain"
},    
{
  "type": "LocationMessageReceiver",
  "mediaType": "application/vnd.lime.location+json"
}      
  ],
  "settings": {
"key1": "value1",
"key2": 2
  },
  "settingsType": "Settings",
  "startupType": "Startup"
}

E eu possuo duas classes, sendo a PlainTextMessageReceiver onde eu estou recebendo as mensagens e criei agora a LocationMessageReceiver após eu ter adicionado o MessageReceiver.

Eu deixei o breakpoint nos dois métodos de ReceiveAsync para ver se chega a resposta, mas em nenhuma das duas classes foi acionado o breakpoint depois de aparecer o mapa no chat.

Segue abaixo as classes:

public class PlainTextMessageReceiver : IMessageReceiver
{
    private readonly ISender _sender;
    private readonly Settings _settings;

    public PlainTextMessageReceiver(ISender sender, Settings settings)
    {
        _sender = sender;
        _settings = settings;
    }

    public async Task ReceiveAsync(Message message, CancellationToken cancellationToken)
    {

        Document document = new Input
        {
            Label = new DocumentContainer
            {
                Value = "Send your location please!"
            },
            Validation = new InputValidation
            {
                Rule = InputValidationRule.Type,
                Type = Location.MediaType
            }
        };

        await _sender.SendMessageAsync(document, message.From, cancellationToken);
    }
}

public class LocationMessageReceiver : IMessageReceiver
{
    private readonly ISender _sender;
    private readonly Settings _settings;

    public LocationMessageReceiver(ISender sender, Settings settings)
    {
        _sender = sender;
        _settings = settings;
    }
    public async Task ReceiveAsync(Message message, CancellationToken cancellationToken = default(CancellationToken))
    {
        await _sender.SendMessageAsync("Teste", message.From, cancellationToken);
    }
}

#4

@lucasfsilva, erro meu: a propriedade “mediatype” aceita uma RegEx, e o caracter de + da forma que eu enviei causa problema. Precisa ‘escapar’ no JSON…

Tente assim que deverá funcionar:

  "mediaType": "application/vnd.lime.location\\+json"

[]s


#5

Funcionou agora!

Muito obrigado pela ajuda @andreminelli.

Abs.