Como integrar o Google Forms em APIs


Reputação 6
Crachá

Olá pessoal, tudo bem?


Recentemente precisei utilizar o Google Forms em uma tarefa e resolvi compartilhar por aqui. Acho que será de grande proveito para muitos desenvolvedores. Então, vêm comigo 😉


Uma das motivações para se utilizar o Google Forms é sua praticidade. Com ele é bastante fácil coletar dados de usuários e exportar para outros locais. Entretanto, o que pouca gente sabe é que é possível integrar o Forms com serviços de API e assim processar os dados coletados no formulário a cada envio 😧. E fazer isso é bastante simples.


Os passos são os seguintes:



1 - Criar o formulário normalmente com todos os campos desejados.




2 - Entrar no editor de scripts do Google


Para isso, clique nos 3 pontinhos no canto superior direito, ao lado da sua foto de perfil. Em seguida clique na opção “Editor de Scripts”


image



3 - Configurar o script para processar os dados do forms e chamar sua API


Essa parte é bem técnica e precisa-se conhecer um pouco de programação para configurar tudo corretamente.


Para esta demonstração irei realizar um merge no contato de um usuário utilizando essa command do Blip. Entretanto, pode-se integrar qualquer API aqui, inclusive realizar várias chamadas consecutivas. Caso tenha interesse e queira ver mais detalhes sobre o que é possível realizar nos scripts do Google veja esta documentação.


Seguindo nossa demonstração, criei um script que obtêm os dados preenchidos no formulário e salva esses dados na variável ‘Dados’ no extras do contato no Blip. Nas linhas 11 a 20, eu processo os dados do formulário e converto para um objeto no formato {'Pergunta 1': 'Resposta 1', ..., 'Pergunta n': 'Resposta n'}. Nas linhas 22 a 33, eu configuro o body da requisição para a command de merge nos contatos do Blip. Nas linhas 35 a 43 eu configuro e executo a requisição HTTPs ao Blip. A função uuid é utilizada apenas para gerar o guid da command.


var POST_URL = "Link de commands do seu bot";

function uuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}

function onSubmit(e) {
let form = FormApp.getActiveForm();
let allResponses = form.getResponses();
let latestResponse = allResponses[allResponses.length - 1];
let response = latestResponse.getItemResponses();
let forms = {};
for (var i = 0; i < response.length; i++) {
let question = response[i].getItem().getTitle();
let answer = response[i].getResponse();
forms[question] = answer;
}

let command = {
"id": uuid(),
"method": "merge",
"uri": "/contacts",
"type": "application/vnd.lime.contact+json",
"resource": {
"identity": forms["Telefone"] + "@wa.gw.msging.net",
"extras": {
"Dados": JSON.stringify(forms)
}
}
}

var options = {
"method": "post",
"contentType": "application/json",
"headers" : {
"Authorization" : "Authorization do seu bot",
},
"payload": JSON.stringify(command)
};
UrlFetchApp.fetch(POST_URL, options);
};

Os dados para realizar essa chamada de API você consegue na opção ’ Informações de conexão’ nas configurações do seu bot.



4 - Configurar o script para executar sempre que uma resposta do forms for enviada


Para isso, no canto esquerdo do editor de scripts selecione a opção Acionadores.


image


Em seguida, clique no botão Adicionar acionador. Na tela que abrir, na opção Escolha a função que será executada selecione a função OnSubmit, pois é ela que realiza todo o processo de requisição http que configuramos. Na opção tipo de evento escolha Ao enviar formulário.



A opção Configurações de notificação de falha configura o período que você deseja receber e-mails do Google reportando as falhas deste script. As falhas podem ocorrer quando há algum erro no script ou quando a API que estamos chamando apresenta algum problema. Neste teste coloquei para receber semanalmente.


E é isso! Agora sempre que o forms for preenchido o Google irá executar o script e enviar os dados para o Blip.


Obs: Após salvar as configurações do acionador, pode demorar por volta de 5 minutos até o formulário sincronizar com o script.


E ai, gostaram dessa possibilidade? Caso tenham dúvidas sobre essa integração mandem aqui nos comentários que tentarei ajudar.


7 comentários

Muito legal isso. Realmente abre um leque de possibilidades hahaha


Eu fazia com o formulário do Asana, mas agora com o do Google pode até ficar mais fácil

Um hero é um hero, né mores?

Muito bom para não tirar o usuário do WhatsApp para responder um formulário 🤩

Reputação 7
Crachá +3

Olá @raphael.silva ficou muito bom e bem explicado o seu tópico depois seria legal mostrar para o pessoal a possibilidade de enviar a notificação ativa para o contato assim que terminar de responder o formulário.

Reputação 6
Crachá

Opa, vlw 😀


Pensei nessa possibilidade mesmo, mas fiquei na dúvida sobre qual API chamar para enviar a notificação ativa. A Take possui alguma API pública de disparo de notificação ativa que podemos compartilhar por aqui? Tendo isso faço um novo post explicando isso.

Reputação 7
Crachá +3

@raphael.silva temos sim consuma essas duas chamadas que estão nessa doc que é sucesso : Blip Docs | API Reference

Massa demais @raphael.silva!

E temos como linkar o ID do ticket com a resposta do formulário, e depois verificar isso em algum lugar?

Comente