搜索
首页web前端js教程如何使用node.js构建第一个电报聊天机器人

如何使用node.js构建第一个电报聊天机器人

>所以,今天早上,您醒来了,一个想法是开发一种存储和标记您阅读的有趣文章的方法。播放了这个想法后,您认为电报聊天机器人是此问题最方便的解决方案。

>在本指南中,我们将介绍使用JavaScript和Node.js.

构建第一个电报聊天机器人所需的一切

开始,我们必须在所谓的Botfather上注册我们的新机器人才能接收我们的API访问令牌。

>

钥匙要点

    >在电报上向botfather注册您的机器人以获取API访问令牌,这对于运行机器人代码是必不可少的。
  • >使用javascript和node.js代码您的bot。该教程使用一个简单的node.js项目,具有两个依赖项:dotenv和node-telegram-bot-api。
  • >通过将API访问令牌传递并将轮询选项设置为TRUE来创建BOT命令。这允许机器人定期检查传入消息。
  • >
  • >探索高级选项,例如发送带有预定义选项的键盘。您还可以请求数据,例如一个人的电话号码或地理位置。
  • 要部署机器人,您可以使用Heroku,AWS和Google Cloud等云平台或传统托管提供商。确切的过程将取决于您选择的平台。
  • >
  • @botfather
的机器人注册

>迈向我们自己的电报机器人的第一步是向Botfather注册该机器人。 Botfath是一个机器人本身,使您的生活更加轻松。它可以帮助您注册机器人,更改机器人说明,添加命令并为您的机器人提供API令牌。

>

API令牌是最重要的步骤,因为这允许您运行可以执行BOT任务的代码。>

1。查找Botfather

可以通过搜索“ Botfather”在电报上找到Botfather。单击官方的Botfather,并在蓝色圆圈中用白色的Checkmark图标表示。

2。注册一个新的bot

如何使用node.js构建第一个电报聊天机器人>现在我们找到了Botfather,让我们与他交谈!您可以通过键入 /newbot开始对话。 Botfather会要求您为双方选择一个名称。这个名称可以是任何东西,不必是唯一的。为了使事情变得简单,我命名了我的机器人文章。

接下来,将提示您输入机器人的用户名。用户名必须是唯一的,并且以机器人结束。因此,我选择了Michiel_article_bot,因为尚未使用该用户名。这也将是您用于查找电报搜索字段中的机器人的用户名。

>如何使用node.js构建第一个电报聊天机器人

> afterbot将与您的令牌返回成功消息,以访问电报http api。确保安全存储这个代币,当然不会与其他任何人共享。

> 如何使用node.js构建第一个电报聊天机器人

3。修改bot

>我们可以通过添加描述或设置我们希望该机器人知道的命令来进一步修改机器人。您可以用文本 /setCommands向机器人发送消息。它将向您展示如何使用格式命令1- description。

>输入命令

对于我的机器人,我设置了命令书签 - 保存有趣的文章URL。

如何使用node.js构建第一个电报聊天机器人>如果您现在查找机器人,您将在聊天框中看到一个命令图标,向您显示可用命令。您可以创建更多确实有效的命令,并且不会通过Botfather列出它们。但是,从UX的角度来看,我建议在Botfather上注册所有可用命令。

>

如何使用node.js构建第一个电报聊天机器人我们可以使用 /setprivacy设置机器人的隐私。您可以启用或禁用它。默认情况下,隐私值设置为已启用,这意味着您的机器人只会接收以 /符号开头或通过提及机器人的用户名的消息。

可以禁用此设置,这意味着您的机器人可以接收所有发送给组的消息。您将不得不向您的组添加一个机器人才能接收所有这些消息。

>可以在此处找到所有可用命令的列表:如何使用node.js构建第一个电报聊天机器人

>最后,我们都准备开始编码。确保已准备就绪API访问令牌。如何使用node.js构建第一个电报聊天机器人>

>编码您的第一个bot命令

首先,在本教程中,我们将使用我准备的以下代码。

>这是一个简单的node.js项目,只有两个依赖项:dotenv和node-telegram-bot-api。第一个软件包用于创建一个.env配置文件,该文件将保存我们的API访问令牌。第二个软件包用作电报机器人API的节点。

1。设置项目

开始,请克隆GitHub存储库,然后在您喜欢的编辑器中打开项目。接下来,在项目的根部创建一个.env文件,然后添加单行 - token = yourtoken。用您从Botfather那里收到的令牌替换您的句子。

> 为了确保连接起作用,请导航到终端中项目的根并运行NPM启动。 NPM启动命令将运行您的app.js文件,并应连接到您的bot。如果您看不到任何错误,我们很高兴去!

>

2。创建第一个bot命令

首先,我们必须通过将其传递给我们的API访问令牌并将投票选项设置为TRUE来创建该机器人。这意味着机器人将定期检查传入消息。

>
<span>require('dotenv').config();
</span><span>const TelegramBot = require('node-telegram-bot-api');
</span>
<span>const token = process.env.TOKEN;
</span>
<span>// Created instance of TelegramBot
</span><span>const bot = new TelegramBot(token, {
</span>   <span>polling: true
</span><span>});
</span>

>现在已经创建了机器人,让我们看一下代表我们 /书签命令的代码片段。我们设置了一个侦听器,用于传入的短信,ONTEXT并指定以寻找以 /书签开头的消息,因为我们在Regex String中指定了此消息。

>消息以 /书签开头时,我们的代码将执行。首先,我们存储聊天ID,因为我们希望能够将消息发送回该用户的聊天。

接下来,我们检查用户是否正确使用了命令。我们希望通过这样的命令传递一个URL: /书签www.google.com。

如果没有指定URL,我们将消息发送回存储的ChatId,告诉用户为我们提供URL。如果他们确实发送了URL,我们将存储URL并向他们发送成功消息。>

>您可能已经注意到我们正在使用两个参数用于回调功能msg和匹配。 MSG属性表示您收到的完整消息,而匹配表示我们定义的正则表达式的结果。下图显示了完整的msg,之后----它显示了匹配项。
<span>// Listener (handler) for telegram's /bookmark event
</span>bot<span>.onText(<span>/<span>\/bookmark</span>/</span>, (msg<span>, match</span>) => {
</span>   <span>const chatId = msg.chat.id;
</span>   <span>const url = match.input.split(' ')[1];
</span>   <span>// 'msg' is the received Message from Telegram
</span>   <span>// 'match' is the result of executing the regexp above on the text content
</span>   <span>// of the message
</span>
   <span>if (url === undefined) {
</span>       bot<span>.sendMessage(
</span>           chatId<span>,
</span>           <span>'Please provide URL of article!',
</span>       <span>);
</span>       <span>return;
</span>   <span>}
</span>
   <span>URLs.push(url);
</span>   bot<span>.sendMessage(
</span>       chatId<span>,
</span>       <span>'URL has been successfully saved!',
</span>   <span>);
</span><span>});
</span>
>

在与机器人聊天中尝试命令时,我们会收到以下结果:> 如何使用node.js构建第一个电报聊天机器人

如果您看到相同的结果,恭喜!您刚刚创建了第一个bot命令。让我们看一下更高级的选项,例如发送带有预定义选项的键盘。

> 如何使用node.js构建第一个电报聊天机器人3。键盘选项

>现在我们知道如何创建自定义命令,让我们更深入地了解键盘选项。可以发送带有命令的预定键键盘以限制用户的选项。它可以很简单,就像限制用户以Yes或No.

的回答一样简单

3.1普通键盘

>让我们看一下以下代码片段。我们已经在bot.sendmessage函数中添加了第三个参数。此对象定义了我们键盘的选项。如果您仔细查看reply_markup.kekeboard,则会找到一个包含更多数组的数组。这里的每个数组代表一个带有选项的行。这可以帮助您制定更重要或更长的按钮文本的格式化选项。

>

此代码在将消息 /键盘发送到我们的机器人时给出以下结果。

<span>// Listener (handler) for showcasing different keyboard layout
</span>bot<span>.onText(<span>/<span>\/keyboard</span>/</span>, (msg) => {
</span>   bot<span>.sendMessage(msg.chat.id, 'Alternative keybaord layout', {
</span>       <span>'reply_markup': {
</span>           <span>'keyboard': [['Sample text', 'Second sample'], ['Keyboard'], ['I\'m robot']],
</span>           <span>resize_keyboard: true,
</span>           <span>one_time_keyboard: true,
</span>           <span>force_reply: true,
</span>       <span>}
</span>   <span>});
</span><span>});
</span>
此外,我们还可以定义使用每个选项的额外数据的内联键盘。3.1内联键盘

>内联键盘将显示在聊天中,而不是在您的消息输入框中显示。当我们想标记提交的URL时,我们可以通过向用户显示可用类别来做到这一点。这就是我们的键盘外观:

如何使用node.js构建第一个电报聊天机器人>让我们看一下下面的代码。 Reply_markup现在定义属性inline_keyboard。其余的标记保持不变。每个数组代表一行。但是,我们还可以通过文本和callback_data传递一个对象,以了解您选择了哪个选项。

>

<span>require('dotenv').config();
</span><span>const TelegramBot = require('node-telegram-bot-api');
</span>
<span>const token = process.env.TOKEN;
</span>
<span>// Created instance of TelegramBot
</span><span>const bot = new TelegramBot(token, {
</span>   <span>polling: true
</span><span>});
</span>
下一部分说明如何使用处理程序接收回调数据。>

3.2键盘回调

如果我们想接收回调数据,我们必须收听此类事件。>

callbackquery上的消息属性包含来自用户的整个消息。数据属性包含我们的类别回调数据。

<span>// Listener (handler) for telegram's /bookmark event
</span>bot<span>.onText(<span>/<span>\/bookmark</span>/</span>, (msg<span>, match</span>) => {
</span>   <span>const chatId = msg.chat.id;
</span>   <span>const url = match.input.split(' ')[1];
</span>   <span>// 'msg' is the received Message from Telegram
</span>   <span>// 'match' is the result of executing the regexp above on the text content
</span>   <span>// of the message
</span>
   <span>if (url === undefined) {
</span>       bot<span>.sendMessage(
</span>           chatId<span>,
</span>           <span>'Please provide URL of article!',
</span>       <span>);
</span>       <span>return;
</span>   <span>}
</span>
   <span>URLs.push(url);
</span>   bot<span>.sendMessage(
</span>       chatId<span>,
</span>       <span>'URL has been successfully saved!',
</span>   <span>);
</span><span>});
</span>
>您现在可能已经发现了一个设计错误。如果我们有两个命令将回调数据发送回该怎么办?您可能会得到一些非常奇怪的行为或答复。

因此,建议发送回一个符合条件的JSON对象,该对象还设有标签以识别回调数据所属的命令。看看以下最佳实践:

您可以使用命令选项中的数据切换到此命令的特定业务逻辑。

>我们正在成为Telegram Bot Jedis的途中。要成为一名完整的主人,让我们探索数据请求。
<span>// Listener (handler) for showcasing different keyboard layout
</span>bot<span>.onText(<span>/<span>\/keyboard</span>/</span>, (msg) => {
</span>   bot<span>.sendMessage(msg.chat.id, 'Alternative keybaord layout', {
</span>       <span>'reply_markup': {
</span>           <span>'keyboard': [['Sample text', 'Second sample'], ['Keyboard'], ['I\'m robot']],
</span>           <span>resize_keyboard: true,
</span>           <span>one_time_keyboard: true,
</span>           <span>force_reply: true,
</span>       <span>}
</span>   <span>});
</span><span>});
</span>
>

3.3数据请求 - 电话号码

>可以请求数据,例如一个人的电话号码或地理位置。在本教程中,我们展示了如何用替代键盘请求电话号码。

>

用户将在他的聊天中收到以下请求:

<span>// Listener (handler) for telegram's /label event
</span>bot<span>.onText(<span>/<span>\/label</span>/</span>, (msg<span>, match</span>) => {
</span>   <span>const chatId = msg.chat.id;
</span>   <span>const url = match.input.split(' ')[1];
</span>
   <span>if (url === undefined) {
</span>       bot<span>.sendMessage(
</span>           chatId<span>,
</span>           <span>'Please provide URL of article!',
</span>       <span>);
</span>       <span>return;
</span>   <span>}
</span>
   tempSiteURL <span>= url;
</span>   bot<span>.sendMessage(
</span>       chatId<span>,
</span>       <span>'URL has been successfully saved!',
</span>       <span>{
</span>           <span>reply_markup: {
</span>               <span>inline_keyboard: [[
</span>                   <span>{
</span>                       <span>text: 'Development',
</span>                       <span>callback_data: 'development'
</span>                   <span>}, {
</span>                       <span>text: 'Lifestyle',
</span>                       <span>callback_data: 'lifestyle'
</span>                   <span>}, {
</span>                       <span>text: 'Other',
</span>                       <span>callback_data: 'other'
</span>                   <span>}
</span>               <span>]]
</span>           <span>}
</span>       <span>}
</span>   <span>);
</span><span>});
</span>
单击我的电话号码时,您会收到以下电话号码请求:>

这是我们提供访问后的外观:如何使用node.js构建第一个电报聊天机器人

>终于!您是一个完整的电报机器人绝地。目前,可以在此处找到更多信息和资源:如何使用node.js构建第一个电报聊天机器人

私人消息和公共消息之间的区别如何使用node.js构建第一个电报聊天机器人

不同类型的事件

Hosein2398在github
    上由Hosein2398的教程
  • >也请继续关注这里 - 下个月我们将通过一个更深入地研究Telegram API的高级功能的教程。
  • 经常询问有关使用Node.js

    构建您的第一个电报聊天机器人的问题(常见问题解答)

    >使用node.js?

    >如何使用botfather在电信上创建一个机器人?botfather是电报上的机器人,它允许您创建新的机器人。要创建一个新的机器人,请与Botfather开始聊天,然后按照提示。您将被要求为机器人选择名称和用户名。完成此操作后,Botfather将为您提供一个令牌,您将使用它与Telegram API进行交互。

    我如何使用node.js? 🎜>要使用node.js与Telegram API进行交互,可以使用Node-Telegram-bot-api软件包。该软件包为电报API提供了一个简单而强大的接口。您可以使用NPM安装它,然后在代码中需要它。然后,您可以使用Botfather提供的令牌创建一个新的机器人,并使用软件包提供的方法与API进行交互。

    >

    如何处理发送给我的机器人的消息? Node-telegram-bot-api软件包提供了一种ONTEXT方法,您可以使用该方法来处理发送给机器人的短信。此方法将正则表达式和回调函数作为参数。每当收到与正则表达式匹配的消息时,都会调用回调函数。消息对象传递给回调函数,您可以使用该函数来响应该消息。

    >

    >如何从机器人发送消息?

    从机器人发送消息,您可以使用Node-Telegram-Bot-API软件包提供的SendMessage方法。此方法采用两个参数:收件人的聊天ID和消息的文字。您可以从消息对象获取聊天ID,传递给ONTEXT方法的回调函数。

    >

    >我如何部署我的bot?

    一旦构建了机器人,就可以部署它可以到服务器,以便可以连续运行。有很多选择,包括Heroku,AWS和Google Cloud等云平台,以及传统的托管提供商。确切的过程将取决于您选择的平台,但通常涉及将代码推向平台,然后使用平台的工具启动机器人。

    >如何处理不同类型的消息,例如照片或贴纸?>

    >如何将自定义命令添加到我的bot?

    >您可以使用Node-Telegram-bot-api软件包提供的命令方法将自定义命令添加到您的机器人中。此方法将字符串和回调函数作为参数。字符串是命令的名称,收到命令时调用回调函数。您可以使用传递给回调函数的消息对象响应命令。

    如何处理inline查询?

    内联查询允许用户直接从文本输入中与您的机器人进行交互聊天场。 Node-Telegram-bot-api软件包提供了一种OnInlineQuery方法,您可以使用该方法来处理内联查询。此方法采用回调函数,当收到直列查询时称为。您可以使用传递给回调函数的内联查询对象对查询进行响应。

    >如何调试我的bot?

    >调试您的bot可以通过多种方式完成。一种常见的方法是使用Console.LOG语句在代码中打印有关机器人状态的信息。您还可以使用调试工具,例如Node.js调试器或Chrome DevTools。此外,Node-telegram-bot-api软件包提供了一种OnError方法,您可以使用该方法来处理机器人运行时发生的任何错误。

以上是如何使用node.js构建第一个电报聊天机器人的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JavaScript的起源:探索其实施语言JavaScript的起源:探索其实施语言Apr 29, 2025 am 12:51 AM

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

幕后:什么语言能力JavaScript?幕后:什么语言能力JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。

Python和JavaScript的未来:趋势和预测Python和JavaScript的未来:趋势和预测Apr 27, 2025 am 12:21 AM

Python和JavaScript的未来趋势包括:1.Python将巩固在科学计算和AI领域的地位,2.JavaScript将推动Web技术发展,3.跨平台开发将成为热门,4.性能优化将是重点。两者都将继续在各自领域扩展应用场景,并在性能上有更多突破。

Python vs. JavaScript:开发环境和工具Python vs. JavaScript:开发环境和工具Apr 26, 2025 am 12:09 AM

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

JavaScript是用C编写的吗?检查证据JavaScript是用C编写的吗?检查证据Apr 25, 2025 am 12:15 AM

是的,JavaScript的引擎核心是用C语言编写的。1)C语言提供了高效性能和底层控制,适合JavaScript引擎的开发。2)以V8引擎为例,其核心用C 编写,结合了C的效率和面向对象特性。3)JavaScript引擎的工作原理包括解析、编译和执行,C语言在这些过程中发挥关键作用。

JavaScript的角色:使网络交互和动态JavaScript的角色:使网络交互和动态Apr 24, 2025 am 12:12 AM

JavaScript是现代网站的核心,因为它增强了网页的交互性和动态性。1)它允许在不刷新页面的情况下改变内容,2)通过DOMAPI操作网页,3)支持复杂的交互效果如动画和拖放,4)优化性能和最佳实践提高用户体验。

C和JavaScript:连接解释C和JavaScript:连接解释Apr 23, 2025 am 12:07 AM

C 和JavaScript通过WebAssembly实现互操作性。1)C 代码编译成WebAssembly模块,引入到JavaScript环境中,增强计算能力。2)在游戏开发中,C 处理物理引擎和图形渲染,JavaScript负责游戏逻辑和用户界面。

从网站到应用程序:JavaScript的不同应用从网站到应用程序:JavaScript的不同应用Apr 22, 2025 am 12:02 AM

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器