Have a Question?
Como notificar novos chamados no Telegram
ATENÇÃO: ESTE DOCUMENTO FOI ATUALIZADO E NO FINAL DELE EXPLICAMOS COMO NOTIFICAR GRUPOS DIFERENTES DO TELEGRAM, DE ACORDO COM A FILA DO CHAMADO.
Em maio de 2021 um membro da comunidade LigeroSmart nos perguntou: É possível notificar um grupo no Telegram quando um chamado é criado?
Aproveitando a ideia, lançamos um pequeno desafio para os participantes da comunidade: Quem conseguiria criar tal notificação utilizando o LigeroEasyConnector!
No vídeo abaixo (cerca de 9 minutos), apresentamos a solução do problema e, logo abaixo, um passo-a-passo para você replicar o feito e começar a receber notificações no seu Telegram:
Passo-a-passo para realizar a integração
1 – Crie um BOT not Telegram (Anote o Token de seu BOT fornecido pelo Bot Father do Telegram
2 – Crie um grupo no Telegram com o BOT que você criou e com as demais pessoas que serão notificadas
3 – Adicione o BOT MyChatInfoBot a este grupo. O que este BOT faz é mostrar o ID do grupo, que será utilizado na integração. Exemplo:
4 – Acesse o LigeroSmart e vá para Administração -> Web Services
5 – Adicione um Web Service, coloque o nome que preferir (utilizarei Telegram no exemplo), adicione um Transporte de Rede como “Requisitante” do tipo LigeroEasyConnector::REST e clique no botão “Salvar”
6 – Ainda na área de “Requisitante”, clique na caixa “Adicionar invoker” e selecione Ligero::LigeroEasyConnector
7 – Coloque o nome que preferir (no exemplo utilizei SendMessage) e adicione um mapeamento de dados de saída da Requisição, selecionando XSLTLigero:
Clique em “Salvar”
8 – Adicione o Disparador “TicketCreate”. Não se esqueça de clicar no + como abaixo (Salve novamente em seguida):
9 – Clique em Configurar no mapeamento XSLTLigero e adicione o código abaixo:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="RootElement">
<xsl:copy>
<chat_id>-560306189</chat_id>
<parse_mode>Markdown</parse_mode>
<text>Novo chamado criado:
*<xsl:value-of select="//Ticket/Title" />*
Para visualizar, acesse:
https://meuligero.com/otrs/index.pl?Action=AgentTicketZoom;TicketID=<xsl:value-of select="//Ticket/TicketID" />
</text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Ficará assim:
(Ajuste a URL para visualizar o chamado conforme necessário)
Clique em Salvar e Finalizar e, quando voltar para a tela do Invoker, clique mais uma vez no Salvar e Finalizar. Você voltará para a tela do Web Service que está sendo criado
10 – Clique no botão Configurar do nosso transporte de Rede como Requisitante:
11 – Ajustes os seguintes parametros:
- Endpoint: https://api.telegram.org
- *Mapeamento do controlador para o invoker ‘SendMessage’: /botXXXXXXXXXXXXXXX/sendMessage
(Substitua XXXXXXX pelo Token do BOT que você criou) - Comando válido da requisição para o invoker ‘SendMessage’: POST
Ficará assim:
Salve, Finalize e realize seus testes.
Você pode acompanhar o resultado no Depurador do Web Service:
Notificar grupos diferentes no Telegram de acordo com a fila do Chamado
Uma forma de notificar grupos diferentes, é ajustando o Chat ID de cada grupo no XSLT, de acordo com a fila, utilizando a propriedade xsl:choose.
IMPORTANTE: Você precisa adicionar o BOT que criou em todos os grupos que deseja enviar notificações.
No exemplo abaixo, podemos utilizar o mesmo template de mensagem para notificar dois grupos diferentes no Telegram, de acordo com a fila do chamado (//Ticket/Queue):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="RootElement">
<xsl:copy>
<chat_id><xsl:choose>
<xsl:when test="//Ticket/Queue='Raw'">-560306189</xsl:when>
<xsl:when test="//Ticket/Queue='Junk'">-574581430</xsl:when>
<xsl:otherwise>-574581430</xsl:otherwise>
</xsl:choose></chat_id>
<parse_mode>Markdown</parse_mode>
<text>Novo chamado criado:
*<xsl:value-of select="//Ticket/Title" />*
Para visualizar, acesse:
https://meuligero.com/otrs/index.pl?Action=AgentTicketZoom;TicketID=<xsl:value-of select="//Ticket/TicketID" />
</text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Você também pode enviar textos diferentes de acordo com o fila, ou seja, cada grupo poderá receber um template diferente. Neste caso, o XSLT ficaria assim:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="RootElement">
<xsl:copy>
<xsl:choose>
<xsl:when test="//Ticket/Queue='Raw'">
<chat_id>-560306189</chat_id>
<text>Novo chamado criado:
*<xsl:value-of select="//Ticket/Title" />*
Para visualizar, acesse:
https://meuligero.com/otrs/index.pl?Action=AgentTicketZoom;TicketID=<xsl:value-of select="//Ticket/TicketID" />
</text>
</xsl:when>
<xsl:when test="//Ticket/Queue='Junk'">
<chat_id>-574581430</chat_id>
<text>New ticket created:
*<xsl:value-of select="//Ticket/Title" />*
https://meuligero.com/otrs/index.pl?Action=AgentTicketZoom;TicketID=<xsl:value-of select="//Ticket/TicketID" />
</text>
</xsl:when>
<xsl:otherwise>
<chat_id>-560306189</chat_id>
<text>Novo chamado criado:
*<xsl:value-of select="//Ticket/Title" />*
Para visualizar, acesse:
https://meuligero.com/otrs/index.pl?Action=AgentTicketZoom;TicketID=<xsl:value-of select="//Ticket/TicketID" />
</text>
</xsl:otherwise>
</xsl:choose>
<parse_mode>Markdown</parse_mode>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Restringindo o disparo a apenas algumas filas
Se quiser que a notificação seja disparada apenas quando o chamado for criado em uma ou mais filas específicas, edite o disparador do Invoker, clicando no botão de edição conforme abaixo:
Em seguida, adicione o filtro com o nome da(s) fila(s), conforme a seguir:
Note que escolhemos a opção Regexp para poder definir que a notificação será disparada apenas quando o chamado for criado ou na fila Raw ou na fila Junk.