集成电报和Avaya

当出现创建用于向用户通知联系中心中的事件(队列溢出)和电话交换机(未接电话的通知)的高速机制的业务问题时,就想到了Telegram。

实际上,在这种情况下,Telegram只是可能的选择之一。 可以通过短信完成。 您可以通过电子邮件来完成此任务,然后它将在移动设备上呈现给用户,服务器Push将从中发出。 或者直接在手机上的应用程序上执行操作,以便直接从中获取Push。

但是每种方法都有其缺点。 您必须支付短信费用。 电子邮件不断使用户蒙蔽,用户停止响应。 必须为每个平台在电话上创建单独的应用程序,在公司的内部服务器上安装和组织令牌的注册。 电报解决方案没有这些缺点,尽管该应用程序当然应该安装在移动设备,台式机或其他地方。 但是,Telegram也有一个负号。 这是我们亲爱的Roskomnadzor,他不太喜欢他。 这引入了一些额外的实现。

这样啊

受此启发我开始做生意。

首先,我在BotFather中创建了一个机器人

图片

接下来,您应该已经可以直接使用API​​。

找到这份有价值的出版物后,我转向Hetzner并组织了我的http代理使用api进行工作,每月在德国境内的费用仅为3欧元。

下一步需要创建一个组,其中将包括您的用户和新创建的聊天机器人。 这是垃圾邮件防护。 例如,Viber缺少什么。

图片

接下来,您需要找出所需用户的数量。
为此,每个用户必须在聊天室中留言。 通常,它是任意的。 但是我们为此目的使用了短语寄存器和某个数字。 该号码将是集团电话的标识符。

图片

现在转到API。

使用新创建的代理,我们直接从代理外壳发出以下请求。 如果您已经切换了浏览器以使用它,则可以直接从浏览器中进行操作。

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 ~ # 

而不是“ 553XXXXXX:AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhh”显示从BotFather那里收到的信息。

在响应中,我们寻找离开注册消息的用户的标识符。
在上面的文本中,我们看到消息本身:“ / register 1000”
以及搜索到的用户ID:“ id”:3918xxxxx“
当然不是实数,而是实数。

现在,您可以直接从Shell或浏览器中通过以下请求检查bot和API的操作:

api.telegram.org/bot553XXXXXXX:AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhh / sendMessage?text = Your_queue_is_overloaded&chat_id = 3918xxxxx

其中bot553XXXXXXX:AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhhx是从BotFather接收到的机器人编号和密钥,而3918xxxxx是从上一步获得的用户编号。
您可以在文本中使用俄语,但必须将空格替换为%20。

作为此命令的结果,该消息同时在台式机和移动电话上的Telegram上收到。

图片
图片

浏览器返回以下答案:
图片
因此api起作用了。 现在,我们将继续与Avaya电话交换机集成。 为此,我将使用Avaya Aura Experience Portal 7.1。 它用于组织Avaya生态系统中的IVR,是一个完全软件的虚拟化智能服务平台。 它的重要功能是能够插入Java代码,这是我们需要与Telegram集成的功能。 我不会制作广告,但是我认为这是Avaya最好的产品之一,您可以在上面写一些非常神奇的东西。 例如茶壶的语音控制或更严重的即时谈话转录

这个IVR系统肯定不便宜,但是有一些特殊之处。 它是通过端口许可的。 因为 我们计划在极短的时间内使用它,一个端口就足够了。 一个端口的成本相当低。 借助虚拟化,该系统仅需要2核/ 4GB RAM / 60GB HDD。 通常,它可以安装在几乎任何笔记本电脑或台式机上。 嗯,就像蛋糕上的樱桃一样-该产品具有试用模式,可让您免费使用30天。

要完成此任务,我们需要通过电话交换机中的事件来组织IVR呼叫,然后对其进行配置,以便将相应的事件发送到新创建的API。

如果考虑将通知队列中联系中心的呼叫数量过多的问题通知主管的任务,则在电话交换机中,有必要修改主引导程序并创建一个附加引导程序。

通话矢量

编号:5名称:技能5的载体

如果在技能5中呼叫排队,则转到01步骤5
02排队技巧5下午
03等待时间30秒,无声
04如果无条件地转到步骤3
如果无条件,则将05路由到带cov n的号码1214
06如果无条件地转到步骤2

即将在呼叫中放入队列之前,此引导程序将检查此队列中的呼叫数。 如果超过5,则呼叫转到步骤5,在此转移到号码1214。此号码被路由到IVR。

在步骤1的条件中,您可以检查大量参数,这些参数指示了Contact Center中的负载。 例如,EWT,可用的座席数,登录的座席数,队列中的呼叫数,服务级别等。 如果超过了该指示符,则将呼叫转接到IVR。

IVR中的应用程序将开始向Telegram发送消息,并立即将呼叫转移回联络中心到类似的引导程序,而无需执行步骤1和5。

这样的处理调用的延迟时间将约为100毫秒,这对于调用者而言绝对是微不足道的。

第二个向量将如下所示:

通话矢量

编号:6名称:技能5直接

01排队技巧5下午
02等待时间30秒,无声
如果无条件,请转到03步骤2

因此,事件调用被重定向到IVR。 让我们继续在其上开发应用程序。

Avaya Aura Experience Portal的应用程序是在安装了Orchestration Designer插件的Eclipse中开发的。 这使您可以将非熟练用户的开发转移到移动正方形和箭头的拖放模式,而无需深入研究Java代码。

好吧,合格的用户已经可以嵌入Java代码。 接下来,该应用程序被组装为一个servlet,并被部署到Tomcat,当IVR收到呼叫时,IVR将在其中进行引用。

该应用程序如下:

图片
调用转到AppRoot节点,然后对变量进行预处理,然后转到已经是纯Java代码的Telegram Connector。 发送消息后,呼叫将被转接到联系中心。

为了简化设置,使用了可配置变量,它允许您在Experience Portal本身的Web门户上显示内部应用程序变量的设置。 这是必要的,以便在更改设置时不重建应用程序。

变量块如下:

图片

可配置变量如何将DNIS变量与子变量一起使用。 要将变量传输到Java代码,使用大写字母写的变量。

主要处理单元如下:

图片

原谅我干净代码的恋人。 网址块看起来糟透了。 这些是Orchestration Designer的功能。 当然,在一行中直接用Java代码直接收集它是更正确的,但是对我来说,检查哪个URL进入Java代码并必须像这样收集它是很重要的。

连接器本身看起来非常简约:

  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(); } 

需要使用mySession.getVariable和mySession.getVariableField函数将信息从应用程序传输到Java代码并返回响应。

即 我们根据上述原理形成了URL,并启动了它,并将服务器返回的内容传递了出去。

那就是整个应用程序,通常就是整个解决方案。 具有可配置变量的IVR Web门户本身如下:

图片

如果有人有兴趣查看原型的真实演示,那么可以在这里看到它。

好吧,蛋糕上有一些樱桃。 更准确地说,甚至两个。

我已经写过第一个。 为了使该解决方案有效,您需要通过不在俄罗斯的代理将应用程序服务器连接到Telegram。 我希望这种废话永远结束。

好吧,第二个樱桃。 当然,与电报的连接必须经过加密,并且连接必须通过https进行。 当然,将使用非自签名证书。 而且此证书不会给Telegram。 而且与浏览器不同,应用服务器无法轻松地建立没有证书的连接。 因此,锦上添花的是查找此证书并将其上载到应用程序服务器的过程。 完成此过程后,一切立即神奇地工作。

我相信成功通过我的人也会成功找到该证书。 最主要的是,他知道自己需要被发现。

谢谢您的关注。

Source: https://habr.com/ru/post/zh-CN414811/


All Articles