使用创建telegram机器人-电报telegram技巧分享

telegram机器人怎么做

要说聊天体验,微信还是远比不上 telegram,微信消息一多就卡,并且没法直接引用消息进行回答导致常常找不到上下文。telegram 则始终不同寻常流畅,记载阅读位置,消息多的时间也不会以为跟不上聊天节奏或卡 … 固然了,这一段都不是今日要写的这篇文章的重点,这篇文章重要还是要介绍一下怎样开发 telegram 机器人,telegram 在去年中旬的时间开放了机器人的 API,可以设置 hook,使得全部消息都能被转发到你的服务上,然后作出主动化回答。

机器人可以被约请入群做许多帮助工作,好比输入 “/google xxx” 就可以得到谷歌查询的结果等等,甚至另有人开发了 /fff 下令,用来烧死异性恋:joy:什么的,只要发送一条 “/fff install someone” 的消息到机器人地点的群聊当中即可。总之,使用 bot API 大概无所不能,也非常故意思。

俺从几天前开始玩耍 telegram bot API,开发了一个属于自己的机器人, @XiaoaiBot ,可以回声、盘算两个日期的隔断时间、以及帮用户在群里找出近来一个 @ 消息,应该说还是很好玩的。

@BotFather

一开始得在 telegram 中添加一个“机器人之父”的账号,便是 @BotFather 这个账号,然后给它发送 /newbot 下令,渐渐创建起一个机器人,包括头像、介绍,以及它可以支持的下令,别的,最重要的就是可以或许得到这个机器人的 token,通过这个 token 可以调用官方机器人 API 收发消息。

token 的使用

telegram bot API 的官方文档是: https://core.telegram.org/bots/api ,在这里可以看到,全部的接口都是基于 https://api.telegram.org/bot+你的token 这个 base url,好比你的 token 是 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11,那么你调用任何 API 都得基于 https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/,背面再加上详细 API 名。

设置消息 hook

telegram 支持两种得到消息的方法,一种是开发中使用 getUpdates 接口主动去查询是否有新消息,别的一种就是建议的 setWebhook,设置一个 https 的服务地点,完事之后,全部机器人收到的消息都市同时发往这个地点,并携带上 json 数据,使用 python 的时间,可以通过 flask 这个框架的 request.get_json(force=True) 来获取到 json 数据。

设置 hook 的示例 API url 如下:

https://api.telegram.org/bot你的token/setWebhook?url=https://xxx.com

使用 python-telegram-bot 库进行开发

GitHub 上有一个別人已经封装好了的 python-telegram-bot 库,可以帮助开发者更近轻松快速地使用官方 API: https://github.com/python-telegram-bot/python-telegram-bot

将它装载下来后,你可以通过以下代码进行初始化:

import telegram bot = telegram.Bot(token='你的token')

然后就可以通过这个 bot 对象发送种种消息了,更多使用内容可以参看其开源代码的 readme,要么官方文档: http://python-telegram-bot.readthedocs.org/en/latest/py-modindex.html

我的 @XiaoaiBot 项目

有了种种预备内容后,我们还需要 flask 框架来提供 http 服务相应,flask 我就不多说了,应该学过 python 的都市明白使用这个框架。重要说一下我开发小爱 bot 的一些思绪和代码。

我写了一个 launcher 和 handle_message 方法用来分发下令到详细到实行代码:

@app.route('/<token>', methods=['POST']) def launcher(token): if request.method == "POST": update = telegram.Update.de_json(request.get_json(force=True)) handle_message(update.message) return 'ok' def handle_message(message): text = message.text if '/echo' in text: echo(message) elif '/milestone' in text: milestone(message) elif '/help' in text: help(message) elif '/getmylastat' in text: get_my_last_at(message) elif '/pic' in text: pic(message) elif '/delpic' in text: delpic(message) if not '/' in text and '@' in text: save_at_message(message)

这个方法应该一览无余,不多说,重要作为分发下令消息到入口。

别的我还写了一个用来分散下令和附着文本的方法:

def parse_cmd_text(text): # Telegram understands UTF-8, so encode text for unicode compatibility text = text.encode('utf-8') cmd = None if '/' in text: try: index = text.index(' ') except ValueError as e: return (text, None) cmd = text[:index] text = text[index + 1:] if not cmd == None and '@' in cmd: cmd = cmd.replace(bot_name, '') return (cmd, text)

此中需要留意到是,有大概用户发送到下令是:/xxx@XiaoaiBot 123这样,就得把@XiaoaiBot 这个无用的内容去掉,我使用 replace 方法将机器人的名字更换为空字符,这样就相当于删掉这个内容了。别的,也可以使用 python 的 re 正则表达式来匹配得到同样的结果,不多说。

整个开发過逞还是很舒畅和轻松的,我使用的是 leancloud 美国节点进行摆设,此中需要留意的是,其美国节点不支持下令行摆设,只能 git 摆设,于是我不得不开源我的 token,开源代码是:

https://github.com/drakeet/DrakeetLoveBot

盼望大家假如 fork 我的代码使用,不要使用我的 token,由于会造成我的服务有大概出现杂乱,我也会伤心以后不敢再开源了之类的,并且,申请一个 token 是很轻易的,完全没须要使用我的,祝玩得开心,也欢迎来玩耍俺的机器人 @XiaoaiBot ,提供的功能如下:

  • /echo – Repeat the same message back
  • /milestone – Get drakeet’s milestone
  • /getmylastat – Get my last AT message
  • /pic – Curiosity killed the cat
  • /delpic – Delete pic by its num

telegram是海外常用的聊天功能,功能很强盛,除了聊天还可以玩游戏,传文件,视频,声音,投票,群组。固然,这些跟qq,微信都很类似了。但是它毕竟是海外最常用的IM之一。telegram有个聊天机器人可以主动发消息,也是挺故意思的。它还开放了api,可以自己创建bot,通过api发送消息,视频,声音,文件等功能。下面,我简单介绍下怎么新建一个bot

telegram有两种api,一种是bot api,一种是telegram api。bot api是基于http访问,telegram api是基于mtproto访问,访问需要加密,相对要庞杂一些。后者也可以实现发送消息等功能。这里我只说第一种bot api。

首先要创建一个bot。访问

https://telegram.me/botfather

它会提示你用telegram打开。然后你就打开了botfarther的聊天对话框。输入

/newbot

回车发送。botfarther会反馈

Alright, a new bot. How are we going to call it? Please choose a name for your bot.

输入你要创建的bot名字。比方david_bot,回车发送

它会反馈

Good. Now let’s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

我再输入 DavidBot。这是这个机器人的名字。

它会反馈

Sorry, this username is already taken. Please try something different.

这名字已经被用了。我们换一个

GZ_David_Bot

它会反馈

BotFather, [16.02.17 14:23]

Done! Congratulations on your new bot. You will find it at t.me/Gz_David_Bot. You can now add a description, about section and profile picture for your bot, !see /help for a list of commands. By the way, when you’ve finished creating your cool bot, ping our Bot !Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:

xxx:xxx

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

这里它天生了api token。我们记下它。以后api请求都市用到。假如需要帮助,输入 /help

输入/token 可以重新天生一个token。

/revoke 可以撤除一个token

我们需要用这个bot来发送消息,首先需要创建一个group,参加一些人,同时将这个bot也加进去。然后在这个group中发送消息。类似 /hello @GZ_David_Bot

然后访问

https://api.telegram.org/botxxx:xxx/getUpdates

我们会获取到一个json


{ "ok" : true, "result" : [{ "update_id" : xxx, "message" : { "message_id" : 4, "from" : { "id" : xxx, "first_name" : "david", "last_name" : "huang", "username" : "davidhuang" }, "chat" : { "id" : -xxx, "title" : "bot", "type" : "group", "all_members_are_administrators" : true }, "date" : xxx, "text" : "/hello @GZ_David_Bot", "entities" : [{ "type" : "bot_command", "offset" : 0, "length" : 6 } ] } }, ] }

这里,我们看到有个id,指的就是当前group的id。我们记下它 。然后实行以下curl。

botXXX:YYYY 指的是bot+token,肯定要加上bot前缀

chat_id就是上面的id,留意是负数,必须有-

发送内容是=my sample text

curl -X POST “https://api.telegram.org/botXXX:YYYY/sendMessage” -d “chat_id=-zzzzzzzzzz&text=my sample text”

实行完,这个group就收到消息了。

api git:

https://github.com/unreal4u/telegram-api/graphs/contributors

但是悲剧的是,它只支持php7.

https://github.com/unreal4u/telegram-api/wiki

别的,也可以通过webhook api获取聊天记载等功能。但是这个api要求我们的站点必须是https证书

另有个bot sdk,它只要php5.5就可以了

https://telegram-bot-sdk.readme.io/reference#forwardmessage

https://github.com/irazasyed/telegram-bot-sdk

https://telegram-bot-sdk.readme.io/v2.0/reference

sdk 文档:

https://telegram-bot-sdk.readme.io/docs

安装

composer require irazasyed/telegram-bot-sdk

这个sdk包含了全部的telegram bot api,比方支持command,keyboard,webhook

参考文档:

https://fullmeter.com/blog/?p=14

http://stackoverflow.com/questions/32423837/telegram-bot-how-to-get-a-group-chat-id-ruby-gem-telegram-bot

https://core.telegram.org/bots

https://core.telegram.org/bots/api

Telegram机器人教程|免费搭建一个私聊机器人


为什么要搭建它:

  • 众所周知,+86号段的Telegram用户在私聊非+86用户时会受到限定!(固然也可以通过 @SpamBot 申说以排除限定),那么假如自己用的黑白+86号码,平常又有许多+86用户需要联系自己,就可以让他们直接私聊机器人,由机器人作为传发话器,方便交流。
  • 使用机器人和别人聊天,肯定程度上可以淘汰自己的窗口数目,也在肯定程度上葆护了自己的隐私。


它能做什么:

  • 转发用户的消息
  • 通过机器人一对一地回答用户
  • 向使用过此机器人的用户发送广播消息
  • 实行一些简单的指令(需要进行一些高级操作,提议前去YouTube观看 峰哥的电报机器人系列教程 )


搭建需要用到的两个Bot:


正式开搞:

打开Telegram搜索框,输入 @BotFather ,通过它申请创建一个新的机器人项目。

向 @BotFather 发送指令

/newbot

,申请创建一个新的机器人。

newbot

然后会扣问你预备给它起一个什么名字,大家可以自由发挥。(横竖可以随时变动)

然后再给它起一个 username ,方便别的用户更快地找到它。

username

然后 @BotFather 会提示创建完成,并天生了专属的API(图中打码部分)。复制这个API代码,后边有效。

手机上创建的话,可以直接点击”Use this token to access the HTTP API:”后边的那段代码,就主动复制到剪贴板了。留意,不要复制错误,不然无法正常使用机器人。

打开 Telegram 搜索框,搜索 @LivegramBot。

发送

/addbot

指令,然后会提示让你先找 @BotFather 创建一个机器人并拿到API。由于我们已经实行过这个操作,以是此处直接粘贴上一步中获取的API并发给 @LivegramBot 。

livegrambot

此时 @LivegramBot 提示添加成功,也就意味着把部分操作托管给了 @LivegramBot 。

此时我们的私聊机器人已经搭建完毕,可以正常使用。只是另有点简陋。

One More Thing ? 简单设置一下私聊机器人的底子信息。

我们回到 @BotFather 聊天窗口。发送

/mybots

,查询你创建过的机器人。选择我们方才创建的那个私聊机器人。

bot

然后选择

Edit Bot

,对机器人的底子信息进行设置。

editbot

之前已经为机器性命名了,以是如今只需要添加描述、介绍、头像即可。

以下图片仅为示例,请网友们自由发挥,闻一知十。

10
11

成品示例:

12
13

测试一下:

使用另一个账号对这个机器人发送聊天内容,发现机器人已经可以正常转发用户的消息了。

message

怎样回答:

只需要按住机器人转发的消息,左划(或点按、长按…视详细的客户端而定)回答,即可完成一对一的回答。

reply

Have fun~

有疑问可以在博客留言要么通过我的电报机器人 @ChaCha20ietfpoly1305_bot 联系(随缘回答)。

本文网址:

http://www.1cm8858.com/d/202061712296_791_1053898740/home

Ten articles before and after

同样是聊天工具如何在没有用户名的情况下提及Telegram用户?-电报telegram技巧分享

telegram是什么意思的英语发音-电报telegram技巧分享

终局!Telegram发布更新:支援Chatbot即时支付功能-电报telegram技巧分享

telegram(电报)的使用方法和中文语言设置免露真身有办法!教你安全隐身设定-电报telegram技巧分享

用查快递、收邮件订阅RSS…这款聊天App就像瑞士军刀一样万能-电报telegram技巧分享

telegram通用红包机器人开发框架MatatakiBotv0.3版本发布报告(、转账DICE)-电报telegram技巧分享

独家揭底!BiYong被爆严重用户隐私安全漏洞-电报telegram技巧分享

电报的前世今生中国高等教育之父-电报telegram技巧分享

电报群组广播telegram超级福利群共享-电报telegram技巧分享

如何制作自己的电报贴纸TelegramStickers/搬运攻略-电报telegram技巧分享