Ir para o conteúdo principal

Zenvia:Envio de SMS utilizando a API Zenvia

No CRM One disponibilizamos mediante a contratação de um serviço adicional o envio de SMS, em caso de dúvidas sobre a contratação, enviar e-mail para comercial@dwu.com.br

Além da contratação da funcionalidade no CRM One, a sua empresa necessita contratar os serviços da Zenvia.

Pré requisito é o Addon estar na versão CRM One 10 release 2021.09.6.001 ou superior.

Contratação Zenvia

Para acessar as informações de contratação poderá faze-lo através do link abaixo:

SMS

Criar uma conta na Zenvia e assinar um plano.

Com a sua conta criada, acessar o painel de administração

Zenvia – API SMS

Para integração com a Zenvia, foram seguidas as orientações contidas no manual: https://zenviasms.docs.apiary.io/#reference/servicos-da-api/envio-de-um-unico-sms

Foi escolhido o formato REST de uso da API, desta forma a comunicação ocorre no endereço:

https://api-rest.zenvia.com/services/send-sms

Para o correto funcionamento é importante observar as orientações da documentação Zenvia, que inclui as informações sobre liberação de portas e endereços de internet.

Arquitetura de funcionamento

No banco de dados do SAP Business One é criado pelo CRM One uma tabela, chamada [@DWU_MSG_SMS], nesta tabela deverão ser inseridos registros correspondentes as mensagens de SMS, cada registro representa apenas uma mensagem.

Os registros podem ser inseridos através de comandos SQL diretamente no banco de dados, ou através de um formulário padrão no SAP Business One, disponível através do menu “Ferramentas > Janelas definidas pelo usuário > DWU_MSG_SMS – CRM One – Mensagem SMS”

Através do caminho acima, será aberto o formulário onde as mensagens de SMS podem ser inseridas manualmente pelo usuário.

Embora, exista a opção de utilização de um formulário no SAP Business One, a forma mais prática de utilização da ferramenta é a criação de comandos de banco de dados, que realizem o processamento e a inserção de registros de forma automatizada na tabela [@DWU_MSG_SMS], podendo para tanto o desenvolvimento de uma função e sua chamada através de gatilhos, via [SBO_SP_TransactionNotification] ou [SBO_SP_PostTransactionNotice].

Tabela [@DWU_MSG_SMS]

A tabela [@DWU_MSG_SMS] possui a relação de campos a seguir, onde cada campo possui uma característica para funcionamento do sistema.

Nesta tabela poderão ser adicionados campos extras pela empresa usuária do SAP Business One, que podem ser usados para controles internos, porém os campos adicionais serão ignorados pelo serviço de envio de SMS.

Na coluna Aplicação, as opções são:

  • “Leitura” é um campo que durante o processamento do serviço ele será apenas lido pelo serviço seus dados processados e enviados.
  • “Leitura e escrita” é um campo que durante o processamento do serviço poderá ter seus dados lidos, dependendo de na configuração de envio ele ser um campo utilizado e após o envio, dependendo da configuração de retorno poderá ter alguma informação gravada no campo com algum retorno da API.
Nome Descrição Aplicação Utilização
Code Code Leitura Inserir um número inteiro sequencial crescente.
Name Name Leitura Inserir um número inteiro sequencial crescente.
U_IdConfig IdConfig Leitura Deverá ser informado o código do cadastro com os dados de integração do formulário “Configuração de envio de SMS” no CRM One, tipicamente o primeiro cadastro de configuração é o 1, mas poderá ser outro número caso mais de uma conta de envio de SMS esteja configurada.
U_ObjType ObjType Leitura Uso livre, como sugestão registrar o ObjType de um documento ou registro do SAP Business One, se por exemplo o SMS corresponde a alguma informação de um documento do tipo “Nota fiscal de saída” tabela OINV o ObjType deste documento no SAP é 13, então neste cenário preencher este campo com o valor 13.
U_ObjEntry ObjEntry Leitura Uso livre, como sugestão registrar o DocEntry de um documento ou registro do SAP Business One, se por exemplo o SMS corresponde a alguma informação de um documento do tipo “Nota fiscal de saída” tabela OINV o DocEntry.
U_Assunto Assunto Leitura Uso livre, como sugestão registrar a descrição para uso interno sobre a mensagem enviada.
U_Destinatario Destinatario Leitura Colocar o telefone do destinatário do SMS, lembrando que para a Zenvia este campo deve ser no formato:
[Código de pais][DDD com 2 dígitos][Numero do celular com 9 dígitos]
Caso o destinatário é do Brasil, com telefone DDD 011 de São Paulo e número de telefone 9.8765.4321, considerando o exemplo registrar: 5511987654321
U_TextoSMS Texto SMS Leitura Mensagem do SMS que deverá ser enviado, lembrando que mensagens não acentuadas podem ser 160 caracteres, ou até 70 caracteres para mensagens acentuadas.
U_Status Status Leitura Preencher com ‘N’ as opções para este campo é N ou Y, onde N significa que a mensagem ainda não foi enviada e Y significa que a mensagem foi enviada para a API da Zenvia, se houve sucesso deve ser verificado nos campos “Status Code” e “Detail Code” observando os retornos de acordo com a tabela da Zenvia.
U_StatusCode Status Code Leitura e escrita Uso livre, sugestão deixar em branco, poderá ser atualizado de acordo com a configuração no retorno do envio.
U_DetailCode Detail Code Leitura e escrita Uso livre, sugestão deixar em branco, poderá ser atualizado de acordo com a configuração no retorno do envio.
U_MensagemRetorno Mensagem Retorno Leitura e escrita Uso livre, sugestão deixar em branco, poderá ser atualizado de acordo com a configuração no retorno do envio.
U_DataMsg DataMsg Leitura e escrita Uso livre, poderá ser atualizado de acordo com a configuração no retorno do envio.
U_HoraMsg HoraMsg Leitura e escrita Uso livre, poderá ser atualizado de acordo com a configuração no retorno do envio.
U_DataEnv DataEnv Leitura Deixar em branco, este campo independente de configuração receberá a data em que o serviço obteve êxito em comunicar com a API.
U_HoraEnv HoraEnv Leitura Deixar em branco, este campo independente de configuração receberá a hora em que o serviço obteve êxito em comunicar com a API.
U_Usuario Usuario Leitura Uso livre.
U_Obs1 Obs1 Leitura e escrita Uso livre, poderá ser atualizado de acordo com a configuração no retorno do envio.
U_Obs2 Obs2 Leitura e escrita Uso livre, poderá ser atualizado de acordo com a configuração no retorno do envio.
U_Obs3 Obs3 Leitura e escrita Uso livre, poderá ser atualizado de acordo com a configuração no retorno do envio.
U_DataProg DataProg Leitura Uso livre
U_HoraProg HoraProg Leitura Uso livre
U_ResponderPara Resposta Para Leitura Uso livre
U_TentativasEnvio Tentativas Envio Leitura Uso livre, deixar em branco ou informar um número inteiro maior que zero, para representar quantas tentativas de envio devem ser processadas.
U_Falhas Falhas Leitura Deixar em branco, campo utilizado para registrar o número de tentativas de envio em caso de fahas de comunicação
U_Remetente Remetente Leitura Uso livre
U_Bool Bool Leitura Uso livre, mas poderá ser usado com as strings ‘true’ ou ‘false’ de acordo com a necessidade

Função para inserir registros na tabela de SMS em SQL para SAP HANA

CREATE PROCEDURE CRMONE_ENVIOSMS
(
Filtro INT      -- Ao realizar a chamada para função, passar como parâmetro o número inteiro da última mensagem enviada e armazenada no campo "@DWU_MSG_SMS"."Code"
)
LANGUAGE SQLSCRIPT
AS
BEGIN
	DECLARE CONTADOR INTEGER = :Filtro;      -- Declara uma variável para servir como contador

	---------------------------------------------------------------------------------------------
	-- Declaração de um cursor que receberá e armazena o resultado de uma consulta
	DECLARE CURSOR _cursor FOR
		SELECT 
		'1' as "IdConfig",
		'13' as "ObjType",
		'123' as "ObjEntry",
		'SMSNF' as "Assunto",
		'5511987654321' as "Destinatario",
		'Emitida a NF número 123' as "TextoSMS",
		'N' as "Status",
		CONCAT(CONCAT(CONCAT(CONCAT(CAST(EXTRACT(YEAR FROM NOW()) AS VARCHAR(4)),'-'),CONCAT(CAST(EXTRACT(month FROM NOW()) AS VARCHAR(4)),'-')),RIGHT(CONCAT('0',CAST(EXTRACT(DAY FROM NOW()) AS VARCHAR(4))),2)),'T09:00:00') AS "Obs1",
		CAST(NOW() as date) as "DataProg",
		'CRM One' as "Remetente",
		'false' as "Bool"
		FROM "DUMMY"					

	-- Abre cursor
	FOR _cursorRow AS _cursor
		DO
		----------------------------------------------------------------------------------------------------------------------------------
		-- Insere linhas da tabela
		----------------------------------------------------------------------------------------------------------------------------------
		CONTADOR = CONTADOR + 1;
		INSERT INTO "@DWU_MSG_SMS"
			(
			"Code",
			"Name",
			"U_IdConfig",
			"U_ObjType",
			"U_ObjEntry",
			"U_Assunto",
			"U_Destinatario",
			"U_TextoSMS",
			"U_Status",
			"U_Obs1",
			"U_Obs2",
			"U_DataProg",
			"U_Remetente",
			"U_Bool"
			 )
			VALUES
			(
			CONTADOR
			,CONTADOR
			,_cursorRow."IdConfig"
			,_cursorRow."ObjType"
			,_cursorRow."ObjEntry"
			,_cursorRow."Assunto"
			,_cursorRow."Destinatario"
			,_cursorRow."TextoSMS"
			,_cursorRow."Status"
			,_cursorRow."Obs1"
			,'NONE'
			,_cursorRow."DataProg"
			,_cursorRow."Remetente"
			,_cursorRow."Bool"
			);
								
								
	END FOR;
	
	CLOSE _cursor;
	
END

---------------------------------------------------------------------------------------------------------------------------

 

Configuração

Acessar no SAP Business One, menu “Módulos > CRM One > Configurações > Serviços > Configuração de envio de SMS”

No formulário “Configuração de envio de SMS”, deverão ser realizadas as configurações:

  • Usuário: informar o nome de usuário disponibilizado pela Zenvia para consumo da API
  • Senha: respectiva senha do usuário disponibilizado pela Zenvia para consumo da API
  • Endereço: informar o endereço da API para envio de SMS, como por exemplo https://api-rest.zenvia.com/services/send-sms
  • Tempo Sinc: deverá selecionar a frequência que o serviço de envios deverá verificar e enviar novos SMS’s, recomendamos 5 minutos ou mais, para casos onde há apenas uma rotina de envios diários sugestão de usar 60 minutos.
  • Limite diário de envios: informar um valor inteiro maior que 1, esta informação é obrigatória, pode ser usada para controle de volume de envios evitando surpresas nos custos com envios, caso sejam inseridas para envio mais mensagens que o definido por dia, ao atingir o limite de mensagens os envios do dia serão interrompidos.
  • Envio: Neste campo deverá ser configurado o formato para geração de Json de envio dos SMS’s, a seguir será explicado com detalhes a configuração deste campo.
  • Retorno: Neste campo deverá ser configurado o formato de retorno de Json com a resposta de envio e resultará na atualização do registro do SMS com o status de processamento, a seguir será explicado com detalhes a configuração deste campo.

Apêndice de tabelas com informações de retorno

As tabelas abaixo representam os retornos da API Zenvia, conforme encontrados no manual disponível em https://zenviasms.docs.apiary.io/# consulta realizada em 25/11/2021.

statusCode

Code Description
00 Ok
01 Scheduled
02 Sent
03 Delivered
04 Not Received
05 Blocked – No Coverage
06 Blocked – Black listed
07 Blocked – Invalid Number
08 Blocked – Content not allowed
08 Blocked – Message Expired
09 Blocked
10 Error
11 Verified

detailCode

Code Description
000 Message Sent
002 Message successfully canceled
010 Empty message content
011 Message body invalid
012 Message content overflow
013 Incorrect or incomplete ‘to’ mobile number
014 Empty ‘to’ mobile number
015 Scheduling date invalid or incorrect
016 ID overflow
017 Parameter ‘url’ is invalid or incorrect
018 Field ‘from’ invalid
021 ‘id’ fieldismandatory
080 Message with same ID already sent
100 Message Queued
110 Message sent to operator
111 Message confirmation unavailable
120 Message received by mobile
121 Message Verified by Google
130 Message blocked
131 Message blocked by predictive cleansing
132 Message already canceled
133 Message content in analysis
134 Message blocked by forbidden content
135 Aggregate is Invalid or Inactive
136 Message expired
140 Mobile number not covered
141 International sending not allowed
145 Inactive mobile number
150 Message expired in operator
160 Operator network error
161 Message rejected by operator
162 Message cancelled or blocked by operator
170 Bad message
171 Bad number
172 Missing parameter
180 Message ID notfound
190 Unknown error
200 Messages Sent
210 Messages scheduled but Account Limit Reached
240 File empty or not sent
241 File too large
242 File readerror
300 Received messages found
301 No received messages found
400 Entity saved
900 Authentication error
901 Account type not support this operation.
990 Account Limit Reached – Please contact support
998 Wrong operation requested
999 Unknown Error