Skip to main content

Bot - Integração com Google Sheet (Dúvida Final)


AlexSantos

Pessoal, alguém consegue me ajudar? Estou travado nesse ponto a alguns dias!

  1. Criei a planilha no Google Sheet (API configurada tudo OK)
  2. Criei o bloco com o refresh token (Teste OK)
  3. Estabeleci uma comunicação do BLIP com a planilha (teste GET listando os dados Ok)

Planilha: lojas (aba lojas + aba proc)**

Colunas na aba lojas com os dados : (loja + telefone)

Fórmula para buscar os dados : =IFERROR(INDEX(lojas!B:B;MATCH(A1;lojas!A:A;0));0)

Dentro da planilha “aba proc” montei a formula acima para buscar os dados na aba lojas, preciso apenas parametrizar no BLIP essa busca. Cliente entra no bloco de busca, O Bot pede para que ele digite o nome da loja, após digitar o nome da loja o bot pesquisa na planilha o telefone correspondente e retorna com o dado. Tentei pelos vídeos e exemplos mais ainda não conseguir finalizar.

Este tópico foi fechado para respostas.

12 comentários

Bruno
  • Specialist
  • July 13, 2020

Oi Alex, tudo bem?

Você conseguiu avançar nesse caso?


AlexSantos
  • Autor
  • Connected
  • July 13, 2020

Oi Bruno, Bom dia!

Continuo travado nesse ponto, acho que falta pouco mais não conseguir evoluir para finalizar…acredito que algum detalhe!

Consegue me ajudar?


Bruno
  • Specialist
  • July 13, 2020

@AlexSantos vou dar uma pesquisada aqui na API do Google pra ver se consigo te ajudar, beleza?

A única vez que precisei fazer algo parecido, usamos uma API intermediária nossa.


Bruno
  • Specialist
  • July 13, 2020

Alex, e se você tratar o resultado dentro do próprio Builder, usando JavaScript?

Digo, dependendo do tamanho da sua planilha, pode fazer mais sentido.

Lendo a documentação deles, usando o método Get (Method: spreadsheets.values.get  |  Google Sheets  |  Google Developers), consigo ter o retorno de todas as colunas, de forma isolada, em um JSON. Por exemplo, a imagine a tabela abaixo:

A B C D E
Quatro 1 2 3 4
Oito 5 6 7 8
Doze 9 10 11 12

Utilizando o endpoint acima, passando como range A1:E3 e agrupamento (majorDimension) rows, o retorno é esse:

Resposta
{
  "range": "'Página1'!A1:E3",
  "majorDimension": "ROWS",
  "values": [
    [
      "Quatro",
      "1",
      "2",
      "3",
      "4"
    ],
    [
      "Oito",
      "5",
      "6",
      "7",
      "8"
    ],
    [
      "Doze",
      "9",
      "10",
      "11",
      "12"
    ]
  ]
}

Aí eu consigo fazer um JavaScript que recebe de entrada alguma coisa (Doze, por exemplo), e retorno o que eu preciso.

response.values.some(function(item){
    if (item[0] == "Doze"){
	     return item;	
    }
});

No exemplo acima, estou pesquisando por Doze (que pode ser passado via parâmetro) e retornando todo o objeto onde “Doze” está:

[“Doze”, “9”, “10”, “11”, “12”]

Já no Script eu poderia transformar os dados em uma String e retornar para o bot já exibir diretamente.


AlexSantos
  • Autor
  • Connected
  • July 13, 2020

Maravilha Bruno, com certeza essa solução vai atender, minha planilha contém apenas 576 linhas e duas colunas (nome + número). Eu ate conseguir retornar a planilha dentro do boot, contudo minha dificuldade é criar o Script e parametrizar no BLIP para exibir apenas o resultado da consulta conforme seu exemplo.


Bruno
  • Specialist
  • July 13, 2020

Alex, vamos fazer isso juntos?

Me passa um exemplo de o que você quer exibir e o que sua chamada para a API retorna.


AlexSantos
  • Autor
  • Connected
  • July 13, 2020

Massa, vamos lá!

Criei uma variável ( getResp ) que retorna todos os dados de uma planilha no Google Sheet dentro do BLIP : https://sheets.googleapis.com/v4/spreadsheets/IDA DA PLANILHA/values/lojas!A:B

O objetivo é simples! O cliente chega no bloco de busca e o bot pergunta! exemplo; “Qual telefone você deseja procurar”

• Cliente digita por exemplo: “Fulano 1”

 Bot pesquisa na planilha e retorna com o contato (telefone) de Fulano 1 “(81) 0000-0001” caso não encontre uma referência ele retorna com uma frase tipo; “Fulano não encontrado” e retorna para o bloco anterior.

Note que estou usando GET e baixando todos os dados, mais preciso apresentar somente o que o cliente pede…ou seja o telefone referente ao contato.

Se preferir posso passar meu contato direto e mostrar o cenário ou te add a esse BOT que estou usando para testes (não é o de produção).

Muito obrigado pela atenção.


Bruno
  • Specialist
  • July 13, 2020

Legal, Alex.

Esse exemplo aqui deve funcionar. Vou fazer ele inteiro:


function run(entrada, getResp){
    getResp.values.some(function(item){
       if (item[0] == entrada){
	     return item[1];	
       }
    });
}

As variáveis de entrada serão:

entrada: Texto digitado pelo usuário. Exemplo “Fulano 1”.
getResp: O retorno que você já tem, com todos os dados da planilha.

Coloque como variável de retorno do script, a variável mensagem, por exemplo. Se você mandar exibir {{mensagem}} pro usuário, deverá ser exibido o que você precisa. Faça o teste, por favor.


AlexSantos
  • Autor
  • Connected
  • July 17, 2020

Oi Bruno, bom dia!

O BLIP está me retornando o erro abaixo! estava tentando descobrir o motivo até então.

{
“error”: {
“code”: 403,
“message”: “Request had insufficient authentication scopes.”,
“status”: “PERMISSION_DENIED”
}
}


Bruno
  • Specialist
  • July 17, 2020

Esse erro é vindo de alguma requisição para o BLiP ou para o Google? É algum ponto de autenticação que está incorreto.


AlexSantos
  • Autor
  • Connected
  • July 17, 2020

Oi Bruno,

Acredito que pode ser do BLIP, eu removi tudo e refiz! não está dando erro mais ainda não obtive o retorno do telefone.

 


Bruno
  • Specialist
  • July 17, 2020

Está retornando o que? Você consegue ver no Debugger?