Quando surgiu o problema comercial de criar um mecanismo de alta velocidade para notificar o usuário sobre eventos no Contact Center (excesso de filas) e uma central telefônica (notificação de chamadas perdidas), surgiu o pensamento sobre o Telegram.
De fato, nesta situação, Telegram, esta é apenas uma das opções possíveis. Pode ser feito via SMS. Você pode fazê-lo brega por email e, em seguida, ele chegará ao usuário em um celular e o servidor Push sairá dele. Ou faça-o diretamente no aplicativo em seu celular para que o Push seja obtido diretamente dele.
Mas cada método tem suas desvantagens. Você tem que pagar pelo SMS. O email cega o usuário constantemente e o usuário para de responder. Um aplicativo separado no telefone deve ser feito para cada plataforma, instalar e organizar o registro de tokens nos servidores internos da empresa. Uma solução com telegrama não apresenta essas desvantagens, embora o aplicativo deva ser instalado em um dispositivo móvel, desktop ou outro local. No entanto, o Telegram também tem um sinal de menos. Este é o nosso querido Roskomnadzor, que não gosta muito dele. Isso introduz algumas vantagens adicionais da implementação.
Então
Inspirado por
isso e por
isso, comecei a trabalhar.
Para começar, eu criei um bot no BotFather

Em seguida, você já deve trabalhar diretamente com a API.
Tendo encontrado
esta publicação valiosa, me virei para a
Hetzner e organizei meu proxy http para trabalhar com a API por apenas 3 euros por mês em território alemão.
O próximo passo necessário é criar um grupo que inclua seus usuários e o bot de bate-papo recém-criado. Isso é proteção contra spam. O que o Viber está faltando, por exemplo.

Em seguida, você precisa descobrir os números dos usuários necessários.
Para fazer isso, cada usuário deve lançar uma mensagem no chat. Em geral, é arbitrário. Mas usamos, por exemplo, para esse fim, a frase registradora e um determinado número. O número será o identificador para o PBX.

Agora vamos voltar para a API.
Usando o proxy recém-criado, fazemos a seguinte solicitação diretamente do shell do proxy. Se você já mudou o navegador para trabalhar com ele, é possível diretamente do navegador.
root@ubuntu-dsenash ~ # wget https://api.telegram.org/bot553:AAGrXfKHw/getUpdates --2018-06-21 11:11:25-- https://api.telegram.org/bot553:AAGrXfKHw/getUpdates Resolving api.telegram.org (api.telegram.org)... 149.154.167.220, 2001:67c:4e8:f004::9 Connecting to api.telegram.org (api.telegram.org)|149.154.167.220|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 370 [application/json] Saving to: 'getUpdates' getUpdates 100%[==================================================================================>] 370 --.-KB/s in 0s 2018-06-21 11:11:25 (14.1 MB/s) - 'getUpdates' saved [370/370] root@ubuntu-dsenash ~ # cat getUpdates {:true,:[{:90770, :{:43,:{:3918,:false,:,:,:},:{:3918,:,:,:},:1529572218,:,:[{:0,:9,:}]}}]}root@ubuntu-dsenash ~ #
Em vez de "553XXXXXXX: AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhh", o que você recebeu do BotFather é indicado.
Na resposta, procuramos o identificador do usuário que deixou a mensagem de registro.
No texto acima, vemos a própria mensagem: "/ register 1000"
E o ID do usuário pesquisado: "id": 3918xxxxx "
Em vez de xxxxx, é claro que existem números reais.
Agora você pode verificar a operação do bot e da API diretamente do shell ou do seu navegador com a seguinte solicitação:
api.telegram.org/bot553XXXXXXX : AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhh / sendMessage? text = Your_queue_is_overloaded & chat_id = 3918xxxxx
Onde bot553XXXXXXX: AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhx é o número e a chave do bot recebidos do BotFather e 3918xxxxx é o número de usuário obtido na etapa anterior.
Você pode usar russo no texto, mas os espaços devem ser substituídos por% 20.
Como resultado desse comando, a mensagem foi recebida no Telegram na área de trabalho e no celular ao mesmo tempo.


O navegador retornou a seguinte resposta:

Então a API funciona. Agora vamos avançar para a integração com a central telefônica da Avaya. Para esse fim, usarei o Avaya Aura Experience Portal 7.1. Ele é usado para organizar a URA no ecossistema da Avaya e é uma plataforma de serviço inteligente, totalmente virtualizada e com software. Sua característica importante é a capacidade de inserir código Java, que é o que precisamos integrar com o Telegram. Não vou criar anúncios, mas, na minha opinião, este é um dos melhores produtos da Avaya e você pode escrever coisas realmente incríveis. Por exemplo,
controle de voz de um bule de chá ou mais grave
Transcrição da conversa em tempo real .
Esse sistema de URA certamente não é barato, mas existem algumas peculiaridades. É licenciado por porta. Porque planejamos usá-lo extremamente em breve, uma porta será suficiente. E uma porta tem um custo bastante baixo. E com a virtualização, o sistema requer apenas 2 núcleos / 4 GB de RAM / 60 GB de disco rígido. Em geral, ele pode ser instalado em quase qualquer laptop ou desktop. Bem, como uma cereja em um bolo - este produto tem um modo de teste que permite usá-lo gratuitamente por 30 dias.
Para realizar a tarefa, precisamos organizar uma chamada IVR por um evento na central telefônica e configurá-la para que ele envie o evento correspondente à API recém-criada.
Se considerarmos a tarefa de notificar o supervisor sobre o excesso do número de chamadas na fila para o Contact Center, na central telefônica será necessário modificar o vetor principal e criar um vetor adicional.
VETOR DE CHAMADA
Número: 5 Nome: Vetor para Habilidade 5
01 vá para a etapa 5 se estiver na fila de chamadas na habilidade 5 pri m> 5
02 habilidade para fila 5 pri m
03 tempo de espera 30 segundos ouvindo silêncio
04 goto etapa 3 se incondicionalmente
05 rota para o número 1214 com cov n se incondicionalmente
06 goto etapa 2 se incondicionalmente
Esse vetor imediatamente antes de fazer uma chamada na fila verifica o número de chamadas nessa fila. Se exceder 5, a chamada vai para a etapa 5, onde é transferida para o número 1214. Esse número é roteado para IVR.
Na condição da etapa 1, você pode verificar um grande número de parâmetros que são um indicador da carga no Contact Center. Por exemplo, EWT, o número de agentes disponíveis, o número de agentes conectados, o número de chamadas na fila, o nível de serviço etc. e se esse ou aquele indicador for excedido, encaminhe a chamada para IVR.
Um aplicativo no IVR começará a enviar uma mensagem para o Telegram e imediatamente transferirá a chamada de volta para o Contact Center para um vetor semelhante, apenas sem as etapas 1 e 5.
O tempo de atraso para uma chamada de processamento será de cerca de 100 milissegundos, o que é absolutamente insignificante para o chamador.
O segundo vetor ficará assim:
VETOR DE CHAMADA
Número: 6 Nome: Habilidade 5 Direta
01 habilidade de enfileiramento 5 pri m
02 tempo de espera 30 segundos ouvindo silêncio
03 goto etapa 2 se incondicionalmente
Portanto, a chamada de evento é redirecionada para IVR. Vamos seguir desenvolvendo um aplicativo.
Os aplicativos para o Avaya Aura Experience Portal são desenvolvidos no Eclipse com o plug-in Orchestration Designer instalado. Isso permite transferir o desenvolvimento de usuários não qualificados para o modo Arrastar e Soltar, movendo quadrados e setas sem mergulhar no código Java.
Bem, usuários qualificados já podem incorporar código Java. Em seguida, o aplicativo é montado como um servlet e implantado no Tomcat, onde o IVR se refere quando recebe uma chamada.
A aplicação é a seguinte:

A chamada vai para o nó AppRoot, as variáveis são pré-processadas e a chamada para o Telegram Connector, que já é um código Java puro. Após o envio da mensagem, a chamada está sendo transferida para o Contact Center.
Para simplificar as configurações, são usadas Variáveis configuráveis, que permitem exibir as configurações de variáveis internas do aplicativo no portal da Web do próprio Portal de Experiência. Isso é necessário para que, ao alterar as configurações, não reconstrua o aplicativo.
O bloco variável é o seguinte:

Como as variáveis configuráveis usam uma variável DNIS com subvariáveis. Para transferir variáveis para o código Java, são usadas variáveis escritas em letras maiúsculas.
A unidade de processamento principal é a seguinte:

Perdoe-me amantes de código limpo. O bloco de URL parece horrível. Esses são os recursos do Orchestration Designer. Obviamente, era mais correto coletá-lo diretamente no código Java em uma linha, mas era importante verificar qual URL entra no código Java e precisava coletá-lo dessa maneira.
O próprio conector parece extremamente minimalista:
String response = ""; String str = mySession.getVariable(IProjectVariables.URL).getSimpleVariable().getStringValue(); str = str.replaceAll(" ", "%20"); IVariableField variable = mySession.getVariableField(IProjectVariables.RESPONSEINFO); variable.setValue(str); URL url; try { url = new URL(str); InputStream is = url.openConnection().getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader( is ) ); String line = null; response = ""; while( ( line = reader.readLine() ) != null ) { response = response + line; } reader.close(); } catch (IOException e) { e.printStackTrace(); }
As funções mySession.getVariable e mySession.getVariableField são necessárias para transferir informações do aplicativo para o código Java e retornar uma resposta.
I.e. formamos a URL de acordo com o princípio acima e a iniciamos, repassando o que o servidor retornou.
Essa é toda a aplicação e, em geral, toda a solução. O próprio portal da IVR com variáveis configuráveis é o seguinte:

Se alguém estiver interessado em ver uma demonstração real do protótipo, poderá vê-lo
aqui .
Bem, havia algumas cerejas no bolo. Mais precisamente, até dois.
Eu já escrevi sobre o primeiro. Para que a solução funcione, você precisa conectar o servidor de aplicativos ao Telegram por meio de um proxy que não esteja na Rússia. Espero que esse absurdo acabe sempre.
Bem, a segunda cereja. Obviamente, a conexão com o telegrama deve ser criptografada e a conexão passa por https. E, é claro, um certificado não autoassinado é usado para isso. E este certificado não fornece Telegram. E, diferentemente do navegador, o servidor de aplicativos não pode estabelecer facilmente uma conexão sem um certificado. Portanto, a cereja no topo do bolo é o processo de encontrar esse certificado e carregá-lo no servidor de aplicativos. Após este procedimento, tudo imediatamente funcionou magicamente.
Acredito que uma pessoa que seguir meu caminho com êxito também encontrará esse certificado com sucesso. O principal é que ele sabe que precisa ser encontrado.
Obrigado pela atenção.