Como salvar o histórico de atendimento humano via Integração do Blip com Google Drive 18 de maio de 2023 23:06 Atualizado Índice: Criação do projeto Ativação da API do Google Drive Tela de permissão OAuth Criação de credenciais Autorizar Credenciais Configuração de fluxo Veja como salvar o histórico de atendimento humano utilizando a integração do Blip com a API do Google Drive e salve a transcrição das conversas da sua equipe. Através da integração Blip com o Google Drive, é possível que, ao final de cada atendimento humano, seja gerado no Google Drive um arquivo .txt com a transcrição da conversa, mantendo um backup que permite salvar o histórico de atendimento humano do seu chatbot. Criação do projeto Acesse o Google Developers e em sua tela inicial crie um novo projeto. Observação: Se o projeto ainda não estiver selecionado, basta acessar o menu do gif acima e selecioná-lo. Ativação da API do Google Drive Nesta etapa, vamos acessar a opção de menu do lado esquerdo, APIs e Serviços → Biblioteca, pesquisar pelo Google Drive e por fim ativá-la. Observação: Caso a API não seja ativada na primeira tentativa, basta clicar novamente no botão Ativar. Tela de permissão OAuth Com a API ativada, vamos configurar o permissionamento externo. Para isso, no menu esquerdo selecione a opção Tela de permissão OAuth, agora você verá duas opções para User Type, basta selecionar Externo e clicar em CRIAR, conforme o exemplo abaixo: Agora, para finalizar essa etapa, você deverá definir um nome para a API. Insira o e-mail para suporte e dos desenvolvedores (lembrando, você não deve preencher nenhum outro campo). Vá até o final da página e clique em SALVAR E CONTINUAR. Em seguida, nessa próxima página, clique no botão no final da página para SALVAR E CONTINUAR. Você chegará ao final e deverá clicar no botão Voltar para o Painel e por fim Publicar Aplicativo. Criação de credenciais Chegou a hora de criar as credenciais de acesso ao Drive que vão ser utilizados pelo blip, para isso, no menu esquerdo clique em Credenciais → Criar Credenciais → ID do cliente OAuth. Na tela a seguir, escolha o tipo de aplicativo como Aplicativo da Web, novas opções serão listadas, navegue até o fim da página e clique em Adicionar URI na opção URIs de redirecionamento autorizados e inclua OAuth 2.0 Playground e clique em Criar. Será exibido uma pop-up com o ID do cliente e a chave secreta, copie os valores, SALVE e clique em Ok. Autorizar Credenciais Para finalizar as configurações referentes ao Google Drive, vamos acessar OAuth 2.0 Playground. Depois disso, clique na engrenagem no canto superior direito. No pop-up, habilite a opção Use your own OAuth credentials e preencha com os dados que coletou na etapa anterior, conforme o exemplo abaixo: Agora é só clicar CRTL+F e procurar pela palavra Drive. Selecione a opção para expandi-la, e em seguida, selecione a opção que possui https://www.googleapis.com/auth/drive 1, como o exemplo abaixo: Uma nova janela irá abrir. Nela, selecione o e-mail que irá utilizar para autorizar e clique em Permitir, como no exemplo abaixo: Para finalizar, clique em Exchange authorization code for tokens para obter o refresh token, copie o seu valor esalve com as credenciais já salvas nos passos anteriores. Configuração de fluxo A primeira etapa para salvar o histórico de atendimento humano, é obter o token da requisição no fluxo no Builder do Blip. Para isso, nas ações de entrada do bloco imediatamente seguinte ao de atendimento humano, deve-se realizar as seguintes configurações. Crie uma ação de entrada do tipo Requisição HTTP. O Método será POST , o URL será https://accounts.google.com/o/oauth2/token com os Cabeçalhos vazios. Por fim, o Corpo será: { "client_secret": "seu_id_secreto", "grant_type": "refresh_token", "refresh_token": "seu_refresh_token", "client_id": "seu_id_de_cliente"} Salve as variáveis de saída da resposta em statusAuthGoogle e o corpo da resposta em oauth, ficando conforme imagem abaixo. Obs.: Não esqueça de alterar os campos client_secret, refresh_token e client_id pelos obtidos nas etapas anteriores, o grant_type deve permanecer com valor refresh_token. Logo abaixo vamos utilizar a API do Blip para retornar a transcrição da conversa, configure uma nova requisição HTTP, o Método será POST , o URL será https://{{contractid}}.http.msging.net/commands com os Cabeçalhos Content-Type com valor application/json e Authorization com a chave do bot de atendimento humano.Obs: Utilize a url com id do contrato para consumir os endpoints informados abaixo, sua performance e funcionamento podem ser impactados caso não esteja com id do contrato, portanto, é fundamental utilizar a url com o id do contrato para utilizar as requisições http! Por fim, o Corpo será: { "id": "{{random.guid}}", "to": "postmaster@desk.msging.net", "method": "get", "uri": "/tickets/{{input.content@id}}/messages?attendanceTranscriptionOnly=true"} Salve as variáveis de saída da resposta em statusHistory e o corpo da resposta em responseHistory, ficando conforme imagem abaixo. Abaixo dessa requisição, crie uma ação do tipo Executar script passando responseHistory como parâmetro de entrada e salvando o retorno em history, o corpo do script deverá ser: function run(input) {var messages = '';try{// remove non-printable and other non-valid JSON charsinput = input.replace(/\\n/g, " ").replace(/\\'/g, "\\'").replace(/\\"/g, '\\"').replace(/\\&/g, "\\&").replace(/\\r/g, " ").replace(/\\t/g, " ").replace(/\\b/g, "\\b").replace(/\\f/g, "\\f");input = input.replace(/[\u0000-\u0019]+/g,"");obj = JSON.parse(input); i = 0;while(obj["resource"]["items"][i] != null && i < obj["resource"]["items"].length) {var o = obj["resource"]["items"][i];if(o != null){if(o["type"] == 'text/plain'){if(o["direction"] == 'received'){messages = messages + '\n['+dateFormat(o["date"])+'][Usuario] ' + o["content"].replace("<b>","").replace("</b>","");}else{messages = messages + '\n['+dateFormat(o["date"])+'][Atendente] ' + o["content"].replace("<b>","").replace("</b>","");} }else if(o["type"] == 'application/vnd.lime.select+json'){t = '\n['+dateFormat(o["date"])+'][Atendente] ' + o["content"]["text"];for(var j=0; j < o["content"]["options"].length; j++){t = t + " - " + o["content"]["options"][j]["text"].replace("<b>","").replace("</b>","");}messages = messages + t;} else if(o["type"] == 'application/vnd.lime.media-link+json'){if(o["direction"] == 'received'){messages = messages + '\n['+dateFormat(o["date"])+'][Usuario] <Mídia>';}else{messages = messages + '\n['+dateFormat(o["date"])+'][Atendente] <Mídia>';} }else if(o["type"] != 'application/vnd.iris.ticket+json'){if(o["direction"] == 'received'){messages = messages + '\n['+dateFormat(o["date"])+'][Usuario] Conteúdo indisponível';}else{messages = messages + '\n['+dateFormat(o["date"])+'][Atendente] Conteúdo indisponível';} }}i = i+1;}}catch(e){ }return messages.trim();}function dateFormat(input){let d = new Date(input);let dStr = ("0" + d.getDate()).slice(-2) + "-" + ("0" + (d.getMonth()+1)).slice(-2)+"-"+d.getFullYear();dStr = dStr + " "+("0" + d.getHours()).slice(-2)+":"+("0" + d.getMinutes()).slice(-2);return dStr;} Ficando conforme imagem abaixo: Enviar o arquivo para o Google Drive Agora vamos enviar o arquivo para o Google Drive. Crie outra requisição HTTP, com Método será POST , o URL será https://www.googleapis.com/upload/drive/v3/files?uploadType=media com os Cabeçalhos Content-Type com valor application/json e Authorization com o valor Bearer {{oauth@access_token}} . Por fim, o Corpo será apenas {{history}}, ficando conforme imagem abaixo. Salve as variáveis de saída da resposta em statusSend e o corpo da resposta em responseSend. Pronto! O histórico do atendimento que passou por este fluxo será enviado para a conta do Google Drive vinculada ao e-mail autorizado. No entanto, ela estará no formato JSON e sem nome definido. Agora crie mais uma requisição HTTP, com Método será PATCH , o URL será https://www.googleapis.com/drive/v3/files/{{responseSend@id}} com o Cabeçalho Authorization com o valor Bearer {{oauth@access_token}}. Por fim, o Corpo será: {"name":"{{input.content@sequentialId}}.txt","mimeType":"text/plain"} Salve as variáveis de saída da resposta em statusUpdate e o corpo da resposta em responseUpdate, ficando conforme imagem abaixo. O arquivo que irá aparecer no seu Drive será parecido com este: Para mais informações, acesse a discussão sobre o assunto em nossa comunidade ou os vídeos no nosso canal. 😃 Artigos relacionados Histórico de atendimento Pausas Personalizadas Como analisar o histórico de conversas de um contato Como salvar dados do atendimento humano Como enviar SMS via API