telegram 创建机器人

缺乏、安全感 2021-09-07 06:09 1540阅读 0赞

目录

第一步

第二步

第三步

第四步

第五步


第一步

登录Telegram,并找到@BotFather,使用/new bot指令,并按照指示为你的Bot取个昵称以及用户名(Bot的用户名必需以bot结尾)。此时BotFather会给你一个非常重要的东西——Bot token,注意保管好它!
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70
通过BotFather中的命令,可以为你的机器人设置头像、命令、描述等,就像下图。
20200119075402404.png

第二步

此时你给机器人发消息,他是不会回你的,因为没有写后台代码支持他的运行。下面两个链接中定义了很多Bot API提供的方法,所有Bot都可以调用。https://core.telegram.org/bots/api和https://core.telegram.org/bots。

其实这时我们的Bot已经可以取得用户发的讯息了,我们先向Bot随便发点什么东西(当然此时它还不会回复),然后在浏览器中输入:https://api.telegram.org/bot(token)/getUpdates
(token)请换成上面或取的token。浏览器中就会显示我们和机器人的聊天内容,这里是通过Telegram Bot平台提供的getUpdates()方法来获得。
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70 1

第三步

有两种互相排斥的方式来接收你的机器人的更新,一方面是getUpdates方法,另一方面是webhook。传入的更新将存储在服务器上,直到机器人以任何一种方式接收它们,但是它们的保存时间不会超过24小时。这种方法虽然可以或取讯息,但是要做到Bot随时使用,频繁调用getUpdates方法会非常浪费资源。因此我们使用另一种方法设置Webhook,即向 Telegram 设定一组 callback url,只要有用户向你的Bot发送讯息,Telegram 就会把用户讯息连同元数据 传送到你设定的 url 。

Telegram要求callback url所在的服务器必需要有SSL证书,而我们目前并没有去搭建服务器。所以,打开浏览器,输入http://script.google.com 新建脚本。直接使用gs开发就可以啦,谷歌的服务器自然是有SSL证书的。关于Telegram Bot所支持的程序语言,虽然官方手册的案例上并没有gs,但我们打开GitHub,搜索telegram-bot-gscript,还是能找到案例的哦。如:

  1. function doPost(e){
  2. var estringa = JSON.parse(e.postData.contents);
  3. var payload = identificar(estringa);
  4. var data = {
  5. "method": "post",
  6. "payload": payload
  7. }
  8. UrlFetchApp.fetch("https://api.telegram.org/botYOUR-API-HERE/", data);}
  9. function identificar(e){
  10. if (e.message.text){
  11. var mensaje = {
  12. "method": "sendMessage",
  13. "chat_id": e.message.chat.id,
  14. "text": e.message.text,
  15. }
  16. }
  17. else if (e.message.sticker){
  18. var mensaje = {
  19. "method": "sendSticker",
  20. "chat_id": e.message.chat.id,
  21. "sticker": e.message.sticker.file_id
  22. }
  23. }
  24. else if (e.message.photo){
  25. var array = e.message.photo;
  26. var text = array[1];
  27. var mensaje = {
  28. "method": "sendPhoto",
  29. "chat_id": e.message.chat.id,
  30. "photo": text.file_id
  31. }
  32. }
  33. else {
  34. var mensaje = {
  35. "method": "sendMessage",
  36. "chat_id": e.message.chat.id,
  37. "text": "Try other stuff"
  38. }
  39. }
  40. return mensaje}

把案例中的代码复制到上面新建的脚本当中,保存并点击左上角的发布-部署为网络应用,把权限改为任何人甚至匿名,确定。就得到了具有SSL凭证的callback url。

第四步

打开浏览器,把上面或取的token和callback url放到下边网址对应的位置
https://api.telegram.org/bot(token)/setwebhook?url=callback url。随后浏览器便会返回:
20200119075928361.png
这时,给机器人发消息就可以发现,机器人会返回相同的内容。

第五步

本地写运行Bot的脚本文件。下载编译器,如VSCode。首先安装node-telegram-bot-api库,命令行中输入npm install node-telegram-bot-api,同时输入npm install config。在这里插入图片描述
20200119080246569.png
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70 3
我们开发的bot是怎么知道用户发送了哪些命令?

Telegram bot有两种获取用户发送命令的方式,一种是polling模式,也就是轮询。我们的bot需要每隔一段时间,就向Telegram服务器发送请求,询问最近用户发过来了哪些命令。这种方式的好处就是便于在本地调试,我们刚才的代码使用的就是这种模式。坏处就是每隔一段时间就要主动发送请求,即使最近可能没有任何用户发送命令。另外一种模式就是webhook,我们需要给bot设置一个webhook地址,比如说https://hentai.com/bot123。这样,每次当用户向bot输入命令时,Telegram就会把这次的命令转发到https://hentai.com/bot123,因此,我们需要在https://hentai.com/bot123部署我们的bot。这种模式的好处就是可以及时响应用户的命令,坏处就是本地调试麻烦,可能需要ngrock这种内网穿透工具。同时在线上部署时,我们还需要有自己的域名并且要支持https!!!

添加按钮、内联键盘

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70 4
20200119080823544.png
效果图如下:
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70 5
发送漂亮的消息、粗体、斜体、表格、按钮

Telegram提供了两种解析模式,一种是Markdown和html,他们基本相同。可以设置回复的格式为Markdown,disable_web_page_preview :true,表示对于链接关闭提前预览模式。
20200119080943828.png
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70 6
下图是,对与上面定义的应用,加粗只对英文起作用。等宽字体很有用,可以用来编辑整齐的表格。
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70 7
处理特定命令

回声机器人实现后,现在想要机器人能够处理特定的命令,该怎么办呢?可以在botFather中设置命令,之后在代码中写处理命令的逻辑。如下图,是代码处理特定命令。Body.message.text.indexOf(“/help”) === 0 这个判断条件表示,用户的输入是以/help 开头即可。注:如果用户输入的文本里面有空格,也没关系,telegram会自动解析处理。
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70 8
下面是优化后的代码,去除冗余的代码。\n是换行,可以再消息显示中换行。当然也可以用switch,后面会介绍。
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70 9
对于,其他语言,如python、java、php等可以到telegram 官网telegram 官网,查看更多的源代码,进行学习!
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lkZWN1YmU_size_16_color_FFFFFF_t_70 10

发表评论

表情:
评论列表 (有 0 条评论,1540人围观)

还没有评论,来说两句吧...

相关阅读

    相关 telegram 常见问题

    目录 一般的问题 问:什么是电报?我在这里做什么 问:谁是电报? 问:电报与WhatsApp不同? 问:电报多大? 问:我可以使用哪些设备? 问:电报背后的人是谁