;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

WhatsApp Business organiza a conversa com seus clientes; veja como usar bem

Bruce Mars/ Unsplash
Imagem: Bruce Mars/ Unsplash

Rodrigo Lara

Colaboração para Tilt

07/02/2020 04h00

Quem tem um negócio próprio e precisa lidar com clientes sabe que o WhatsApp é peça importante para o relacionamento e atendimento. O problema é que lidar com muitas conversas ao mesmo tempo pode ser confuso e, no fim, pode fazer com que o app mais atrapalhe do que ajude. É aí que entra o WhatsApp Business.

Trata-se de uma versão do mensageiro que, como o próprio nome diz, é voltada para negócios. Em uma primeira olhada ele não é tão diferente do WhatsApp convencional, mas basta usar por alguns minutos para notar que há ferramentas bem úteis "escondidas" no aplicativo.

O primeiro o é entrar no Google Play (Android) ou App Store (iOS) e baixar o WhatsApp Business —sim, ele é um app separado do WhatsApp tradicional.

Ao abrir o app pela primeira vez ele irá perguntar qual número de celular você deseja utilizar para gerenciar o perfil no aplicativo. No mundo ideal, sua conta pessoal ficaria separada da conta profissional e isso que pode ser feito no mesmo aparelho, caso ele e mais de um chip SIM.

Caso você resolva usar a sua conta pessoal, ela será desconectada do WhatsApp convencional —seu histórico de mensagens, por outro lado, será importado normalmente.

Feita essa seleção, a tela seguinte será a de edição do perfil. Além de escolher o nome que aparecerá no seu perfil do app, é preciso escolher uma categoria para a empresa.

whatsapp business img1 - Reprodução - Reprodução
Imagem: Reprodução

O programa então estará pronto para ser usado, ainda que de maneira básica. Há alguns ajustes que merecem a sua atenção —e que dão toda a graça para essa versão do WhatsApp. Essas configurações se concentram no menu "Ajustes da empresa", ado no menu de configurações do app.

Uma vez nessa área, é possível, por exemplo, preencher com mais detalhes o seu perfil comercial. Outra função útil é criar um catálogo de produtos, onde você poderá colocar não apenas imagens, mas também descrição e preço.

Em "link curto", você pode pegar uma URL para colocar no seu site, assim seus clientes, ao clicarem nela, são direcionados para uma janela do WhatsApp que permite um contato direto.

Em seguida, há a opção "etiquetas", que basicamente serve para você não ficar perdido em meio a várias conversas abertas com clientes —tampouco necessite adicionar os contatos um a um para saber com quem está falando.

whatsapp business img5 - Reprodução - Reprodução
Imagem: Reprodução

Para adicionar uma etiqueta a uma conversa, basta clicar no cabeçalho da janela na qual ela está aberta e definir a etiqueta a ser utilizada.

whatsapp business img7 - Reprodução - Reprodução
Imagem: Reprodução

Em seguida, é possível configurar mensagens automáticas, algo útil para não deixar um cliente "falando sozinho", o que não seria nada bom para o seu negócio, certo?

A primeira a ser configurada é a mensagem de ausência. No menu, é possível definir um horário para o qual ela será enviada (fora do horário de expediente, por exemplo) e para quem ela será enviada. A opção "exceto para meus contatos", por exemplo, permite que você converse com amigos, mas atenda novos clientes apenas quando estiver em horário de trabalho.

whatsapp business img8 - Reprodução - Reprodução
Imagem: Reprodução

A mensagem de saudação serve para você enviar uma resposta automática sempre que alguém te contatar pela primeira vez ou em uma conversa com 14 dias de inatividade. Além de personalizar a mensagem, também é possível escolher para quais contatos você irá enviar esse texto.

Por fim, há as respostas rápidas. Essa opção permite definir mensagens padronizadas para serem mandadas mediante a utilização de atalhos. Você pode não apenas definir o conteúdo em texto, bem como determinar o envio de imagens.

Os atalhos são definidos com o uso de uma barra seguido de uma palavra. Um exemplo seria algo como "/atalho".

SIGA TILT NAS REDES SOCIAIS