制作一个电报萝卜头(机器人)【基础篇】
基于Google Apps Script、telegram-Bot api开发telegram bot脚本
来自:Pixiv 画师(G-ta)
前言
这里采用Google Appa Script(一般简称为Gscript)作为编写bot代码的语言,主要有以下好处:
- Gscript基于谷歌开发平台,方便版本的更新与回退,脚本执行的授权管理,后期如果用到数据库可以用谷歌的spreadsheet。,全部托管在平台上无需自己去购买服务器。
- 如果是在自己的PC环境开发即国内环境,需要增加跨越GFW(中国国家防火墙)的成本,谷歌的平台与telegram同在墙外不存在该困境。
- Gscript基于JavaScript语法“随便”,上手简单。
开始准备
- 具备翻墙的能力
- 拥有一个telegram账号
- Gscript的使用与语法
- telegram的使用
- telegram-bot Api的使用
Gscript的使用与语法
简介
Google Apps脚本是一种基于JavaScript的平台即服务,主要用于自动化和扩展Google Apps。 Apps Script专门在Google的基础架构上运行,无需服务器配置或配置。在线IDE用作连接Apps脚本可用的所有服务的整个平台的接口。用户身份验证通过OAuth2烘焙到平台中,并且不需要脚本作者的代码或设置。
Apps脚本在服务器端运行,但可以使用Html,CSS,JavaScript或任何其他浏览器支持的技术构建用户界面。与事件驱动的Nodejs不同,App Scripts在线程模型中运行。对脚本的所有调用都会生成该脚本的唯一实例,该实例独立于所有其他实例运行。当脚本的实例完成执行时,它将被销毁。
Apps脚本中的功能是阻塞的,因此不需要回调和异步编程模式。锁定用于防止代码的关键部分被不同的实例同时执行。
操作步骤
Gscript平台地址 https://script.google.com
以上是Gscript脚本从创建到授权使用的流程。最终通过URL来授权telegram bot。换句话说,脚本代码写完了,也就是造好了萝卜头(机器人)的大脑,下一步就是将大脑装到萝卜头的身体里。
语法
Gscript最基本的语法还是与JavaScript一致的,比如:函数、定义变量等,但是我发现它内置了很多常用函数,而jquery、ajax这些则没有。
下面补充下可能会用到的Gscript API:(我做bot基本上用到的Gscript API不多)
请求/响应URL(不同于JavaScript) UrlFetchApp.fetch
JDBC Service JDBC
如果你想开发很高级的萝卜头,可能会用到谷歌服务高级支持 Google Services,甚至是第三方的服务支持那就需要你自己去找了。
官方API全量 Gscript-API
telegram的使用
基本的、日常性的使用,这里就不再赘述了,我们直接来到主题。
创建萝卜头(机器人)
这里可以理解为,Gscript造萝卜头的大脑,telegram造萝卜头的身体,telegram这是连接桥梁。或者说,大脑是后端控制,身体是前端。
至此,萝卜头的创建和基本配置完成。
telegram-bot Api的使用
先附上api地址:电报Bot API
概要解析
因为用到的比较多,这里做个解析。
授权机器人
分为俩种方式:Webhooks和getUpdates
因为我们是用的Gscript脚本,所以采用Webhooks的方式。授权生效格式:
https://api.telegram.org/bot[token]/setWebHook?url=[Gscript_url]
其中,[token]为telegram创建后的API Token,[Gscript_url]为Gscript脚本代码对外授权后的访问地址。
#则本次示例的生效链接如下
https://api.telegram.org/bot1061651498:AAFdUNYXajC21u51bQ9Myk9KygRJ6tT30eI/setWebHook?url=https://script.google.com/macros/s/AKfycbwyTltheijzwbVpt72GzxTVVPpIHW7J69Ly-pPs3EjFd6XsUAbe/exec
将这个地址放入浏览器回车,返回结果如下:
如此,萝卜头的大脑就成功的放入身体里了,Gscript代码才能控制bot。
传出参数类型
类型有以上4种
这个参数是干嘛的?
在telegram中,我们像bot发放了消息或指令,bot接收到消息会根据代码做出回应,这个回复要携带数据data,也就是UrlFetchApp.fetch(“url”, data);这又回到了Gscript的语法上,通常这个data要带着method(get/post)、payload(基于telegram-bot api的响应格式,后面会细讲)、contentType(数据类型)等,没错contentType就是要说的传出参数类型。
telegram-bot api中讲了4种传出参数类型,但是我们为了方便选择了application/json,这源于payload经过数据封装与转换变成data符合了Gscript的语法,它本身就是为了符合telegram-bot api的响应格式,是真实的消息主体+telegram-bot必须回复的参数的组合。即参数的种类和深度多而纷繁,故而选择contentType。
可用类型与可用方法
这个很好理解,就是你向bot发了个消息,bot可能回你一个消息,也可能是图片、音频等,这里bot回复你的消息类型就是可用类型。
下面就不按照官方的API去讲了,实在是太多了挑一些常用的拎出来。
概念区别:消息与消息实体?
消息表示一条消息,它包含唯一的id,日期,发送的对象,文本内容等,显示效果类型。
消息实体表示文本消息中的一个特殊实体。例如,标签,用户名,URL等,文本类型。
常用的可用类型如下:
- message
- document
- video
- voice
- file
- stickers
- inline mode
- ……
常用的可用类型的可用方法:
- sendMessage——必须携带参数chat_id、text
- sendSticker——必须携带参数chat_id、sticker
- sendPhoto——必须携带参数chat_id、photo
……
具体的实例下一期见!