ساخت ربات Slack با AI SDK
در این راهنما، میآموزید که چگونه یک ربات Slack با استفاده از AI SDK بسازید. این ربات قادر خواهد بود به پیامهای مستقیم و منشنهای داخل کانالها پاسخ دهد، آن هم با توجه به context موجود در رشتهگفتگو (thread).
راهاندازی Slack app
قبل از شروع به ساخت، شما باید یک Slack app بسازید و آن را پیکربندی کنید:
۱. وارد api.slack.com/apps شوید
۲. بر روی گزینه Create New App کلیک کنید و گزینه From scratch را انتخاب کنید
۳. یک نام برای اپلیکیشن خود وارد کرده و workspace مورد نظر را انتخاب کنید؛ در نهایت بر روی گزینه Create App کلیک کنید
۴. در قسمت OAuth & Permissions در بخش Scopes، محدودههای دسترسی زیر را به ربات اضافه کنید:
- app_mentions:read
- chat:write
- im:history
- im:write
- assistant:write
۵. در بخش OAuth Tokens، برنامه را در workspace خود، نصب کنید
۶. مقدار Bot User OAuth Token در بخش OAuth Tokens و مقدار Signing Secret در قسمت Basic Information را برای استفاده در مراحل بعدی، ذخیره کنید
۷. در قسمت App Home در بخش Show Tabs در زیر بخش Chat Tab، تیک گزینه Allow users to send Slash commands and messages from the chat tab را بزنید
راهاندازی پروژه
این پروژه، از فناوریهای زیر استفاده خواهد کرد:
شروع به کار
۱. یک کلون از ریپازیتوری AI SDK Examples تهیه کنید و وارد دایرکتوری Slack-Bot شوید:
۲. وابستگیهای برنامه را با اجرای دستور زیر نصب کنید:
ساختار پروژه
ساختار پروژه مذکور، به شکل زیر است:
- ابزارهای مربوط به Slack (در مسیر lib/slack-utils.ts) که شامل توابعی برای اعتبارسنجی درخواستهای ورودی، تبدیل threadهای گفتوگو Slack به قالب سازگار با AI SDK، و دریافت شناسهی کاربری Slackbot میباشد
- فایلهایی برای مدیریت انواع مختلف رویدادهای Slack (در مسیرهای lib/handle-messages.ts و lib/handle-app-mention.ts)
- یک API endpoint (از نوع POST) برای رویدادهای Slack (در مسیر api/events.ts)
- یک entry point برای اجرای سرور NodeJS با استفاده از فریمورک Express (مسیر server.ts)
- یک فایل برای تولید پاسخ توسط مدل هوش مصنوعی از طریق AI SDK (در مسیر lib/generate-response.ts)
Event Handler
ابتدا بیایید نگاهی به مسیر API تعریفشده در فایل api/events.ts بیندازیم:
در قطعه کد فوق:
- ابتدا بررسی میشود که آیا درخواست برای تایید URL است یا شامل یک رویداد واقعی از Slack
- اگر Slack درخواست تأیید URL فرستاده باشد، پاسخ مناسب برای تأیید ارسال میشود
- اعتبار درخواست بررسی میشود تا از معتبر بودن آن اطمینان حاصل گردد
- اگر درخواست معتبر باشد، دادهی مربوط به رویداد از آن استخراج میشود
- بر اساس نوع رویداد (مثل منشن شدن ربات، شروع یک رشته گفتگو یا پیام مستقیم)، تابع مربوط به آن اجرا میشود
- در پایان، پاسخ موفق یا خطا به Slack برگردانده میشود
Event Handlers
اکنون بیایید ببینیم هر نوع رویداد چگونه مدیریت میشود.
منشنهای برنامه
زمانی که یک کاربر ربات شما را در یک کانال منشن میکند، رویداد app_mention فعال میشود. تابع handleNewAppMention در فایل handle-app-mention.ts مسئول پردازش این نوع منشنها است. عملکرد این تابع به صورت زیر است:
۱. ابتدا بررسی میشود که آیا پیام از سوی یک ربات ارسال شده یا خیر، تا از ایجاد حلقههای بیپایان پاسخدهی جلوگیری شود
۲. یک تابع بهروزرسانی وضعیت ساخته میشود تا نشان دهد ربات در حال «فکر کردن» است.
۳. اگر منشن در قالب یک thread باشد، تاریخچهی آن thread واکشی میشود.
۴. با استفاده از تابع generateResponse، محتوای پیام برای LLM ارسال میشود.
۵. پیام اولیهای که نشاندهندهی «thinking» بود، با پاسخ تولیدشده توسط هوش مصنوعی بهروزرسانی میشود.
در ادامه کد مربوطه در فایل handle-app-mention.ts قرار گرفته است:
پیامهای thread دستیار
زمانی که یک کاربر یک thread را با دستیار شما آغاز میکند، رویداد assistant_thread_started فعال میشود. تابع assistantThreadMessage در فایل handle-messages.ts مسئول مدیریت این نوع رویداد است. عملکرد این تابع به صورت زیر است:
- ارسال پیام خوشآمدگویی در ابتدای رشته
- ایجاد پیشنهادهای آماده (Suggested Prompts) برای کمک به کاربران جهت شروع تعامل با دستیار
در ادامه کد مربوط به تابع assistantThreadMessage آمده است:
پیامهای مستقیم (Direct Messages)
برای ارسال پیامهای مستقیم (DM) به ربات، رویداد message فعال میشود. این رویداد توسط تابع handleNewAssistantMessage در فایل handle-messages.ts مدیریت میشود. عملکرد این تابع به صورت زیر است:
- بررسی اینکه پیام از یک ربات نیست تا از پاسخدهی غیرضروری جلوگیری شود
- بهروزرسانی وضعیت، برای نمایش اینکه پاسخ در حال تولید است
- بازیابی تاریخچهی گفتوگو جهت ارائهی Context به مدل
- فراخوانی LLM با استفاده از محتوای گفتوگو
- ارسال پاسخ LLM در thread مرتبط با پیام کاربر
در ادامه کد مربوط به تابع handleNewAssistantMessage آمده است:
منطق AI
هستهی اصلی برنامهی ما تابع generateResponse است که در فایل lib/generate-response.ts قرار گرفته است. این تابع وظیفه دارد پیامهای دریافتی را پردازش کرده و با استفاده از AI SDK پاسخ مناسب تولید کند. نحوهی پیادهسازی تابع generateResponse به شرح زیر است:
در قطعه کد فوق، BASE_URL آدرس سرویس هوش مصنوعی است که از لیارا، تهیه کردهاید و مقدار LIARA_API_KEY، کلید API کنسول است. در قطعه کد فوق:
- از تابع generateText در AI SDK برای فراخوانی مدل openai/gpt-4o-mini استفاده میشود
- یک system prompt ارائه شده است تا رفتار مدل را هدایت کند
- پاسخ نهایی به فرمت markdown سازگار با Slack قالببندی شده است
ارتقا LLM با Toolها
قدرت واقعی AI SDK در Toolهایی نهفته است که به ربات شما امکان انجام عملیات را میدهند. بیایید دو ابزار کاربردی به آن اضافه کنیم:
در پیادهسازی بهروزشده فوق، یک Tool به نام getWeather اضافه شده است که دادههای هواشناسی را برای یک مکان مشخص واکشی میکند همچنین، برای اینکه مدل در صورت نیاز، عملیات جستجو در وب را انجام دهد، تگ online در تعریف مدل، اضافه شده است. در سرویس هوش مصنوعی لیارا، با اضافه کردن این تگ به مدل، میتوانید از سرویس Exa موجود در مدل، استفاده کنید.
همچنین مقدار maxSteps: 10 تنظیم شده است تا امکان گفتوگوهای چندمرحلهای (multi-step conversations) فراهم گردد. این ویژگی بهطور خودکار نتایج اToolها را به مدل بازمیگرداند تا در صورت نیاز، فراخوانی Toolهای بیشتری انجام گیرد یا پاسخ نهایی تولید شود.
نحوهی عملکرد
زمانی که یک کاربر با ربات شما تعامل برقرار میکند:
۱. رویداد Slack دریافت و توسط API endpoint شما پردازش میشود.
۲. پیام کاربر و تاریخچهی Thread به تابع generateResponse ارسال میشود.
۳. AI SDK پیام را پردازش میکند و در صورت نیاز ممکن است Toolهایی را فراخوانی کند.
۴. پاسخ تولیدشده قالببندی میشود تا با فرمت مورد استفاده در Slack سازگار باشد، سپس برای کاربر ارسال میشود.
Toolها بهصورت خودکار و بر اساس نیت کاربر فعال میشوند. برای مثال، اگر کاربر بپرسد: "هوای تهران چطور است؟"، مدل مراحل زیر را انجام میدهد:
۱. درخواست را بهعنوان یک query هواشناسی تشخیص میدهد.
۲. ابزار getWeather را با مختصات تهران، فراخوانی میکند.
۳. دادههای هواشناسی را پردازش میکند.
۴. یک پاسخ نهایی تولید میکند و به سؤال کاربر پاسخ میدهد.
ساخت و استقرار برنامه
اکنون، نوبت استقرار برنامه در لیارا است. مراحل زیر را دنبال کنید:
نصب Liara CLI
ترمینال را باز کنید و با اجرای دستور زیر، ابزار Liara CLI را بر روی سیستم خود نصب کنید:
لاگین به حساب کاربری
با اجرای دستور زیر، وارد حساب کاربری خود در لیارا، شوید:
ایجاد برنامه
با اجرای دستور زیر، برنامه NodeJS خود را ایجاد کنید:
تنظیم متغیرهای محیطی
طبق مستندات تنظیم متغیرهای محیطی، متغیرهای زیر را با مقدار واقعیشان، به برنامه خود اضافه کنید:
استقرار برنامه
با اجرای دستور زیر در مسیر اصلی پروژه، برنامه خود را در لیارا مستقر کنید:
اتصال مدل به Slack App
مجدداً وارد api.slack.com/apps شوید و به قسمت Event Subscriptions بروید. Enable Events را بزنید و URL برنامه NodeJS خود را به همراه api/events/ در فیلد باز شده، قرار دهید. مثلاً اگر URL برنامه NodeJS شما https://noda.liara.run باشد، باید URL زیر را در فیلد باز شده، قرار دهید:
در نهایت، بر روی گزینه Save Changes کلیک کنید تا تغییرات، ذخیره شوند.

تنظیم پارامترها
در همان صفحه Events Subscription، بر روی بخش Subscribe to bot events کلیک کنید و رویدادهای زیر را، فعال کنید:
- app_mention
- assistant_thread_started
- message:im
در نهایت، وارد workspace خود در Slack شوید و app را با ارسال یک پیام به ربات، تست کنید.

گامهای بعدی
شما یک چتبات Slack ساختهاید که توسط AI SDK پشتیبانی میشود! در ادامه برخی راههای توسعهی آن آورده شده است:
- افزودن حافظه برای کاربران خاص بهمنظور ارائهی context تعاملات قبلی به LLM
- پیادهسازی Toolهای بیشتر مانند پرسوجوی دیتابیس یا جستجو در پایگاه دانش
- افزودن پشتیبانی از قالببندی پیشرفتهی پیام با استفاده از Blockها
- افزودن تحلیلگر برای ردیابی الگوهای استفاده
در محیط Production، توصیه میشود یک سیستم queueing پیشرفته پیادهسازی شود تا از پردازش صحیح پیامها اطمینان حاصل شود.