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

**URL:** <https://community.latromi.com.br/t/como-desenvolver-o-envio-de-whatsapp-com-um-link-para-uma-tela-usando-o-latromi/1199>\
**Category:** Tutoriais\
**Created:** [Março 6, 2024, 7:53pm UTC](https://community.latromi.com.br/t/como-desenvolver-o-envio-de-whatsapp-com-um-link-para-uma-tela-usando-o-latromi/1199 "2024-03-06T19:53:31Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Alessandra\_Raupp](https://community.latromi.com.br/user_avatar/community.latromi.com.br/alessandra_raupp/32/1670_2.png) [@Alessandra\_Raupp](https://community.latromi.com.br/u/Alessandra_Raupp)\
**Post date:** [Março 6, 2024, 7:53pm UTC](https://community.latromi.com.br/t/como-desenvolver-o-envio-de-whatsapp-com-um-link-para-uma-tela-usando-o-latromi/1199/1 "2024-03-06T19:53:32Z")

</div>

## 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](https://site.latromi.com.br/bot-whatsapp/).

## 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](https://community.latromi.com.br/uploads/default/original/2X/8/84fcbb54ecdfaa61ebd89f6435baa97baa9fdc2e.png)

Esse template é criado na Zenvia, que é um **Provedor** de Mensagens _Terceirizado_. Para mais informações sobre esse serviço, [clique aqui](https://community.latromi.com.br/t/bot-de-mensagens-zenvia/723).

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

 ![image](https://community.latromi.com.br/uploads/default/original/2X/6/640ff6e7c28ddd275b4dbda739dcc48cb5fc8d63.png)

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

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

```nohighlight
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](https://community.latromi.com.br/uploads/default/original/2X/8/831833007e5a75136672b89adc43524a2a9595e1.png)

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.

 ![popular campos](https://community.latromi.com.br/uploads/default/original/2X/b/b46d57af1cde2cd65de8ca2c06a3d7b25517a795.png)

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

```nohighlight
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).

 ![cadastro de menus](https://community.latromi.com.br/uploads/default/original/2X/d/d0ef785a3370b7702c281df402903451617822e3.png)

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](https://community.latromi.com.br/uploads/default/original/2X/8/838fdfe6aa1f51b6d5da4c473b4e0c58c58c95cc.png)

 ![permissão usuario](https://community.latromi.com.br/uploads/default/original/2X/0/010f82620da1f515c820d99a813126a10b483765.png)

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

 ![formulário site](https://community.latromi.com.br/uploads/default/original/2X/d/de14e87a778ace14b5402b6cc86f0efd2afd5c40.png)

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.

```nohighlight
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**.

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

 ![image](https://community.latromi.com.br/uploads/default/original/2X/d/d6dc9f08ee91e8d295b0b2700ff40e6239165e02.png)  
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.  
 ![image](https://community.latromi.com.br/uploads/default/original/2X/d/dd1a3ccd55032db825a51f70bfd1059fb178540f.png)

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](https://community.latromi.com.br/t/bot-de-mensagens/715).
