电报机器人
![](https://i-blog.csdnimg.cn/blog_migrate/4668e1a8ef86276452f2cb70c14ca352.jpeg)
Telegram是类似于WhatsApp,Facebook Messenger和微信的即时消息服务。 近年来,由于各种原因,它得到了普及:其非营利性质,跨平台支持,安全承诺以及开放的API ,这些API可以构建满足您需求的任何集成或漫游器。
特别是在加密世界中,Telegram机器人是规范ICO注册,空投活动或任何形式的验证的常识。 GroupButler bot通常用于通过验证码验证用户,删除聊天中的链接或防止聊天泛滥。
本文与来自BUTTON Wallet的人共同创建,他们都是构建高性能Telegram机器人的专家,并且了解Telegram API的来龙去脉。 简而言之,BUTTON钱包是一种方便的加密钱包,可在Telegram中进行交换。 让我们来看看!
电报API性能限制
目前,Telegram每秒最多只能向您的后端发送100个请求。 您越早能够处理此请求并进行回复,用户越早会在bot客户端中看到更改。
但是,当后端无法处理用户的请求或将其放入要处理的队列时,问题就开始了。 每当Telegram API检测到未处理请求时,它将开始重复重新发送该请求,从而自行淹没后端。 仅一分钟的停机时间就足以使一个高性能的bot收到5到15分钟的积压订单,因为这些重复的请求称为“提供的呼叫的要求”。
可能的解决方案
首先,编程语言非常重要。 选择任何高性能语言,例如Rust,Golang甚至Scala都是明智的。
另一个帮助是实现负载平衡器 。 您可能会认为这主要是有助于提高速度,但事实并非如此。 当用户在不到一秒钟或两秒钟内未收到响应时,他们倾向于重新提交请求或尝试其他可能破坏流程的操作。 因此,非常需要负载均衡器来过滤掉冗余请求或错误操作以保证容错能力。
除此之外, BUTTON钱包团队建议使用SQL数据库,因为它是比MongoDB更一致的解决方案。 而且,它允许您使用合并或更新操作(而不是为每个查询插入)将关系到数据的一致性分配给关系数据库本身。
最后, Redis是一个很好的解决方案,可以将所有查询存储在其中很短的时间并缓慢地处理它们。 如果该应用程序的一个实例发生故障,Redis还可以让您轻松扩展bot。 例如,通过Redis,您可以组织消息队列。 因此,当您收到来自Telegram的重复请求时,可以消除错误。
建筑观
如果您使用许多业务逻辑进行复杂的导航,则需要考虑一种模式,例如MVC或MVVM(“查看为一层以通过bot中的抽象向用户显示信息”)。
我们已经看到许多用户没有任何对双重响应和导航逻辑的常规处理。 所有这些绝对不是用户友好的,并且正在转储。
因此,BUTTON钱包团队得出的结论是,对回答和处理用户输入的不同变体编写大量ifelse并污染代码是相当愚蠢的。 这就是为什么我们决定从用户通过机器人进行交互这一事实中抽象出来并对其进行概括,以便用户看到一些“页面”。
用于构建机器人的UI提示
强烈建议使用文本和表情符号的组合来突出显示内容或添加有关按钮功能的其他信息。
机器人提供的键盘(带有按钮的视图)可能很难理解,因为文本空间有限,因此添加表情符号是明智之举。
通常,请保持简单,不要一次在键盘视图中添加太多按钮。 这只会导致混乱和错误的用户输入。 将选项的数量限制为最多两个或三个。
结束语
因为编写自己的Telegram机器人很有趣,所以在将您的机器人扩展到更高的性能水平时,肯定会做出很多重要的决定。 如您所见,Telegram有其局限性,但是,可以使用正确的工具(例如负载平衡器,缓存,排队甚至更改编程语言)来避免这些局限性。 祝好运!
翻译自: https://hackernoon.com/experiences-building-a-high-performance-telegram-bot-1e6bb70dcaac
电报机器人