如今在访问任何现代网页时,我们很可能会看到屏幕上弹出一个自动聊天机器人,上面有一些关于网站及其服务的信息。我们可以在聊天程序中键入我们的查询,并得到答复,就像我们在与另一方的真人交谈一样。
这些与我们互动的机器人通常由一些人工智能应用程序驱动,试图模仿人类的行为。我们从它们那里得到的答复是根据网站提供的服务而定制的。它们通常被设计为向查询的人提供第一手信息,并试图解决一个人最常见的问题。
它们被部署在一些云服务上,使它们在任何时候都可用。它们几乎在我们所知道的每家公司都是如此。
一些知名的电子商务公司使用它们来解决客户的问题,使用一个自动机器人。其他的例子包括与医疗专家预约,或获得一个人感兴趣的一些在线课程的信息。如果自动机器人不能解决我们的问题,它会让我们与该公司的客户服务人员联系。
使用Python为Telegram Messenger创建一个机器人
机器人也可以在聊天信息服务中实现。在这篇文章中,我们将在Telegram Messenger应用程序中使用Python编写一个机器人。我们将使用一些基本命令,并看到我们的机器人在运行。那么,让我们开始吧。
步骤 - 1: 将Telegram应用程序安装到我们的智能手机和工作站上
首先,我们需要从Google Play商店或苹果商店下载Telegram应用程序到我们的智能手机上。该应用程序需要使用我们的联系号码进行认证。在我们的手机上设置好应用程序后,我们需要将telegram应用程序下载到我们的工作站,并通过向我们的桌面应用程序提供访问权限,使用相同的凭证,将手机的应用程序连接到工作站。
步骤 - 2: 安装Python的Telegram模块
现在,进入代码编辑器的终端,使用Pip或conda install的Python来安装Telegram模块。下面是两种安装方式的代码。
# using pip
pip install python-telegram-bot
# using conda
conda install -c conda-forge python-telegram-bot
步骤 - 3: 设置我们的Telegram桌面应用程序并启动一个新的机器人
接下来,我们需要启动我们的桌面应用程序,并对其进行配置,以便我们的自定义代码可以被访问。我们的代码通过一个API密钥来访问Telegram应用程序。在将我们的应用程序连接到我们的代码之前,我们需要通过桌面应用程序本身设置基本的机器人功能,并获得用于连接的唯一API密钥。
在我们的桌面上打开应用程序后,在应用程序搜索标签中搜索BotFather。这将弹出一个新的屏幕,包含基本设置,为我们的应用程序启动一个新的机器人。
搜索BotFather
步骤 - 4: 设置基本功能
接下来,我们需要点击BotFather页面底部提供的START按钮,将我们带到另一个屏幕,其中包含为新机器人预定义的命令,如使用 **/newbot
**命令,为我们的机器人命名,设置描述,设置个人资料图片,等等。
BotFather设置
第5步:设置基本功能和生成API密钥
接下来,我们需要为我们的机器人提供一个名称/别名和一个独特的用户名。注意,按照telegram的指示,机器人的用户名应该以 "bot " 结尾。我们还可以为我们的机器人提供描述和其他信息。稍后,我们还将设置我们的自定义命令,如 **/about, /help,
**和一些其他的命令,这些命令在使用时将提供一个自定义的回复。
当我们完成对机器人的设置后,会生成一个专门针对我们的机器人的API KEY,它将连接到我们的Python代码文件。现在,复制API KEY并将其粘贴到Python文件中,将其作为一个模块导入。
注意: API密钥提供了控制我们的机器人的全部权限。请确保将此密钥作为环境变量。如果将任何代码上传到GitHub,不要忘记在你的gitignore文件中包括env vars文件。
基础知识
第6步:代码实现:输入
现在,我们已经有了一个带有API密钥的基本应用设置,我们开始导入Python的telegram.ext 模块以及存储在一个名为 "secret.py"的python文件中的API密钥。
我们将使用 "*"从telegram.ext模块中导入一切。为了看到我们的机器人服务器代码在终端中运行,我们也可以在代码的开头加入一个打印语句:
from telegram.ext import *
import secret
print("Server is running.... ")
第7步:设置自定义命令函数
接下来,我们编写多个函数来处理我们机器人的自定义命令。它们是我们代码中的固定回复,可以使用**/about、/help等来调用。这些函数以后会被telegram.ext模块提供的处理函数和代码中稍后出现的dispatcher** 函数所使用,它将调用这些函数并提供相应的响应**。**
def start_function(update, context):
update.message.reply_text("Hello there! I'm AskPython Bot.")
def help_function(update, context):
update.message.reply_text(
"""
Available commands:
/start : Starts up the bot
/help : Help topics
/about : About text
/askpython : Go to AskPython Offical Website
/custom : Other custom commands
"""
)
def about_function(update, context):
update.message.reply_text("I am a bot and also a Python Genie.")
def ask_python_function(update, context):
update.message.reply_text("AskPython Website: https://www.askpython.com/")
def custom_function(update, context):
update.message.reply_text("Some other custom reply")
解释一下
在上面的代码中,我们定义了自定义的函数,帮助我们调用命令,如 **/start, /help, /about, /askpython,
**和 **/custom**.
一旦我们定义了这个函数,我们需要向它传递两个参数,即 **update
**和 context
:
- 更新:这个参数在函数被调用并由其提供所定义的文本回复时即被使用。
- 语境。这个参数虽然没有在我们的函数中直接使用,但却被代码内部使用,如果不把它作为一个参数,会使程序出现错误。在代码的后面,当我们使用消息的调度器时,会看到它被使用。
第8步:用于传入文本和错误处理的函数
接下来,我们又定义了两个函数。第一个名为message_handler_function的函数,将回复来自我们机器人的输入信息。这个函数可以由一些人工智能应用程序来处理传入的文本,并根据该应用程序中的文本处理算法提供一个合适的回复。在这篇文章中,我们将只是提供一个占位符,以输出与输入机器人的文本相同的内容。
请注意,这个函数将以不同于其他函数的方式被调用。
第二个函数将是一个简单的错误处理函数,如果我们的应用程序遇到任何错误,它将被调用。
代码
def message_handler_function(update, context):
update.message.reply_text(f"Custom reply to message: '{update.message.text}'")
def error_handler_function(update, context):
print(f"Update: {update} caused error: {context.error}")
第9步:通过API的连接和处理先前定义的函数
接下来,我们需要将我们的应用程序与我们在代码中早先导入的API密钥连接起来,同时为我们在代码中先前定义的所有函数添加处理程序。解释在代码块之后。
代码
# Connecting our app with the Telegram API Key and using the context
updater = Updater(secret.API_KEY, use_context=True)
my_dispatcher = updater.dispatcher
# Adding CommandHandler from telegram.ext to handle defined functions/commands
my_dispatcher.add_handler(CommandHandler("start", start_function))
my_dispatcher.add_handler(CommandHandler("help", help_function))
my_dispatcher.add_handler(CommandHandler("about", about_function))
my_dispatcher.add_handler(CommandHandler("askpython", ask_python_function))
my_dispatcher.add_handler(CommandHandler("custom", custom_function))
# Handing Incoming Messages
my_dispatcher.add_handler(MessageHandler(Filters.text, message_handler_function))
# Error Handling if any
my_dispatcher.add_error_handler(error_handler_function)
解释:在这部分代码中,我们正在用之前在代码中定义的某些参数实现函数。下面是一个简单的概述。
- 更新器:这个函数来自telegram.ext模块,接收两个参数。第一个是我们通过 "secret.py"文件访问的API密钥,变量名为API_KEY,第二个参数是指导应用程序使用上下文。这个更新器函数然后与dispatcher 方法链在一起,并存储在my_dispatcher变量中,最后提供给以下处理程序使用的方法。
- CommandHandler:这个函数负责处理我们用第一组函数定义的自定义命令。
- MessageHandler:这个函数是处理对输入的文本进行动态回复的函数,其args是Filters.txt和message_handler_function:Filters.txt是由telegram.ext模块提供的。
- add_error_handler:顾名思义,这个方法是在运行代码时捕捉任何错误。
第十步:完成并运行我们的机器人
这一步是启动我们的机器人的最后几行代码。它使用了polling(1.0),这意味着通过telegram服务器启动机器人并每隔1秒检查一次消息。然后是**idle()**函数,如果应用程序中没有提供任何输入,则保持机器人的空闲状态。
这两个方法都是通过updater函数调用的,该函数确实为我们的机器人提供了API Key和上下文。
# Starting the bot using polling() function and check for messages every sec
updater.start_polling(1.0)
updater.idle()
完整的代码
from telegram.ext import *
import secret
print("Server is running.... ")
def start_function(update, context):
update.message.reply_text("Hello there! I'm AskPython Bot.")
def help_function(update, context):
update.message.reply_text(
"""
Available commands:
/start : Starts up the bot
/help : Help topics
/about : About text
/askpython : Go to AskPython Offical Website
/custom : Other custom commands
"""
)
def about_function(update, context):
update.message.reply_text("I am a bot and also a Python Genie.")
def ask_python_function(update, context):
update.message.reply_text("AskPython Website: https://www.askpython.com/")
def custom_function(update, context):
update.message.reply_text("Some other custom reply")
def message_handler_function(update, context):
update.message.reply_text(f"Custom reply to message: '{update.message.text}'")
def error_handler_function(update, context):
print(f"Update: {update} caused error: {context.error}")
# Connecting our app with the Telegram API Key and using the context
updater = Updater(secret.API_KEY, use_context=True)
my_dispatcher = updater.dispatcher
# Adding CommandHandler from telegram.ext to handle defined functions/commands
my_dispatcher.add_handler(CommandHandler("start", start_function))
my_dispatcher.add_handler(CommandHandler("help", help_function))
my_dispatcher.add_handler(CommandHandler("about", about_function))
my_dispatcher.add_handler(CommandHandler("askpython", ask_python_function))
my_dispatcher.add_handler(CommandHandler("custom", custom_function))
# Handing Incoming Messages
my_dispatcher.add_handler(MessageHandler(Filters.text, message_handler_function))
# Error Handling if any
my_dispatcher.add_error_handler(error_handler_function)
# Starting the bot using polling() function and check for messages every sec
updater.start_polling(1.0)
updater.idle()
测试Python Telegram Bot
现在我们都准备好了,可以测试我们的Telegram机器人了:
- 运行代码,启动Telegram桌面应用程序,并使用我们提供的用户名搜索我们的机器人。在我们的例子中,是**@AskPython_01_bot**
用用户名搜索我们的机器人
- 一旦我们点击我们的机器人,它就会以我们在启动命令函数中输入的文本进行响应
启动机器人
- 让我们输入我们的 **
/help
**命令并查看响应
帮助命令
- 使用 **
/about
**命令
关于命令
- 使用 **
/askpython
**命令
Askpython命令
- 现在,让我们试着输入一些东西,看看我们的机器人的反应
文本回复
摘要
在这篇文章中,我们经历了使用Python建立一个电报机器人的基本步骤。这不是一个非常复杂的机器人,就像我们在互联网上看到的那样,使用一些伟大的人工智能工具来使它听起来像人一样。但它展示了用一小块Python代码就能让这样的机器人启动和运行的简易性。使用机器人为不断扩大的技术领域提供了一些伟大的功能和用例。