Telegram bot command उन slash कीवर्ड में से एक है जो एक bot प्रकाशित करता है ताकि लोग देख सकें कि वह क्या करता है। ये मैसेज बॉक्स के बगल में मेनू में दिखाई देते हैं, और Telegram की अपनी परिभाषा सीधी-सादी है: "A command is a simple /keyword that tells the bot what to do."
इस पेज की असली बात यह नहीं है कि ये क्या हैं, बल्कि यह है कि कोई व्यक्ति कौन-से commands देखता है, क्योंकि यह एक precedence नियम से तय होता है न कि किसी एक सूची से, और यही सबसे आम कारण है कि कोई बदलाव लागू नहीं हुआ लगता।
एक command कैसा दिख सकता है?
Telegram के फ़ॉर्मेट नियम सख्त और छोटे हैं। Commands "must always start with the / symbol and contain up to 32 characters. They can use Latin letters, numbers and underscores, though simple lowercase text is recommended for a cleaner look."
यानी कोई स्पेस नहीं, कोई हाइफ़न नहीं, कोई एक्सेंटेड कैरेक्टर नहीं, और slash के कीवर्ड सहित 32 कैरेक्टर से ज़्यादा कुछ नहीं। इन नियमों से बाहर का command कोई छोटा command नहीं है; वह command ही नहीं है।
तीन commands सबसे अपेक्षित हैं। Telegram सभी डेवलपर्स से कहता है कि जहाँ लागू हो वहाँ /start, /help और /settings को सपोर्ट करें, ताकि लोगों को हर bot में एक जैसा सेट मिले। इन तीनों को reserved मानना अच्छी आदत है, भले ही आपका bot उसी शब्द से कुछ अलग करता हो।
Commands कैसे सेट किए जाते हैं?
दो तरीके हैं, और दोनों एक ही अंतर्निहित सूची हैं।
आप इन्हें Telegram के अपने @BotFather के ज़रिए बातचीत में सेट कर सकते हैं, जो बनाते समय सामान्य रास्ता है। या आप इन्हें कोड से Bot API मेथड setMyCommands के ज़रिए सेट कर सकते हैं, जो सूची को एक array के रूप में लेता है, अधिकतम 100 commands स्वीकार करता है, और एक वैकल्पिक scope लेता है जो "Defaults to BotCommandScopeDefault"।
API रास्ता तब इस्तेमाल करें जब आपके commands की कोई भी चीज़ state पर निर्भर हो, क्योंकि इसे जब भी state बदले तब कॉल किया जा सकता है, न कि केवल तब जब कोई इंसान याद करे।
मेरी command सूची क्यों नहीं बदलती?
क्योंकि scopes मर्ज नहीं होते, और पहले सेट की गई कोई संकीर्ण सूची अभी भी जीत रही है।
Telegram का मॉडल यह है कि एक bot "is able to show different commands to different users and groups", जो scopes द्वारा नियंत्रित होती है, और ये सात हैं:
BotCommandScopeDefaultBotCommandScopeAllPrivateChatsBotCommandScopeAllGroupChatsBotCommandScopeAllChatAdministratorsBotCommandScopeChatBotCommandScopeChatAdministratorsBotCommandScopeChatMember
और resolution नियम Telegram के दस्तावेज़ में "Determining list of commands" के अंतर्गत एक ही वाक्य है: "The first list of commands which is set is returned."
सबसे आम शिकायत का पूरा उत्तर यही है। सूचियाँ मिलाई नहीं जातीं। Telegram सबसे विशिष्ट scope से सबसे कम विशिष्ट तक एक क्रमबद्ध अनुक्रम चलता है, और पहले सेट किए गए scope पर रुक जाता है।
Bot के साथ प्राइवेट चैट में, Telegram जो क्रम चलता है वह है: एक मैचिंग language_code के साथ botCommandScopeChat, फिर botCommandScopeChat, फिर एक language code के साथ botCommandScopeAllPrivateChats, फिर botCommandScopeAllPrivateChats, फिर एक language code के साथ botCommandScopeDefault, फिर botCommandScopeDefault।
Groups और supergroups में अनुक्रम लंबा है, botCommandScopeChatMember से शुरू होकर administrator-only scopes और botCommandScopeAllGroupChats से होते हुए डिफ़ॉल्ट तक पहुँचता है।
एक चीज़ दोनों के बीच उलट जाती है, और यही जाल है। प्राइवेट चैट में botCommandScopeChat सबसे विशिष्ट scope है। Group में ऐसा नहीं है: botCommandScopeChatAdministrators और इसका language variant दोनों इससे ऊपर बैठते हैं, इसलिए एक बार सेट की गई administrators सूची उन लोगों के लिए per-chat सूची को हरा देती है, ठीक उसी जगह जहाँ आप per-chat के जीतने की उम्मीद करते।
तो अगर आपने टेस्टिंग के दौरान per-chat सूची सेट की और बाद में डिफ़ॉल्ट बदला, तो वह एक चैट हमेशा पुरानी सूची दिखाती रहेगी। समाधान यह है कि संकीर्ण scope को क्लियर करें, न कि व्यापक scope को बार-बार एडिट करते रहें, और यही बात language_code variant पर भी लागू होती है, जो क्रम में अपने scope से ऊपर बैठता है।
मुझे वास्तव में क्या करना चाहिए?
Precedence नियम से तीन आदतें निकलती हैं।
- डिफ़ॉल्ट scope पहले सेट करें और सबसे अंत में बदलें। यह वह fallback है जिस तक हर कोई पहुँचता है जब कोई संकीर्ण scope मौजूद नहीं होता, इसलिए यही वह सूची है जो आपके अधिकतर उपयोगकर्ता देखते हैं।
- संकीर्ण scope जानबूझकर इस्तेमाल करें, सुविधा के लिए नहीं। Chat या member स्तर पर सेट की गई कोई भी चीज़ बाद में आपको तब तक दिखाई नहीं देती जब तक आप ढूँढने न जाएँ, और यह चुपचाप हर व्यापक सूची को ओवरराइड कर देती है।
- जब कोई सूची पुरानी लगे, तो जिसे आपने एडिट किया उसे दोबारा सेट करने की बजाय scopes की गिनती करें। जो scope जीत रहा है वह आम तौर पर वह नहीं होता जिसे आप बदलते रहे हैं।
क्या Bird Telegram सपोर्ट करता है?
सत्यापन कोड के लिए हाँ, और इस पेज पर वर्णित किसी भी चीज़ के लिए नहीं।
Bird Verify एक बार के सत्यापन कोड Telegram के ज़रिए डिलीवर करता है, साथ ही email, SMS और WhatsApp के ज़रिए भी, और इसके लिए Telegram के अपने verified notification account का इस्तेमाल होता है, न कि आपके द्वारा चलाए जा रहे किसी bot का। यह command menu वाले bot से बिल्कुल अलग तंत्र है: न कोई bot रजिस्टर करना है, न कोई commands प्रकाशित करने हैं, और इस पेज की कोई भी बात इस पर लागू नहीं होती। अगर सत्यापन कोड डिलीवरी ने आपको यहाँ लाया है, तो Bird Verify में चैनल और उनके fallback क्रम की जानकारी है।
ऊपर सब कुछ Telegram के अपने प्लेटफ़ॉर्म का व्यवहार है। उनकी bot features गाइड और Bot API reference इसका स्रोत हैं और बदलाव जाँचने की जगह हैं।
संक्षेप में
Command एक slash कीवर्ड है जो bot प्रकाशित करता है।
यह एक slash से शुरू होता है, अधिकतम 32 कैरेक्टर तक हो सकता है, और केवल लैटिन अक्षर, संख्याएँ और अंडरस्कोर इस्तेमाल करता है।
हर bot से तीन commands अपेक्षित हैं।
Telegram डेवलपर्स से कहता है कि जहाँ लागू हो वहाँ
/start,/helpऔर/settingsको सपोर्ट करें, ताकि लोगों को हर जगह वही तीन मिलें।Scopes तय करते हैं कि कौन कौन-सी सूची देखता है।
सात scope हैं, एक ग्लोबल डिफ़ॉल्ट से लेकर किसी एक चैट के किसी एक विशेष सदस्य तक।
पहला सेट किया गया scope पूरी तरह जीतता है।
सूचियाँ मर्ज नहीं होतीं। एक बार सेट किया गया संकीर्ण scope उस दर्शक वर्ग से व्यापक सूची को तब तक छुपाता है जब तक आप उसे क्लियर नहीं करते।