在 Yandex.Cloud 中构建 Telegram 机器人

在 Yandex.Cloud 中构建 Telegram 机器人

今天,我们将从即兴材料中收集 Yandex.Cloud 电报机器人Yandex 云功能Yandex 函数 为简洁起见)和 Yandex 对象存储对象存储 - 为清楚起见)。 代码将在 Node.js的. 但是,有一种情况很有趣-某个组织叫做,比方说, RossKom审查制度 (俄罗斯联邦宪法第 29 条禁止审查),不允许俄罗斯的互联网提供商将请求转移到 电报API 到地址: https://api.telegram.org/. 好吧,我们不会 - 不,不。 确实,在我们的包里有所谓的。 网络钩子 - 在他们的帮助下,我们不会向特定地址提出请求,而只会将我们的请求作为对任何请求的回应发送给我们。 也就是说,就像在敖德萨一样 - 我们用问题回答问题。 这就是为什么 电报API 不会出现在我们的代码中。

免责声明本文提及的任何国家组织名称均为虚构,与现实组织名称重合纯属偶然。

因此,我们将制作一个可以为我们提供智能思维的机器人。 就像图片中一样:

在 Yandex.Cloud 中构建 Telegram 机器人

你可以在行动中尝试 - 这是名字: @SmartThoughtsBot. 注意按钮 《爱丽丝的技能》? 这是因为该机器人是同名机器人的一种“伙伴” 爱丽丝的技能, IE。 它执行与以下相同的功能 爱丽丝的技能 而且,也许,他们可以和平共处,互相宣传。 关于创作方法 聪明的思维技巧 文章中描述的 爱丽丝获得技能. 现在(在上述文章发表后进行了一些更改之后)在智能手机上 技能 看起来像这样:

在 Yandex.Cloud 中构建 Telegram 机器人

机器人创建

我希望本教程对每个人都有用,包括。 和初学者“机器人建设者”。 因此,在本节中,我将详细介绍如何创建 Telegram'电子机器人。 对于那些不需要此信息的人,请继续阅读下一节。

打开应用程序 电报,我们称所有机器人之父(他们拥有像人一样的一切)- @机器人之父 - 首先,我们将给他 /help 命令以刷新我们对我们可以做什么的记忆。 现在我们对团队感兴趣 / newbot.

在 Yandex.Cloud 中构建 Telegram 机器人

由于这里描述的 bot 已经创建,为了演示目的,我将在短时间内创建另一个 bot(然后我将删除它)。 我会打电话给他 演示HabrBot. 名称 (用户名) 所有电报机器人必须以一个词结尾 BOT例如: 我的CoolBot или 我的酷机器人 这是给机器人的。 但首先,给机器人一个名字(姓名) 是为了人。 名称可以是任何语言,包含空格,不必以单词结尾 BOT,甚至不必是唯一的。 在这个例子中,我称这个机器人 演示哈布尔.

在 Yandex.Cloud 中构建 Telegram 机器人

现在为机器人选择一个名称(用户名,用于机器人的那个)。 让我们称之为 演示HabrBot. 与机器人名称相关的所有内容(姓名) 与他的名字完全无关 - 用户名 (或适用,但恰恰相反)。 成功创建一个唯一的机器人名称后,我们需要复制并保存(绝对保密!)屏幕截图中用红色箭头显示的令牌。 在它的帮助下,我们稍后将安装传出的 Telegram'我们的网络挂钩 Yandex 函数.

在 Yandex.Cloud 中构建 Telegram 机器人

现在我们将向所有机器人之父发出命令: /我的机器人它将向我们显示我们创建的所有机器人的列表。 让我们暂时不理会刚出炉的机器人 演示哈布尔 (创建它是为了展示如何创建机器人,但我们今天将把它用于其他演示目的),并考虑机器人 聪明的想法 (@SmartThoughtsBot). 单击机器人列表中带有其名称的按钮。

在 Yandex.Cloud 中构建 Telegram 机器人

这是我们可以设置我们的机器人的地方。 按下按钮 编辑… 我们将继续编辑一个或另一个选项。 例如,通过点击按钮 编辑名称 我们可以更改机器人的名称,而不是 聪明的想法疯狂的想法. 机器人图片 - 这是机器人的头像,必须至少是 150 X 150像素. 课程描述 是用户在首次启动机器人时看到的简短描述,作为问题的答案: 这个机器人能做什么? 关于 - 更短的描述,通过指向机器人的链接传输(https://t.me/SmartThoughtsBot) 或查看有关它的信息时。

在 Yandex.Cloud 中构建 Telegram 机器人

我们只需要设置命令。 为此,请按下按钮 编辑命令. 规范用户行为 Telegram 建议始终使用两个命令: /开始 и / 帮助,如果机器人需要设置,则需要一个额外的 /settings 命令。 我们的机器人就像一个球一样简单,所以它还不需要任何设置。 我们编写前两个命令,然后我们将在代码中对其进行处理。 现在,如果用户在输入字段中输入斜杠(斜杠字符:/),将出现一个命令列表供他们快速选择。 一切都如图所示:左边-我们通过机器人父亲设置命令; 在右侧,我们的机器人中的用户已经可以使用这些命令。

在 Yandex.Cloud 中构建 Telegram 机器人

Yandex 函数

现在我们的机器人已经创建好了,让我们去 Yandex.Cloud创建一个函数来执行我们的机器人代码。 如果你没有与 Yandex.Cloud 阅读材料 爱丽丝在 Bitrix 的土地, 然后 - Yandex 功能发送邮件. 我几乎可以肯定,这两篇相对较小的文章足以让您对该主题有一个基本的了解。

所以在控制台 Yandex.Clouds 在左侧导航菜单中,选择项目 云功能, 然后按下按钮 创建函数. 我们给它一个名字,并为我们自己 - 一个简短的描述。

在 Yandex.Cloud 中构建 Telegram 机器人

按下按钮后 创建 几秒钟后,新功能将出现在所有功能列表中。 点击她的名字 - 这将带我们到页面 查看 我们的功能。 这里需要开启On) 转变 公共职能使其从外部可用(对于 Yandex.Clouds) 的世界,以及字段的值 通话链接 и 识别码 - 对除了你自己和 Telegram 之外的所有人保密,这样各种骗子就无法调用你的函数。

在 Yandex.Cloud 中构建 Telegram 机器人

现在使用左侧菜单转到 编者 功能。 让我们暂时搁置我们的 聪明的想法,并创建一个最小的模板函数来检查我们的机器人的性能......但是,在这种情况下,这个函数就是我们的机器人......简而言之,现在就在这里我们将制作最简单的机器人,它将“镜像”(即发回 ) 用户请求。 在创建新的电报机器人时始终可以使用此模板,以确保与 电报'om 工作正常。 点击 创建文件, 叫它 index.js, 和在线 代码编辑器 将以下代码粘贴到此文件中:

module.exports.bot = async (event) => {
  
  const body = JSON.parse(event.body);

  const msg = {
    'method': 'sendMessage',
    'chat_id': body.message.chat.id,
    'text': body.message.text
  };

  return {
    'statusCode': 200,
    'headers': {
      'Content-Type': 'application/json'
    },
    'body': JSON.stringify(msg),
    'isBase64Encoded': false
  };
};

在 Yandex.Cloud 控制台中,它应该看起来像这样:

在 Yandex.Cloud 中构建 Telegram 机器人

下面,我们指出 入口点 - 索引.bot哪里 指数 这是文件名(index.js)和 BOT - 函数名称 (模块.exports.bot). 将所有其他字段保持“原样”,然后单击右上角的按钮 创建版本. 几秒钟后,将创建此版本的函数。 测试后不久 网钩,我们将创建一个新版本 - 聪明的想法.

在 Yandex.Cloud 中构建 Telegram 机器人

对象存储

现在我们已经设置好了 Yandex 函数让我们在控制台中开始吧 Yandex.Clouds,创造一个所谓的。 桶 (, IE。 俄语中的桶,绝不是花束)用于存储将在我们的机器人中使用的图像文件 聪明的想法. 从左侧导航菜单中选择 对象存储, 按下按钮 创建桶,给它起个名字,例如, img 桶,而且,最重要的是, 对对象的读取权限 公开 - 否则 Telegram 将看不到我们的图片。 所有其他字段保持不变。 我们按下按钮 创建桶.

在 Yandex.Cloud 中构建 Telegram 机器人

之后,所有存储桶的列表可能如下所示(如果这是您唯一的存储桶):

在 Yandex.Cloud 中构建 Telegram 机器人

现在我建议点击桶的名字,在里面创建一个文件夹,用来组织不同应用的图片存储。 例如,对于电报机器人 聪明的想法 我创建了一个名为 tg-bot-智能想法 (没什么,我会理解这个密码)。 也创造一个。

在 Yandex.Cloud 中构建 Telegram 机器人

现在您可以单击文件夹名称,进入并上传文件:

在 Yandex.Cloud 中构建 Telegram 机器人

然后点击文件名 - 得到它 网址 用于我们的机器人,一般来说 - 任何地方(但是,不要发布这个 网址 不必要的,因为流量来自 对象存储 带电)。

在 Yandex.Cloud 中构建 Telegram 机器人

实际上,这就是全部 对象存储. 现在,当您看到在那里上传文件的提示时,您将知道该怎么做。

网钩

现在我们将安装 网钩 - IE。 当机器人从服务器收到更新(例如,来自用户的消息)时 Telegram 在我们的 Yandex 函数 请求将被发送请求) 与数据。 这是一个字符串,您可以简单地将其粘贴到浏览器的地址字段中,然后刷新页面(这只需要完成一次): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
只需更换 {机器人令牌} 到我们在创建我们的机器人时从父亲机器人那里收到的令牌,以及 {webhook_url} - 在 网址 我们的 Yandex 函数. 等一下! 但 RossKom审查制度 禁止俄罗斯联邦的供应商提供地址 https://api.telegram.org. 恩,那就对了。 但是你可以想一想。 毕竟,例如,您可以在乌克兰、以色列或加拿大询问您的祖母 - 那里没有“俄罗斯审查制度”,只有上帝知道没有它的人如何生活。 因此,安装 webhook 时的请求-响应应如下所示:

在 Yandex.Cloud 中构建 Telegram 机器人

测试。 应该镜像。

在 Yandex.Cloud 中构建 Telegram 机器人

这是真实的。 我们的祝贺 - 现在 Yandex 函数 已成为 Telegram-机器人!

聪明的想法

现在我们做 Smart Thoughts。 代码是开放的,并且位于 GitHub上. 它的评论很好,而且只有一百行。 像歌剧女主角一样阅读它!

在 Yandex.Cloud 中构建 Telegram 机器人

克隆项目并安装依赖项:

git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i

对文件进行所需的更改 index.js (可选;您不能更改任何内容)。 创造 拉链-archive,带文件 index.js 和文件夹 节点模块 里面,例如,叫做 智能.zip.

在 Yandex.Cloud 中构建 Telegram 机器人

现在进入我们的控制台 Yandex 函数, 选择选项卡 压缩包, 按下按钮 选择一个文件并下载我们的档案 智能.zip. 最后,在右上角,点击按钮 创建版本.

在 Yandex.Cloud 中构建 Telegram 机器人

几秒钟后,当功能更新时,我们将再次测试我们的机器人。 现在他不再“照镜子”,而是传递智慧思想!

在 Yandex.Cloud 中构建 Telegram 机器人

今天就到此为止。 其他文章如下。 如果您有兴趣阅读本文,请订阅新文章的通知。 您可以在这里订阅或 Telegram-渠道 IT 教程扎哈尔Twitter @迈克扎哈罗夫.

引用

GitHub 上的代码
Yandex 云功能
Yandex 对象存储
机器人:开发人员简介
电报Bot API

捐赠

在 Yandex.Cloud 中构建 Telegram 机器人

来源: habr.com

添加评论