च्याटबोट (ChatBot) एउटा एप्लिकेसन (Application) हो जसलाई म्यासेजहरू पठाउन र प्राप्त गर्न डिजाइन गरिएको हो। च्याटबोट (ChatBot) च्याट एप्लिकेसनमा निर्भर हुन्छ, जस्तै सफ्टवेयर (Software) तपाईंको अपरेटिङ सिस्टम (Operating System) मा निर्भर हुन्छ। अधिकांश च्याट एप्लिकेसनहरूले एउटा एपीआई (API - Application Programming Interface) इन्टरफेस प्रदान गर्दछ जसले एप्लिकेसनलाई म्यासेजहरू पठाउन र प्राप्त गर्न मद्दत गर्दछ। म यहाँ एउटा साधारण टेलिग्राम च्याट बोट (Telegram Chat Bot) एप्लिकेसनको बारेमा व्याख्या गर्नेछु।
टेलिग्रामले एउटा एपीआई (API) प्रदान गर्दछ ताकि बोट (Bot) ले टेलिग्रामसँग इन्टरफेस (Interface) गर्न सकोस्। टेलिग्राम बोटलाई ‘बोटफादर’ (BotFather) नामक टेलिग्राम बोटसँग च्याट गरेर दर्ता (Register) गर्न सकिन्छ। टेलिग्राममा केवल BotFather खोज्नुहोस् र /start म्यासेज पठाएर कुराकानी सुरु गर्नुहोस्। त्यसपछि तपाईंले /newbot म्यासेज पठाएर नयाँ बोट सिर्जना गर्न सक्नुहुन्छ। दर्ता प्रक्रिया पूरा भएपछि, BotFather ले तपाईंलाई एउटा टोकन (Token) प्रदान गर्नेछ जुन 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw जस्तै देखिन्छ। यो टोकन बोटलाई प्रमाणित (Authenticate) गर्न प्रयोग गरिन्छ। तपाईंले निम्न सिन्ट्याक्स (Syntax) प्रयोग गरेर बोटको तर्फबाट अनुरोधहरू गर्न सक्नुहुन्छ: https://api.telegram.org/bot<token>/METHOD_NAME।
बोटले प्राप्त गरेका म्यासेजहरूको अपडेट (Update) प्राप्त गर्ने दुईवटा विधिहरू छन्: पोलिङ (Polling) र वेब हुक्स (Webhooks - interrupt)। भिन्नता यो हो कि पोलिङ (Polling) विधिमा एप्लिकेसनले बोटले प्राप्त गरेका नयाँ म्यासेजहरू लिन टेलिग्राम सर्भरसँग बारम्बार (Recursively) जाँच गर्दछ। जबकि वेबहुक (Webhook) विधिमा, टेलिग्राम सर्भरले म्यासेज प्राप्त गर्दा एउटा HTTPS अनुरोध (Request) गर्दछ। पोलिङ विधिलाई डोमेन नाम (Domain Name) आवश्यक नपर्ने फाइदा हुन्छ।
बोट सिर्जना गर्नका लागि HTTP API प्रयोग गर्न सम्भव छ, तर हामीसँग एउटा पाइथन प्याकेज (Python Package) छ जसले यसलाई धेरै सजिलो बनाउँछ। कृपया निम्न प्याकेज स्थापना गर्नुहोस्:
pip install pyTelegramBotAPI
टेलिग्राम बोटमा कमाण्ड (Command) को अवधारणा हुन्छ। सबै टेलिग्राम कमाण्डहरू / बाट सुरु हुन्छन् र यसले बोटका लागि म्यासेज हो भन्ने संकेत गर्दछ। बोटलाई सक्रिय गर्नका लागि सुरुमा पठाउनुपर्ने पहिलो म्यासेज /start हो।
import telebot
bot = telebot.TeleBot(<token>)
अब हामी एउटा प्रकार्य/फंक्सन (Function) लेख्न सक्छौँ जुन बोटले /start म्यासेज प्राप्त गर्दा कल (Call) हुनेछ।
@bot.message_handler(commands=['start', 'help'])
def greet(message):
bot.send_message(message.chat.id,"Hi {}, I am an assistance bot.".format(message.from_user.first_name))
माथिको उदाहरणमा हामीले एउटा फंक्सन (Function) सिर्जना गर्यौं जसले एउटा आर्ग्युमेन्ट (Argument) लिन्छ। यो फंक्सनलाई @bot.message_handler डेकोरेटर (Decorator) द्वारा सजाइएको छ, जहाँ bot भनेको TeleBot प्रकारको अब्जेक्ट (Object) हो र यसको आर्ग्युमेन्टले फंक्सन कुन अवस्थामा ट्रिगर (Trigger) हुन्छ भन्ने सर्त निर्दिष्ट गर्दछ। प्यारामिटर message ले बोटले प्राप्त गरेको म्यासेजको विवरण दिन्छ। यदि तपाईं फ्लास्क (Flask) सँग परिचित हुनुहुन्छ भने, यो एउटा रिक्वेस्ट ह्यान्डलर (Request Handler) सिर्जना गरेजस्तै हो।
काम सजिलो बनाउनका लागि आउनुहोस् तीनवटा कमाण्डहरू /signin, /signout र /list सिर्जना गरौँ। /list ले साइन इन (Sign in) गरेका सबै प्रयोगकर्ताहरूको सूची दिन्छ।
online = {}
@bot.message_handler(commands=["signin"])
def sigin(message):
online[message.from_user.username] = message.from_user
bot.send_message(message.chat.id,"signed in")
माथिको कोडमा हामीले online नामको एउटा डिक्सनरी (Dictionary) र एउटा म्यासेज ह्यान्डलर सिर्जना गर्यौं जसले साइन इन गरेका प्रयोगकर्ताहरूलाई कुञ्जी (Key) को रूपमा युजरनेम (Username) सँग भण्डारण गर्दछ।
@bot.message_handler(commands=["list"])
def list(message):
users = ""
for username in online:
users = users + online[username].first_name + " "
if users == "":
users = "Nobody has signed in"
else:
users += "are online"
bot.send_message(message.chat.id,users)
माथिको म्यासेज ह्यान्डलरले डिक्सनरी (Dictionary) मार्फत लुप (Loop) चलाउँछ र साइन इन गरेका सबै प्रयोगकर्ताहरूको पहिलो नाम (First name) समावेश भएको म्यासेज सिर्जना गर्छ र च्यानलमा फिर्ता पठाउँछ।
@bot.message_handler(commands=["signout"])
def signout(message):
if message.from_user.username in online:
del online[message.from_user.username]
bot.send_message(message.chat.id,"signed out")
else:
bot.send_message(message.chat.id,"oops you have not signed in before")
माथिको म्यासेज ह्यान्डलरले प्रयोगकर्तालाई साइन इन सूची (Signed in list) मा भएमा सूचीबाट हटाउँछ।