制作一个电报萝卜头(机器人)【基础篇】

基于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

登录平台后,点击>新建项目
巴拉巴拉写完代码后,保存提示重命名文件
成功保存后,我们需要发布它。点击:发布>部署为网络应用
这里配置权限为:任何人甚至是匿名的,点击Deploy
提示需要授权,点击“查看权限”前往授权
选择一个谷歌账号登录进行确认
提示未经验证,点击”高级“
点击“转至无标题项目”
点击“允许”,则授权完成。
弹出确认框,此处URL就是脚本外部访问的地址

以上是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这是连接桥梁。或者说,大脑是后端控制,身体是前端。

打开客户端,输入“@BotFather”找到所有机器人的爸爸
对话中输入/,会显示当前bot的命令列表
点击/newbot就会生出一个孩子,并为bot起个昵称和用户名
/mybots 管理自己创建的bot
点击bot用户名进入,Edit Bot编辑
下面4个按钮分别对应编辑:昵称、描述、关于、头像,点进去就可以修改,不再演示
编辑命令列表
一行对应一条,短横杠俩侧各有一个空格
管理bot的token
这里可以查看或重设bot的token,token的格式为[bot_id]:[secret]bot的id后面可能会用到
bot的设置
主要是3个设置,这里先把行内键盘打开

至此,萝卜头的创建和基本配置完成。

telegram-bot Api的使用

先附上api地址:电报Bot API

概要解析

因为用到的比较多,这里做个解析。

授权机器人

分为俩种方式:WebhooksgetUpdates

因为我们是用的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
    ……

具体的实例下一期见!

发表回复