सब्स्टिट्यूशन और फ़ॉर्मूला

सब्स्टिट्यूशन — {{...}} प्रकार के वेरिएबल हैं जो रिएक्शन सक्रिय होने पर संदेश टेक्स्ट, कार्य फ़ील्ड और बटन टेम्प्लेट में सब्स्टिट्यूट होते हैं। अपरिचित सब्स्टिट्यूशन यथावत रहते हैं। वेरिएबल के अलावा गणना के लिए फ़ॉर्मूला भी हैं। वेरिएबल डालने में संदेश एडिटर में «सब्स्टिट्यूशन» बटन मदद करता है।

प्रेषक का डेटा

  • {{first_name}}, {{last_name}} — नाम और उपनाम।
  • {{username}} — उपयोगकर्ता का @username
  • {{user_id}} — संख्यात्मक Telegram-ID।

इवेंट और चैट का डेटा

  • {{text}} (वह {{received_message}} भी) — इनकमिंग संदेश का टेक्स्ट।
  • {{message_id}} (वह {{received_message_id}} भी) — इनकमिंग संदेश का ID।
  • {{chat_id}}, {{chat_title}} (वह {{chat_name}} भी) — वह चैट जहाँ इवेंट हुआ।
  • {{topic_id}}, {{topic_url}} — टॉपिक (फ़ोरम के लिए)।

दिनांक और समय

  • {{date}} — दिनांक (YYYY-MM-DD), {{time}} — समय (HH:MM), {{datetime}} — दिनांक और समय।
  • फ़ॉर्मेटिंग: {{date:DD.MM.YYYY HH:mm}} — टोकन YYYY, YY, MM, DD, HH, mm, ss

उपयोगकर्ता पैरामीटर

  • {{param.key}} (वह {{params.key}} या {{recipient.key}} भी) — सब्सक्राइबर पैरामीटर का मूल्य। पैरामीटर «पैरामीटर बदलें», «संदेश सहेजें» कार्यों और डायलॉग उत्तरों से भरे जाते हैं।

एक्जिक्यूशन कॉन्टेक्स्ट (ctx)

  • {{ctx.key}} (वह {{context.key}} भी) — वर्तमान लॉन्च के अस्थायी मूल्य: इनकमिंग webhook का डेटा, कार्यों के परिणाम (वेब-अनुरोध, स्रोत क्वेरी, AI), बटन का पुनर्स्थापित डेटा (Carry), लूप एलिमेंट।
  • सूची लूप में एलिमेंट अपने उपनाम से उपलब्ध होता है, उदाहरण के लिए {{item.name}}

फ़ॉर्मूला

{{= expression}} कंस्ट्रक्शन टेक्स्ट में ही एक्सप्रेशन की गणना करता है। वही इंजन «गणना» कार्य और निर्णय तालिका की शर्तों में काम करता है। एक्सप्रेशन में पैरामीटर और ctx मूल्यों का नाम से उल्लेख, अंकगणित, तुलना, लॉजिक और दर्जनों फ़ंक्शन (ROUND, IF, CONCAT आदि, रूसी उपनाम भी मान्य) का उपयोग किया जा सकता है।

उदाहरण: {{= ROUND(param.total * 0.9) }} — पैरामीटर की राशि पर 10% डिस्काउंट।

पूर्ण सिंटैक्स और फ़ंक्शन सूची — फ़ॉर्मूला अनुभाग में।

सब्स्टिट्यूशन में HTML

संदेश HTML मार्कअप के साथ भेजे जाते हैं। सब्स्टिट्यूट किया गया मान लेआउट न तोड़े इसके लिए (उदाहरण के लिए जब उपयोगकर्ता नाम में < हो), सब्स्टिट्यूट किए गए मान डिफ़ॉल्ट रूप से एस्केप किए जाते हैं: HTML अक्षर सुरक्षित टेक्स्ट में बदल जाते हैं। जो टैग आप सीधे रिएक्शन टेक्स्ट में लिखते हैं (<b>, <a>, …) उन्हें नहीं छुआ जाता।

यदि मान में स्वयं तैयार मार्कअप हो (उदाहरण के लिए किसी पैरामीटर में <b>...</b> के साथ सहेजी गई घोषणा) और आप उसे जैसा है वैसा डालना चाहते हैं, तो सब्स्टिट्यूशन से पहले & लगाएं:

  • {{& key}}{{...}} सब्स्टिट्यूशन के लिए रॉ इंसर्शन।
  • {&user:key}, {&recipient:key}, {&global:key} — namespace सब्स्टिट्यूशन के लिए रॉ इंसर्शन।

& उपसर्ग केवल उसी एक सब्स्टिट्यूशन के लिए एस्केपिंग बंद करता है — मान के स्रोत की विश्वसनीयता की ज़िम्मेदारी आप पर है। सब्सक्राइबर-नियंत्रित टोकन ({{first_name}}, …) को एस्केप किया हुआ छोड़ना ही बेहतर है।

अन्य कंस्ट्रक्टर से बॉट इम्पोर्ट करते समय namespace सब्स्टिट्यूशन {user:…}/{recipient:…}/{global:…} स्वतः रॉ रूप {&…} में माइग्रेट हो जाते हैं — इनमें आमतौर पर तैयार मार्कअप वाले मान होते हैं, जैसा कि मूल कंस्ट्रक्टर में काम करता था।

फ़ॉर्मेट के बारे में महत्वपूर्ण

सब्स्टिट्यूशन {{...}} टेक्स्ट, कैप्शन, अनुरोध बॉडी और बटन टेम्प्लेट में काम करते हैं। पैरामीटर और ctx कुंजियों के नाम छोटे और लैटिन में रखें (email, total, order_id) — उन्हें सब्स्टिट्यूट करना अधिक सुविधाजनक होता है।

आगे क्या