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