Como quebrar linha em mensagem do chatbot do Telegram?

Bom dia srs

Estou fazendo com sucesso a utilização do driver do Telegram o VBSCRIPT V1.1.13

Porém estou tentando fazer uma quebra de linha nas mensagens pois gostaria de enviar uma lista toda em uma mensagem só, eu tentei o texto \n junto com a mensagem a ser enviada porém sem sucesso ainda

alguém pode me ajudar? Desde já agradeço

Vitor,

Use a função Chr(10), onde 10 é o código ASCII para quebra de linha.

1 Like

Boa tarde

Eu já utilizei o comando Chr(10) , em uma MsgBox ocorre a quebra de linha, porém em uma mensagem do chatbot do Telegram não ocorre, segue abaixo código utilizado e foto da mensagem recebida por telegram

Sub CommandButton1_Click()

	
	SET TT = Application.GetObject("[01_DrvWS].Send")
	
	TT.WriteEx 1
	
	Application.GetObject("[01_DrvWS].Message").Value = ("phrase line 1"+Chr(13)+Chr(10)+"phrase line 2")	


	
End Sub

Desde já agradeço

Obrigado pela resposta

Tenta com o código hexadecimal. Por exemplo:

Application.GetObject("[01_DrvWS].Message").Value = ("linha 1+%0A+linha 2")

1 Like

Boa tarde Paulo

Eu consegui com essa solução, muito obrigado

Paulo boa tarde você sabe se o Elipse E3 consegue ler as mensagens enviadas pelo Telegram? Conhece algum exemplo de aplicação? Com este exemplo eu consegui somente enviar, mas não receber

Obrigado

Bom dia Vitor,

A própria API do Telegram possui um método onde é possível obter a lista de atualizações para o seu BOT utilizando uma requisição GET, e então visualizar as mensagens enviadas.
https://api.telegram.org/bot_ID/getUpdates

É possível notar que o item text retorna uma string com a mensagem enviada.

Essa estrutura JSON possui arrays com tamanhos variáveis, e não apenas objetos de pares nome/valor, portanto será necessário percorrer os arrays inserindo novos laços (for) dentro do script.

Com base no artigo Consumindo e enviando dados de um webservice que utiliza o formato JSON, adaptei o exemplo para ler as últimas 4 mensagens.

Dependendo da sua demanda, você pode ajustar conforme necessário.

Exemplo utilizado:

Sub CommandButton10_Click()
DIM oJsonParser
Set oJsonParser = new aspJSON 'Criação do objeto tipo aspJSON
'Inserir endereço do Webservice
URL = "https://api.telegram.org/bot1294991797:AAFUrfZFoO4ezUc7IZAGY-B1jTWNFbGmJh0/getupdates"
oJsonParser.LoadJSON(URL) 'Carregando objeto JSON

for i = 0 to oJsonParser.data.count - 1
'msgbox oJsonParser.data(i).item("ok")
aux = (oJsonParser.data(i).item("result").count -1) -3 'Pegar as 4 últimas mensagens

	 for b = aux to oJsonParser.data(i).item("result").count -1	
    	 msgbox oJsonParser.data(i).item("result").item(b).item("update_id")  
    	 msgbox oJsonParser.data(i).item("result").item(b).item("message").item("text")
     	 next
    next 

    End Sub

'Class aspJSON
2 Likes

Boa tarde @delio e obrigado pela resposta

Tentei executar o seu exemplo acima e apareceu uma tela de erro, sabe me dizer o motivo? Acredito que pode ser a falta de um driver

Obrigado

Att,

image

Vitor,

Você precisa inserir a classe aspJSON no script:
https://kb.elipse.com.br/wp-content/uploads/2021/04/Class_asp_JSON.txt

1 Like

Boa tarde, Eu adiciono nesta tela? Porque eu adicionei o script ai e a tela de erro continua

Boa noite consegui executar o exemplo obrigado

Boa tarde @delio agradeço pela ajuda e consegui realizar o exemplo enviado, pode me ajudar novamente? No exemplo realizado foi utilizado um CommandButton para executar o script, sabe uma forma do elipse detectar automaticamente uma nova mensagem recebida pelo telegram e disparar um evento (MsgBox “teste” por exemplo) quando a mensagem for enviada?

Acredito que é possível utilizando um Timer, mas gostaria de procurar outra opção se possivel

Desde já agradeço

Boa tarde Vitor,

Se você realmente precisa verificar a ocorrência de novas mensagens a partir do E3, uma alternativa seria criar um evento cíclico (na tela ou no objeto Viewer) que realize a chamada JSON e compare o ID das mensagens.
Quando o IDAtual for diferente do anterior, o msgbox é lançado na tela.
Esse tipo de evento não é recomendado, mas não há outra forma de verificar as mensagens sem realizar o script.

Uma sugestão seria criar um evento de usuário, que seja repetido a cada X segundos:

Sub TelaExemplo_Change()
DIM oJsonParser
Set oJsonParser = new aspJSON 'Criação do objeto tipo aspJSON
'Inserir endereço do Webservice
URL = "https://api.telegram.org/bot1294991797:AAFUrfZFoO4ezUc7IZAGY-B1jTWNFbGmJh0/getupdates"
oJsonParser.LoadJSON(URL) 'Carregando objeto JSON

for i = 0 to oJsonParser.data.count - 1
aux = (oJsonParser.data(i).item("result").count -1)' 'Pegar a última mensagem

	 for b = aux to oJsonParser.data(i).item("result").count -1	
     IDAtual = oJsonParser.data(i).item("result").item(b).item("update_id")  
    	
    	 If IDAtual <> Item("ID_Ant").Value then
    	 msgbox "Texto da Mensagem: " & oJsonParser.data(i).item("result").item(b).item("message").item("text")
    	 end if
     	 next
    next 
Screen.Item("ID_Ant").Value = IDAtual
    End Sub

Class aspJSON

Outra alternativa, seria implementar o script acima via Driver Elipse VBScript.
Para isso, sugiro que verifique o anexo JSON_VBScriptDriver.zip do artigo Consumindo e enviando dados de um webservice que utiliza o formato JSON.

1 Like

Boa tarde e obrigado pela resposta

Estou tentando alimentar uma tabela de um banco de dados do Elipse E3 com as mensagens recebidas pelo telegram. Já consegui fazer essa alimentação do banco de dados utilizando um timer, porém acredito que não é o ideal pois ele estará executando um script a cada 30 segundos, o que poderá ocasionar problemas de performance da aplicação, estou tentando executar este script no servidor e não no Viewer, mas o script não exibirá um MsgBox, mas sim uma ação de gravação do banco de dados

Obrigado pela ajuda

Bom dia @delio Sabe como apagar o historico de mensagens do linkhttps://api.telegram.org/bot*****************************/getupdates ? Falo isso porque acredito que o comando .count irá varrer esse historico e se ele for grande pode causar problemas de performance

Desde ja agradeço

Vitor,
Você pode limitar a quantidade de atualizações via link da API usando o parâmetro offset:

https://api.telegram.org/bot***********************/getupdates?offset=-2

Outra alternativa seria limitar o .count.

Para maiores informações sobre a API Telegram, sugiro que verifique https://core.telegram.org/bots/api.

1 Like