Ir para conteúdo
  • Cadastre-se

dev botao

ACBrSMS


Ver Solução Respondido por wagner aragao,
  • Este tópico foi criado há 3772 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Moderadores
Postado

Ainda estou fazendo o componente, e algumas coisas ainda não foram colocadas, mas o Demo está bem completo e explicado, o componente não é muito complexo, bem simples até.

Ele visa simplesmente utilizar modens 3G ou industriais para o envio de sms, somente isso, o componente nasceu da demanda de vários usuários por esse tipo de aplicação.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • 3 semanas depois ...
  • Solution
Postado

Olá Regys,

Esse projeto poderá ser utilizado com arquivo TXT como o ACBRNFeMonitor e ACBRMonitor ou somente atraves dos componentes do delhpi/lazarus ??

t+

MicroLine Software

xHarbour Simplex 1.2.3/xDev 0.70/xDesigner by L.F.Basso/HWGui

ACBRMonitorPlus OpenSSl/Capicom

[email protected]

69-98114-9250

Postado

Olá pessoal, estou testando o ACBrSMS com o modem ZTE MF100 e ao tentar enviar uma mensagem tanto individual quanto em lote pelo sistema demo o mesmo dá um erro "Communication error 9997: Timeout during operation" alguém sabe como resolver? (em lote o mesmo só envia a mensagem para o primeiro número do lote)

  • Moderadores
Postado

Essa mensagem provavelmente acontece porque tua operadora está levando mais do que os 10 segundos configurados por padrão para enviar o SMS, aumente o valor da propriedade ATTimeout, já vi casos de ter que colocar 30 segundos para passar, depende de cada operadora.

O envio em lote permite enviar para mais de um número de telefone, basta formar o lote com as mensagens que deseja seguindo os padrões mostrados no demo.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Pessoal, encontrei o erro ... no arquivo ACBrSMSClass.pas onde tem:

// definir o número de telefone do destinatário ******************************

Cmd := 'AT+CMGS="' + ATelefone + '"';

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_NUMERO_TELEFONE + sLineBreak + fpUltimaResposta);

// Enviar a mensagem *********************************************************

Cmd := Trim(AMensagem) + CTRL_Z;

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_ENVIAR_MENSAGEM + sLineBreak + fpUltimaResposta);

######################################################################

Substituir por:

// definir o número de telefone do destinatário ******************************

Cmd := 'AT+CMGS="' + ATelefone + '"' + #13#10; // Modificado

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_NUMERO_TELEFONE + sLineBreak + fpUltimaResposta);

// Enviar a mensagem *********************************************************

Cmd := Trim(AMensagem) + #26; // Modificado

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_ENVIAR_MENSAGEM + sLineBreak + fpUltimaResposta);

  • Moderadores
Postado

Pessoal, encontrei o erro ... no arquivo ACBrSMSClass.pas onde tem:

// definir o número de telefone do destinatário ******************************

Cmd := 'AT+CMGS="' + ATelefone + '"';

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_NUMERO_TELEFONE + sLineBreak + fpUltimaResposta);

// Enviar a mensagem *********************************************************

Cmd := Trim(AMensagem) + CTRL_Z;

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_ENVIAR_MENSAGEM + sLineBreak + fpUltimaResposta);

######################################################################

Substituir por:

// definir o número de telefone do destinatário ******************************

Cmd := 'AT+CMGS="' + ATelefone + '"' + #13#10; // Modificado

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_NUMERO_TELEFONE + sLineBreak + fpUltimaResposta);

// Enviar a mensagem *********************************************************

Cmd := Trim(AMensagem) + #26; // Modificado

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_ENVIAR_MENSAGEM + sLineBreak + fpUltimaResposta);

Se você prestou atenção aos fontes percebeu que o método enviarcomando adiciona automaticamente o #13#10 ao final do comando e que a constante CTRL_Z é igual ao #26, estas modificações portanto não fariam efeito algum, aumento o tempo no ATTimeout que vai funcionar.

Você instalou corretamente o driver do modem?

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Moderadores
Postado

Quanto as mensagens recebidas, veja no demo, o método ainda não está terminado mas ele retorna um arquivo com as mensagens, no futuro ao invés do arquivo será criada uma lista estou trabalhando nisso ainda e como tenho pouca informação dos retornos disponíveis e ando meio doente, então ta andando meio devagar essa parte.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Moderadores
Postado

Régys, no Demo aqui só aparece OK no arquivo mensagens.txt .... não chega nenhuma mensagem.

veja nos fontes do demo, é passado ao método um parametro string com o path do arquivo, basta procurar por este arquivo que as mensagens estarão dentro dele, você pode personalizar também onde será gravado.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Régys, eu achei o arquivo e como lhe disse ... "dentro dele só aparece um OK e mais nada de mensagem"... será que num falta algum loop para obter o restante das mensagens?

Postado

Régys, para conseguir ler eu tive de fazer as seguintes alterações em "procedure TACBrSMSClass.ListarMensagens(const AFiltro: TACBrSMSFiltro;

const APath: String);" ... e antes de ...

###############################

case AFiltro of

fltTudo: cmd := 'AT+CMGL="ALL"';

fltLidas: cmd := 'AT+CMGL="REC READ"';

fltNaoLidas: cmd := 'AT+CMGL="REC UNREAD"';

end;

###############################

Coloquei:

###############################

// definir o modo de envio ***************************************************

Cmd := 'AT+CMGF=1';

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_INICIALIZACAO + sLineBreak + fpUltimaResposta);

// definir ver todas as mensagens ***************************************************

Cmd := 'AT+CPMS="MT"';

Self.EnviarComando(Cmd);

if not Self.ATResult then

raise EACBrSMSException.Create(FALHA_LEITURA_MENSAGEM + sLineBreak + fpUltimaResposta);

case AFiltro of

fltTudo: cmd := 'AT+CMGL="ALL"';

fltLidas: cmd := 'AT+CMGL="REC READ"';

fltNaoLidas: cmd := 'AT+CMGL="REC UNREAD"';

end;

#####################################

Sem essas linhas que lhe informei ai, o comando AT+CMGL="ALL" dava ERROR

  • Moderadores
Postado

Fiz uma atualização no modelo ZTE usando suas especificações, faça o teste e me reporte qualquer coisa.

Quando for mecher nos comandos faça na classe do modelo não na classe geral, nela ficarão somente os comandos AT padrão.

Obrigado pela ajuda com os testes.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Este tópico foi criado há 3772 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.