Como desenvolver o envio de WhatsApp com um link para uma tela usando o Latromi

Visão Geral

Neste tópico vou mostrar como alimentar uma fila de envio para WhatsApp, criar um bot que envie a mensagem e como esse formulário é acessado a partir do link enviado. Para isso, usaremos como exemplo a realização de um Orçamento de Compra.

Exemplo de Orçamento de Compra

Nosso exemplo vai se basear no seguinte cenário: o operador do sistema precisa cotar uma série de itens para repor no seu estoque. Para isso, ele vai enviar uma mensagem pelo WhatsApp para o fornecedor. Nesta mensagem estará um link com acesso para uma tela do Latromi, com a lista de produtos a serem cotados. Ou seja, o fornecedor será direcionado para o sistema e ele mesmo fará a inclusão dos valores para avaliação.
Para ver este e outros exemplos do uso do bot de mensagens, clique aqui.

Template WhatsApp

Para enviar mensagens via WhatsApp é necessário criar um template padrão da mensagem a ser enviada. Nosso template de exemplo será conforme a figura a seguir.
template whats

Esse template é criado na Zenvia, que é um Provedor de Mensagens Terceirizado. Para mais informações sobre esse serviço, clique aqui.

Importante: na criação do template, é necessário a inclusão de um botão do tipo URL. No link do botão é informado um endereço público do Latromi, seguido de: ‘encryptedurl/?basic=true&q={{chave}}’. Essa ‘{{chave}}’ que consta no link é a parte que será criptografada e carregará as informações necessárias para abrir a tela correta.

Tabelas e Funções

Para que o Bot de Mensagens opere corretamente, é necessário a criação de uma tabela de Fila de Envio, que é de onde o Bot vai coletar as informações para alimentar no template, verificar quais mensagens enviar e quais já foram enviadas.

CREATE TABLE bot_filaenviowhatsapp
(
	  id  SERIAL NOT NULL
	, dtinclusao TIMESTAMP WITH TIME ZONE
	, dtenvio TIMESTAMP WITH TIME ZONE
	, idtemplate TEXT
	, fonedestinatario TEXT
	, parametros JSON
	, CONSTRAINT pk_bot_filaenviowhatsapp_id PRIMARY KEY (id)
);
COMMENT ON TABLE bot_filaenviowhatsapp IS 'Fila de envio de mensagens via WhatsApp';
COMMENT ON COLUMN bot_filaenviowhatsapp.id IS 'ID da fila de envio WhatsApp';
COMMENT ON COLUMN bot_filaenviowhatsapp.dtinclusao IS 'Data de inclusão do registro';
COMMENT ON COLUMN bot_filaenviowhatsapp.dtenvio IS 'Data de envio do registro';
COMMENT ON COLUMN bot_filaenviowhatsapp.idtemplate IS 'ID do template aprovado na Zenvia';
COMMENT ON COLUMN bot_filaenviowhatsapp.fonedestinatario IS 'Telefone do destinatário';
COMMENT ON COLUMN bot_filaenviowhatsapp.parametros IS 'Parametros utilizados no template da Zenvia';

A função a seguir vai ser implementada no bot de mensagens. Ela verifica se a tabela bot_filaenviowhatsapp possui registros sem data de envio e que possuem o ID do template em questão, passado como parâmetro da função.

CREATE TYPE tp_bot_retorno_filaenviowhatsapp AS
   (idtemplate text,
    fonedestinatario text,
    parametros json
	);

CREATE OR REPLACE FUNCTION fnc_bot_retorna_filaenviowhatsapp(
    pbatualizarenvio boolean,
    pctemplateid text)
  RETURNS SETOF tp_bot_retorno_filaenviowhatsapp AS
$BODY$
DECLARE
    rFila RECORD;
       
BEGIN

	FOR rFila IN
		SELECT 
			  idtemplate
			, fonedestinatario
			, parametros
			
		FROM bot_filaenviowhatsapp
		
		WHERE dtenvio IS NULL
        AND idtemplate = pcTemplateId
		ORDER BY id
	LOOP
		RETURN NEXT rFila;
	END LOOP;
    
	-- Atualiza como enviado	
	IF pbAtualizarEnvio	THEN
		UPDATE bot_filaenviowhatsapp
		       SET dtenvio = CURRENT_TIMESTAMP
		WHERE dtenvio IS NULL
		AND idtemplate = pcTemplateId;
	END IF;
	
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

Formulário de Orçamento de Compras

A imagem abaixo mostra o formulário que deve ser enviado ao fornecedor.
orçamento

Esta tela foi desenvolvida para tamanho mobile e no evento Load do formulário uma variável ‘cCelular’ é alimentada com valor: {URL celular}

Há várias maneiras de preparar a tela para receber os dados oriundos do link enviado pelo WhatsApp. Como visto acima, alimentar uma variável é uma delas.
Outra possibilidade é alimentar um campo de tela. Na figura abaixo, um exemplo que um campo do tipo texto é alimentado com esse valor.

Uma Record também pode ser utilizada, conforme o código abaixo. Nesta Record, a informação passada no link era um id.

SELECT
      id
    , nomecliente
    , TO_CHAR(dtinc,'DD/MM/YYYY') AS datapedido
    , status
FROM entrega

WHERE entrega.id = {?URL nId}

Além disso, é necessário configurar este formulário para ser acessado pelo usuário Anônimo, para que, ao clicar no botão enviado na mensagem, o usuário seja direcionado imediatamente para essa tela, sem necessidade de autenticação. Sendo assim, primeiramente é necessário incluir o formulário no Cadastro de Menus (Client Latromi - Desenvolvimento - Menus).

Após a inclusão do formulário em um menu, é preciso realizar a liberação de acesso anônimo, na página inicial do Latromi, no link Permissões de Usuários.
image

Formulário Experimente o Método Latromi

Com o template WhatsApp aprovado pela Zenvia e com o formulário de Orçamento de Compras finalizado, é hora de mexermos no formulário inicial. Nele, o usuário deve inserir seu nome, telefone e clicar nos botões que deseja receber informações.

No nosso exemplo, ao clicar no botão Orçamento de Compra, um novo registro é incluído na tabela bot_filaenviowhatsapp, conforme o código abaixo.

INSERT INTO bot_filaenviowhatsapp
(
      dtinclusao 
    , idtemplate
    , fonedestinatario
    , parametros
)
VALUES
(
      CURRENT_TIMESTAMP
    , 'xxxxxxxxxxxxxxxxxxx0011xxxxxxx'::VARCHAR -- id do template
    , '{?VAR cCelular}'::VARCHAR --telefone informado
    , ('{"chave":'||TO_JSON(replace(encode(
                ('/AprovacaoOrdemCompra/'||
                '?celular='||'{?VAR cCelular}'::VARCHAR
                )::BYTEA, 'base64'::text), E'\n', ''))||'}')::JSON
);

Bot de Mensagens

O Bot vai rodar a função fnc_bot_retorna_filaenviowhatsapp, conforme o código abaixo, na aba Fonte de Dados.

SELECT 
    idtemplate
    ,fonedestinatario
    ,parametros->>'chave' AS chave
    ,'abc0011abc00XXX' AS tokenapi -- esse token é obtido na conta da Zenvia
    ,'5551999999999' AS idremetente -- telefone do remetente é obtido na conta da Zenvia

FROM bot.fnc_site_bot_retorna_filaenviowhatsapp
    (
    TRUE,
    'xxxxxxxxxxxxxxxxxxx0011xxxxxxx' --parâmetro da função é o id do template que foi inserido na tabela fila de envio
    )

Abaixo seguem as demais configurações do Bot.


Na aba Mensagens, é necessário incluir todos os campos que o template cadastrado na Zenvia espera. No nosso exemplo, é esperado somente a chave, que é utilizada no link.

Por último, é necessário cadastrar e ativar o Bot de Mensagens criado. No menu LATROMI - LPA - Agendador de Tarefas.

Para mais informações a respeito do Bot de Mensagens, clique aqui.

6 curtidas