Integrar Telegram e Avaya

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

imagem

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.

imagem

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.

imagem

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 {"ok":true,"result":[{"update_id":90770, "message":{"message_id":43,"from":{"id":3918,"is_bot":false,"first_name":"Dmitry","last_name":"Senashenko","language_code":"ru"},"chat":{"id":3918,"first_name":"Dmitry","last_name":"Senashenko","type":"private"},"date":1529572218,"text":"/register 1000","entities":[{"offset":0,"length":9,"type":"bot_command"}]}}]}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.

imagem
imagem

O navegador retornou a seguinte resposta:
imagem
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:

imagem
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:

imagem

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:

imagem

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:

imagem

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.

Source: https://habr.com/ru/post/pt414811/


All Articles