# Encontrar local mais próximo

Com este modelo, seus clientes podem encontrar facilmente a filial mais próxima do seu negócio apenas perguntando ao seu chatbot! Após pedir ao usuário seu endereço, o bot procurará em um banco de dados externo (Airtable) que contém os dados de todas as suas filiais. Em seguida, ele calculará qual local é mais próximo do endereço do usuário usando a API do Google Maps. Por fim, o bot mostrará o resultado no Google Maps, dentro de um iFrame.&#x20;

Continue lendo para saber como você pode personalizar este modelo para sua própria organização.&#x20;

## Como personalizar este template

{% hint style="info" %}
Certifique-se de sempre [atualize o NLP](https://docs.chatlayer.ai/understanding-users/natural-language-processing-nlp#updating-the-nlp) após carregar um modelo!
{% endhint %}

Este modelo usa dois serviços de terceiros:

1. Airtable, como banco de dados para locais de filiais
2. Google Maps API, para encontrar o endereço do usuário

Para permitir que seu bot interaja com esses serviços, você precisará de uma chave de API para cada um e configurá-las nos blocos de Ação onde o bot faz as chamadas de API.

#### &#x20;Configurando sua própria base do Airtable

Se você não trabalhou com o Airtable antes, pode se inscrever gratuitamente [aqui](https://airtable.com/signup) e aprender o básico [aqui](https://support.airtable.com/hc/en-us/articles/360021518753-Getting-started-starting-with-the-base-ics).

Para cada um dos locais da sua organização, seu Airtable precisará de campos com as seguintes informações:&#x20;

1. Nome da filial&#x20;
2. Endereço&#x20;
3. Latitude&#x20;
4. Longitude&#x20;

Quando você importar recentemente o modelo 'Local mais próximo', ele se vinculará automaticamente a [este Airtable](https://airtable.com/invite/l?inviteId=invF76GY9tGp3hGyz\&inviteToken=224dcd7cbf041e3e39f7caefbbe6798f4dc4f5ef1643586d2a1a5cbcb286f1f3\&utm_source=email). Fique à vontade para usá-lo para testes, mas certifique-se de substituí-lo assim que começar a usar o bot para sua própria organização!

Para mais informações sobre como integrar o Airtable ao seu bot, confira [este tutorial](https://docs.chatlayer.ai/integrations/code-action/airtable).&#x20;

{% hint style="info" %}
Gerenciando seus locais de filial em outro banco de dados? Você pode conectar qualquer tipo de banco de dados a este bot, desde que ele tenha uma API. Leia mais sobre nossas integrações de API [aqui](https://docs.chatlayer.ai/chatlayer-documentation-pt-br/integrateandcode/custom-back-end-integrations/integrations-101).&#x20;
{% endhint %}

Abaixo está uma visão geral dos blocos principais em cada fluxo do bot. Aqui vamos guiá-lo sobre como configurar a conexão com as APIs do Airtable e do Google Maps, bem como outras dicas para personalizar este modelo para o seu negócio.

### Fluxo: Geral

#### Bloco: Perguntar endereço &#x20;

&#x20;Neste bloco, o bot pede ao usuário seu endereço e salva a resposta como uma variável: `user_address`. &#x20;

#### Bloco: Localizador&#x20;

Para fazer este modelo funcionar, seu bot precisa ser capaz de acessar os dados de localização das suas filiais (no Airtable) e procurar o endereço do usuário (usando a API do Google Maps).&#x20;

Este bloco usa uma Ação de Código para chamar tanto a API do Airtable quanto a API do Google Maps com o código Javascript mostrado abaixo. Este código pode parecer um pouco intimidador, mas não se preocupe, você só precisa alterar algumas informações!

```javascript
const allStations = await fetch(`https://api.airtable.com/v0/(YOUR_BASE_ID)/(YOUR_TABLE_NAME)`, { 
headers: {
Authorization: `Bearer (YOUR_AIRTABLE_API_KEY)`
}
}).then(r => r.json());
let re = / /g; 

const currLoc = args.user_address.replace(re, '+');
let minDistance = Number.MAX_SAFE_INTEGER; 
let nearestShop;
const chatlayer = ChatlayerResponseBuilder(); chatlayer.addSessionVariable('currLoc', currLoc); 
const addressFromMaps = await fetch(`https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=${currLoc}&inputtype=textquery&fields=geometry&key=(YOUR_GOOGLEMAPS_API_KEY)`).then(r=> r.json()); 
const geoLocation2 = { 
Latitude: addressFromMaps.candidates[0].geometry.location.lat, 
Longitude: addressFromMaps.candidates[0].geometry.location.lng, 
} 
//const geoLocation2 = {Latitude : "52.5001278", Longitude : "13.3121555"}; allStations.records.forEach(station=>{ 
const geoLocation1 = station.fields;
const lat = geoLocation1.Latitude - geoLocation2.Latitude; 
const lon = geoLocation1.Longitude - geoLocation2.Longitude; 
 
const val = Math.sqrt(Math.pow(lat, 2) + Math.pow(lon, 2)); if(minDistance>val){ 
minDistance = val; 
closestLocation = geoLocation1;
}
});

closestLocation.Address = closestLocation.Address.replace(/ /g, ' ');
chatlayer.addSessionVariable('closestLocation', closestLocation);
chatlayer.addSessionVariable('addressFromMaps', addressFromMaps); chatlayer.send();----------------------------------
```

Neste trecho de código, você deve personalizar as três coisas a seguir: &#x20;

1. **O link do Airtable**\
   Na URL da linha 1 do bloco de código, substitua `(YOUR_BASE_ID)` pelo ID da sua própria base do Airtable e `(YOUR_TABLE_NAME)` pelo nome ou ID da tabela que contém seus dados de localização. Você pode encontrar os IDs da base e da tabela do seu Airtable [aqui](https://airtable.com/api), ou na URL da visualização da sua tabela.
2. **A chave de API do Airtable**\
   Na URL da linha 3, substitua `(YOUR_AIRTABLE_API_KEY)` pela sua própria chave de API do Airtable. Você pode encontrar a chave de API em seu [página da conta do Airtable](https://airtable.com/account).&#x20;
3. **A chave de API do Google Maps**  \
   Na linha 13, substitua `(YOUR_GOOGLEMAPS_API_KEY)` pela sua própria chave de API do Google.

#### Bloco: Fornecer endereço&#x20;

Neste bloco, o bot mostra o nome e o endereço da localização mais próxima encontrada no banco de dados. O nome é armazenado em `closestLocation.Name` variável e o endereço em `closestLocation.Address`.&#x20;

#### Bloco: Mostrar local no mapa

Neste bloco o bot mostra a localização da filial mais próxima em um mapa, dentro de um iFrame. No campo Fonte da ação iFrame, também substitua `(YOUR_GOOGLEMAPS_API_KEY)` pela sua própria chave de API do Google.

![O Mostrar local no mapa o bloco com a parte da URL de origem a ser alterada destacada em vermelho](https://181262846-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LLTwFwbOqJj4dDhg8Ju%2Fuploads%2Fmzkidqk2qSMKONpq8O5S%2FScreenshot%202022-07-19%20at%2011.07.45.png?alt=media\&token=057096d9-de76-4e1d-9f45-de89dec8659f)

#### Bloco: Limpar endereço do usuário

Finalmente, neste bloco o bot limpa a variável `user_address` para que o usuário possa iniciar o fluxo novamente e usar outro endereço.

### Conecte o fluxo a outros fluxos

Agora que você adicionou este novo fluxo, certifique-se de que ele se conecta a outros fluxos. Por exemplo, se este for um caso de uso importante para o seu bot, certifique-se de mencioná-lo na introdução.

####

É isso, agora seu bot pode encontrar os locais mais próximos ao endereço do usuário! 👏
