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

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.

Oi Alex, tudo bem?

Você conseguiu avançar nesse caso?

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?

@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.

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 (https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/get), 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.

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.

Alex, vamos fazer isso juntos?

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

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.

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.

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”
}
}

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

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.

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