انتشار ساقی‌بات

بعد از سپری کردن یک آخر هفته پرکار بالاخره اولین ربات تلگرام من آماده شد. ساقی‌بات از این لحظه آماده استفاده است.

بات چیست؟

پیام‌رسان تلگرام را احتمالا می‌شناسید، چرا که در ایران کاربران زیادی دارد. در ماه ژوئن سال گذشته میلادی (تقریبا تیرماه) تیم تلگرام بات را برای اولین بار معرفی کرد. یک بات تلگرام مثل یک اکانت معمولی می‌ماند با اندکی تفاوت. اول اینکه نام (username) همه‌ی بات‌ها به Bot ختم می‌شود. پس می‌شود بسادگی آنها را از سایر حسابهای کاربری تشخیص داد. دیگر اینکه بات نمی‌تواند سرخود به کاربر پیام بدهد بلکه فقط قادر است به پیام‌ها جواب بدهد. بنابراین بات‌ها نمی‌توانند مزاحمتی برای کاربران ایجاد کنند. از جایی که بات هم یک حساب تلگرام است بنابراین می‌تواند مثل سایر حسابها برایش پیام فرستاد. اما پاسخ دادن یا ندادن به پیام بر عهده‌ی خود بات است (همانطور که هر کسی تصمیم می‌گیرد که به پیام ما جواب بدهد یا آنرا ندید بگیرد). هر بات هم تعدادی فرمان دارد که با/ شروع می‌شوند. بیشتر بات‌ها فرامین /start و /help را دارند.

Image not found

تعامل با بات

به دو طریق می‌توان با بات تعامل داشت. اول ارسال عادی پیام (یا فرمان) مستقیما به خود بات. دوم صدا زدن یک بات در یک گروه یا گفتگوی ثالث. به این قابلیت بات‌ها Inline Query گفته می‌شود که تیم تلگرام در روز چهارم ژانویه معرفی کرد. در هر گفتگو یا گروهی می‌توان بات را به صورت @BotName یاد کرد (مِنشِن کرد). همچنین همزمان می‌توان پارامترهایی به بات ارسال کرد: @BotName param1 param2 etc.. بات در پاسخ به این درخواست (کوئری) می‌تواند چند نتیجه مثل عکس، لینک، جیف و مانند اینها را در پایین صفحه نمایش لیست کند و کاربر یکی نتیجه را از میان آنها انتخاب می‌کند تا در گفتگوی مربوطه نوشته شود. من از این قابلیت در ساقی‌بات برای نمایش لیستی از رباعیات استفاده کرده‌ام.

Image not found

بات چطور کار می‌کند؟

یک بات هم شبیه به حساب کاربری یک دوست است. اول اینکه باید نام کاربری‌اش را دانست و بعد می‌توان با بات گفتگو کرد. بات‌ها می‌توانند به پیام‌ها پاسخ بدهند یا یک State Machine پیچیده را پیاده‌سازی کنند. ولی معماری کلی کار بات ساده است. وقتی یک کاربر به یک بات پیامی می‌فرستد، تلگرام یک Update را یا از طریق Polling یا Web Hooks به یک برنامه که جایی روی یک کامپیوتر متصل به اینترنت در حال اجراست ارسال می‌کند. این آپدیت حاوی مشخصات پیام و مشخصات کاربر ارسال کننده پیام است. برنامه‌ی بات هم پس از انجام پردازش‌های لازم پیامی به سرور تلگرام ارسال می‌کند که حاوی توکن و پاسخ است که به نوبه خود پاسخ را تلگرام از آن استخراج کرده و به کاربر می‌فرستد و همینطور الی آخر.

چطور می‌شود یک بات ساخت؟

برای اینکار هم یک بات وجود دارد! تلگرام بسادگی و از طریق BotFather امکان ساخت بات جدید را می‌دهد. اگر با این بات چت کنید می‌توانید با ارسال فرمان /newbot و با دادن نام و نام کاربری دلخواه یک بات جدید بسازید. BotFather در عوض به شما یک Token می‌دهد که برای تعامل با بات باید از آن استفاده کرد. یعنی باید با هر درخواست آن را به سرور تلگرام ارسال کرد. تلگرام یک HTTP API فراهم کرده که می‌توان از آن طریق با بات صحبت کرد. ولی نیازی به انجام مسقتیم اینکار نیست چرا که برای زبانهای برنامه‌نویسی مختلف روال‌های سطح پایین نوشته شده‌اند.

ساقی‌بات چیست؟

ساقی‌بات یک ربات تلگرام است که برای کاربر رباعی خیام می‌فرستد. این کار را به دو طریق انجام می‌دهد. اگر با «ساقی» چت کنید، او در دیتاهای خودش دنبال هر کلمه‌ای که برایش بفرستید می‌گردد و یک رباعی شامل آن کلمه را به عنوان پاسخ می‌فرستد. اگر چند با هم ارسال کنید او دنبال یک رباعی می‌گردد که شامل همه‌ی آن کلمات باشد.

ساقی‌بات یک روبات تلگرام است. اسم خودمانی‌اش ساقی است. کارش هم ارسال رباعی خیام به انتخاب کاربر است.

اما ساقی از Inline Query هم پیشتبانی می‌کند که در حقیقت روش بهتر کار با ساقی است. برای اینکار در ورودی تلگرام باید نام ساقی و بعد یک فاصله و بعد کلمات دلخواه را وارد کرد:

@SaaghiBot می پیاله

داده‌های ساقی‌بات کجاست؟

ساقی بات از فایل YAML رباعیات خیام که پیش از این منتشر کرده‌ام استفاده می‌کند. خود ساقی هم یک برنامه‌ی اوپن‌سورس است و با نود نوشته شده است. اطلاعات دیگری هم در صفحه ویژه پروژه وارد کرده‌ام.

نتیجه‌گیری

ساقی یک بات تمرینی است. تلگرام یک پلتفرم اختصاصی است و من علاقه چندانی به کار روی پلتفرم‌های خاص ندارم اما تلگرام میلیون‌ها کاربر در ایران دارد و به همین خاطر مهم است. از طریق بات‌ها می‌توان سرویس‌های زیادی به کاربر عرضه کرد، از یک جستجوگر ساده مثل ساقی گرفته تا رباتی که با شما گیم بازی کند یا مشاوره بدهد یا راه را نشانتان بدهد یا برایتان محصولی سفارش بدهد. خلاصه خیلی ایده‌ها را می‌توان روی آن سوار کرد. امیدوارم که رباتهای جالبی در وب فارسی ببینیم.

دوشنبه‌های شاد آخر ماه

من از جادی خواستم که ساقی را در لینک‌های دوشنبه‌های شاد آخر ماه به خوانندگانش معرفی کند. قرار هم گذاشته‌ام که اگر ساقی جواب داد بات دیگری به همین سبک منشر کنم که کار ساده ولی مهمی انجام می‌دهد. بابت معرفی ساقی از او تشکر می‌کنم.