美好的一天,哈布罗夫尚。
在搜索有关开发用于Internet上的Telegram聊天机器人的各种信息时,我发现所有教程都充斥着与Telegram
-bot-api库进行交互的不同机制,没有人得出结论,应该始终改善同志的生活。方便劳动的一面(程序员天生就是懒惰的),所以我决定使用自己的
包装器库编写自己的教程,目前该
包装器只能读取消息并向他们发送答案,但首先要注意的是。
为什么需要聊天机器人?

自从引入聊天机器人以来,在我们这个时代为各种社交网络开发聊天机器人的主题是一个敏感的问题:
- 减少了用户对他感兴趣的问题的响应时间(为了您的利益,可以快速与他联系)
- 减轻公司钱包N的负担,以保持员工处理手动申请
引入聊天机器人完全不意味着根本不需要一个人,因为在某些情况下总是需要负责解决特定问题的人的参与,但是它简化了解决家庭问题,处理应用程序以及将信息传递给负责人,进行维护的问题并使其自动化。统计数据和灵魂想要的其他东西。
由于虚拟助手的引入并不那么活跃,并且我们已经逐渐进入21世纪的第二个十年,因此我认为有必要降低进入该主题的门槛。
让我们开始吧。
注意事项使用已实现的包装器库的项目不使用webhook,而是使用长池,因为它的目标不是部署到诸如heroku之类的特定服务(但是,它具有基本功能,因此该项目或多或少的寿命很长,并且在分发者的首次呼叫时不会入睡其他heroku用户的各种服务的运行时间)。 该项目的主要思想是在开发具有基本功能(处理传入的用户请求)的聊天机器人时,简化开发并减少“手势”的数量。
它在该库中如何工作?

主要数据源是聊天机器人所基于的字典(包含在JSON格式的文件中),但它也暗含了通过编写自己的程序逻辑来处理用户消息的情况。
首先,您需要在BotFather创建一个机器人(我们进一步假设您创建了该机器人并收到了令牌)。 现在,您需要通过执行以下命令来“自行”拾取库
go get "github.com/liquiddeath13/reactivetgbot"
。
接下来,您需要创建一个.go格式文件,并将以下代码放在此处:
package main import ( reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") if BotInstance != nil { go BotInstance.Logic()
BotInstance变量包含指向具有指定令牌的聊天机器人实例的链接,以及指向存储问题和答案的字典的路径。
字典示例:
[ { "Question" : "/about", "Answer" : "ChatBot created by liquiddeath13 in 2019 year" }, { "Question" : "Hello, how can i contact with your company?", "Answer" : "Hello, you can contact us by provided mail address. Email: coolnickname@hostname.domain" } ]
接下来,聊天机器人开始使用Telegram API,并从那里获取有关其所在的聊天室中发生的事件的信息。 如果“问题”字段中词典中描述的消息到达了漫游器的地址,则它将在“答案”字段中对具有配对答案的消息进行回复(即消息“您好,我如何与您的公司联系?”。在此示例中,漫游器将回复“您好,您可以通过提供的邮件地址与我们联系。电子邮件:coolnickname@hostname.domain”)。
同样,如前所述,高级同志可以通过添加处理程序来确定机器人在收到消息时的行为,例如:
package main import ( "fmt" reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") AskCounter := 0 if BotInstance != nil { BotInstance.AppendHandler("how much time people asked you?", func(Msg reactivetgbot.TGMessage) string { AskCounter++ return fmt.Sprintf("Hello.\n%d - so many time people asked me", AskCounter) }) go BotInstance.Logic() reactivetgbot.HerokuServiceUP("Telegram ChatBot by liquiddeath13") } }
此示例描述了处理“人们问您多少时间?”问题的机制。 作为回答,机器人将在增加计数器后为用户提供一个值,该值显示用户询问指定问题的次数。
在Heroku上部署(无广告)
由于某些原因,聊天机器人在诸如heroku之类的服务上感觉不佳,因为编写了一些功能以防止该服务过早“入睡”,即模拟网络活动(每五分钟访问一次网络资源)。
要将项目放置在Heroku上,我们需要godep实用程序,它将“打包”项目中的依赖项。 您可以使用
go get github.com/tools/godep
命令“拾取”它,您可以通过在项目文件夹中运行
godep save
命令来打包依赖项。
接下来,我们需要在Heroku上创建一个帐户并熟悉官方
部署指南 。 如果您没有太多时间阅读,或者想要“一次将所有内容都放在一个地方”,那么一切都归结为以下一系列命令:
- 通过执行
heroku login
命令使用其CLI对Heroku资源进行授权 - 在项目文件夹中运行
git init
命令 - 运行
git remote add heroku ** git' , Heroku**
- 运行
git add .
命令git add .
将所有文件添加到本地存储库 - 执行
git commit -m " , commit'"
命令git commit -m " , commit'"
- 使用
git push heroku master
将本地存储库放入heroku存储库
完成动作后,无需做任何其他事情-Heroku将以自动模式组装项目,而bot将为您或您的下属完成所有常规工作。
为了监视Web服务的生命周期,Heroku有一个
heroku logs --tail
,它使您可以监视最近操作的日志。
进一步的发展考虑
计划至少引入对处理程序的支持,该处理程序不仅返回字符串,还返回生成的消息(改进以支持文件形式的各种附件)。
upd:得出的结论是,应用的仿真机制无法按预期运行,并且服务仅保持30分钟处于唤醒状态,然后“入睡”直到被直接敲除(与该项目的链接始终在类似于Heroku的项目办公室中)托管者),尽管可能只是值得在
webhook上重写。 留下我自己的愿望,以及
仇恨和想法,可以通过任何方便的方式进行改进-我很高兴收到您的来信。
(可能)有用的链接
包装库项目页面电报API库项目页面