خلاصه جلسات قبل 00:08

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

معرفی فرآیند فرم دریافت اطلاعات 00:55

در این جلسه با فرآیند فرم و دریافت اطلاعات از کاربر آشنا می‌شویم. منظور از فرم این است که قرار است سؤال‌هایی پشت‌سرهم از کاربر پرسیده شود و کاربر پاسخ‌ها را به ترتیب وارد کند. برای مثال پرسیده می‌شود «نام خود را وارد کنید»، کاربر نام را وارد می‌کند؛ سپس شمارهٔ موبایل پرسیده می‌شود و کاربر آن را ارسال می‌کند و به همین ترتیب. این سؤال‌ها در انتها ممکن است به مدیر ارسال شود یا در پایگاه داده ذخیره شود تا بعداً بتوان به آن‌ها مراجعه کرد. به این روند کلی که ربات سؤال‌هایی را پشت‌سرهم از کاربر می‌پرسد، فرم یا فرآیند فرم دریافت اطلاعات می‌گوییم.

ایجاد فرآیند فرم 01:52

یک فرآیند ایجاد می‌کنیم، عنوان مورد نظر را وارد می‌کنیم و روی کلید ویرایش کلیک می‌کنیم. همان‌طور که در جلسات قبلی آموختید، بسیاری از فرآیندها دستور مشخصی دارند. برای مثال می‌خواهیم با وارد کردن دستور /info کاربر وارد این فرآیند شود؛ یا اگر دستور کلیدی /info بود، با زدن آن کلید کاربر وارد این فرآیند شود و سؤال‌ها پشت‌سرهم از او پرسیده شود. بنابراین دستور را وارد می‌کنیم.

تنظیمات کلی و پایگاه داده 02:07

نکتهٔ مهم دیگر این است که باید یک پایگاه دادهٔ مشخص برای این فرآیند تعیین کنید؛ در غیر این صورت این دستور و این فرآیند کار نمی‌کند. نام پایگاه داده باید حتماً انگلیسی باشد؛ اینجا نیز نام info را انتخاب می‌کنیم. البته می‌توان هر نام دیگری نیز انتخاب کرد و هم بخش انگلیسی و هم عنوان آن دلخواه است. عنوان را «اطلاعات کاربران» می‌گذاریم. پایگاه داده ایجاد شد.

اهمیت ستون‌های قابل جستجو در پایگاه داده

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

توجه داشته باشید که اگر این فیلدها را در ابتدا تعیین نکنید، پس از آن‌که کاربران رکوردهایی وارد کردند، با وارد کردن ستون‌های قابل جستجو پس از پر شدن اطلاعات، رکوردهایی که قبلاً پر شده‌اند در نتایج جستجو نمایش داده نخواهند شد. بنابراین حتماً این ستون‌ها را از ابتدا تعیین کنید و دقیقاً بدانید کدام ستون‌ها باید بعداً قابل جستجو باشند. دربارهٔ این موضوع قبلاً در آموزش پلاگین‌ها و پلاگین dbentry توضیح داده شده است. می‌توانید به آن قسمت مراجعه کنید. فعلاً به‌خاطر اهمیت موضوع ستون‌های قابل جستجو را پر می‌کنیم و بخش‌های دیگر را بعداً دقیق‌تر بررسی می‌کنیم. ذخیره می‌کنیم و این صفحه را می‌بندیم. اکنون در فیلد پایگاه داده می‌توان «اطلاعات کاربران» را به‌عنوان پایگاه دادهٔ این فرآیند انتخاب کرد.

تنظیمات پیشرفته فرم و دستورات ویرایش

فیلد دیگری که وجود دارد فیلد دستور ویرایش این فرم است. می‌توانید دستور مخصوص ویرایش برای این فرم تعیین کنید تا اگر کاربر این دستور را هر جا فرستاد یا اگر این دستور، دستور یک کلید بود، با زدن آن کلید وارد بخش ویرایش آخرین داده‌ای شود که قبلاً در فرم وارد کرده است؛ یعنی بتواند اطلاعات خود را ویرایش کند. اما اگر /info را بزند، هر بار یک رکورد جدید برای او ایجاد می‌شود.

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

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

دادهٔ ارسالی به فرآیند بعدی نیز ادامهٔ همین موضوع است. فرض کنید اگر با دستور مستقیم وارد آن فرآیند شده بودید، ممکن بود پس از آن کاربر متنی غیر از دستور آن فرآیند ارسال کند؛ برای مثال «سلام» یا سؤالی که قرار است مربوط به آن فرآیند باشد. در این صورت می‌توانید همان مقدار را اینجا به‌عنوان دادهٔ ارسالی تعیین کنید.

مدیریت تعداد ثبت رکورد و زمان نگهداری اطلاعات

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

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

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

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

فیلد دریافت متن 10:07

اکنون دو سؤال می‌افزاییم. یکی نام کاربر را می‌پرسیم که فیلد از نوع دریافت متن ساده است و آن را فعال می‌کنیم. سپس شمارهٔ موبایل را می‌خواهیم کاربر وارد کند و این مورد را نیز فعال می‌کنیم.

اکنون می‌توان این آدرس را در ربات ارسال کرد و مشاهده می‌شود که سؤال‌ها پشت‌سرهم نمایش داده می‌شوند. اطلاعاتی که ارسال کردیم در پایگاه دادهٔ اطلاعات کاربران، در رکوردها، به‌شکل موبایل و name اضافه شده است.

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

فیلد ارسال پیام به کاربر 15:17

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

فرض کنیم در انتها می‌خواهیم پیام تشکر به کاربر ارسال شود؛ یعنی بدون این‌که سؤالی بپرسیم فقط پیام تشکر بفرستیم، برای مثال «با تشکر، اطلاعات شما دریافت شد». برای این کار فیلدی از نوع «ارسال پیام به کاربر» می‌سازیم و هر نامی که بخواهیم برای آن تعیین می‌کنیم. می‌نویسیم: «اطلاعات شما ذخیره شد. با تشکر.» و کلید بازگشت نیز می‌گذاریم تا کاربر بتواند به منوهای قبلی منتقل شود. دوباره آزمایش می‌کنیم. پیام تشکر نیز فرستاده شد و با زدن کلید بازگشت پیام شروع بازگردانده شد.

بر اساس آموزش‌های جلسات قبلی، اگر بخواهید در پیام شروع کلیدهایی مانند کلید ثبت‌نام با دستور /info اضافه کنید، می‌توانید وارد منوی مورد نظر شوید و کلید را بیفزایید. پیام را نیز پیام دیگری وارد می‌کنیم تا آزمایش‌های قبلی حذف شود. آزمایش می‌کنیم: این متن و این کلید ثبت اطلاعات که با زدن آن سؤال‌های فرآیند فرم از کاربر پرسیده می‌شود. با کلید بازگشت نیز به همین منو بازمی‌گردد. تا اینجا توانستیم فرمی ایجاد کنیم که از طریق آن رکوردها ذخیره می‌شوند و می‌توان از کاربر اطلاعات دریافت کرد.

فیلد دریافت فایل 18:06

اگر بخواهیم از کاربر فایلی دریافت کنیم چه باید کرد؟ این بار دریافت فایل را انتخاب می‌کنیم. در فیلد دریافت فایل دو گزینه دیده می‌شود که در فیلدهای دیگر نبود: ذخیرهٔ اطلاعات فایل و ذخیرهٔ فایل در صهبات.

گزینهٔ اول به این معناست که در منوی فایل‌ها تیک نگهداری این فایل زده شود (در جلسهٔ قبلی منوی فایل‌ها را نشان دادیم و توضیح دادیم که اگر این تیک زده شود، در انتهای روز این فایل از سامانهٔ صهبات حذف نمی‌شود). اما اگر بخواهیم خود فایل نیز در سامانهٔ صهبات ذخیره شود — نه فقط اطلاعاتی که در پیام‌رسان برای دسترسی به آن داریم، بلکه خود فایل به‌طور کامل در صهبات کپی شود — باید در منوی صهبات‌فایل‌ها نیز نگهداری شود. برای این کار باید تیک دوم را بزنید. هر کدام را که بزنید تفاوتی ندارد؛ توکنی که دریافت می‌کنید قابل استفاده است و می‌توانید در بخش‌های مختلف ربات از آن استفاده کنید.

تنظیم ترتیب فیلدها

اکنون می‌خواهیم تصویری از کاربر دریافت کنیم. پیام را ذخیره و فیلد را فعال می‌کنیم. نکته این است که فیلد جدید پایین‌تر از پیام تشکر قرار دارد. پیام تشکر در آن فیلد ذخیره شده بود، اما پیامی که برای دریافت تصویر باید فرستاده شود پس از آن قرار است فرستاده شود. برای تغییر ترتیب فیلدها باید از این کلید استفاده کنیم و آن‌ها را به حالت مورد نظر جابه‌جا کنیم. می‌توان هر فیلد را جابه‌جا کرد و در انتها روی کلید ذخیره کلیک کرد. بنابراین ابتدا نام، سپس موبایل، سپس تصویر و در آخر پیام تشکر ارسال خواهد شد. یک‌بار آزمایش می‌کنیم؛ تصویری انتخاب و ارسال می‌کنیم.

توکن فایل در پایگاه داده

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

بدین ترتیب می‌توان فایلی از کاربر دریافت کرد و توکن آن را در پایگاه داده ذخیره کرد.

فیلد دریافت پیام کامل 21:27

اگر بخواهیم شناسهٔ پیام کاربر ذخیره شود چه باید کرد؟ هر پیام شناسهٔ منحصربه‌فردی در کل صهبات دارد. می‌توانید این شناسه را ذخیره کنید و بعداً در فرآیند پیشرفته از آن استفاده کنید؛ هم فایل آن قابل دریافت است، هم متن و هم اطلاعات دیگری که به این پیام مربوط می‌شود.

برای ذخیرهٔ این شناسه باید نوع فیلد را «دریافت پیام کامل» انتخاب کنید. برای مثال می‌خواهیم بگوییم توضیحاتی دربارهٔ خود ارسال کنید و در صورت نیاز تصویر یا فایل دیگری را ضمیمه کنید. این فیلد را فعال می‌کنیم، ترتیب را تغییر می‌دهیم و دوباره آزمایش می‌کنیم. بخش پیام‌ها را نیز جداگانه باز می‌کنیم. مشاهده می‌شود شناسهٔ پیام ذخیره شده است. ممکن است این پیام تصویری، صوتی یا هر نوع دیگری باشد و شناسهٔ آن در دسترس است تا هر زمان لازم شد از آن استفاده شود. توجه داشته باشید که در پیام‌ها نیز مانند فایل‌ها و صهبات‌فایل‌ها موضوع نگهداری پیام وجود دارد و نگهداری این پیام به‌طور خودکار تیک خورده تا حذف نشود و بتوان بعداً از شناسهٔ آن استفاده کرد.

تا اینجا با دریافت متن، دریافت فایل، دریافت پیام کامل و ارسال پیام به کاربر آشنا شدیم.

فیلد مخفی 23:57

فیلد مخفی چه می‌کند؟ فیلد مخفی برای زمانی است که می‌خواهید بدون پرسیدن سؤال از کاربر، اطلاعاتی را در پایگاه داده ذخیره کنید؛ یعنی دقیقاً برعکس عملکرد فیلد ارسال پیام به کاربر. در فیلد ارسال پیام به کاربر پیامی به کاربر می‌فرستیم بدون این‌که پاسخ آن را ذخیره کنیم. اما در فیلد مخفی بدون پرسیدن سؤال، اطلاعاتی در پایگاه داده ذخیره می‌کنیم.

برای مثال می‌خواهیم تاریخ ذخیرهٔ این رکورد را نگهداری کنیم. می‌توان از پلاگین date استفاده کرد و اطلاعات را در فیلد date ذخیره کرد. بنابراین وقتی کاربر به این مرحله می‌رسد (در واقع در لحظه‌ای که آخرین فیلد مورد سؤال را پر کرد)، در همان لحظه پیامی ارسال می‌شود، از او تشکر می‌کند و بلافاصله تاریخ همین لحظه و همین ثانیه در پایگاه داده برای این رکورد ذخیره می‌شود. دوباره آزمایش می‌کنیم. روند دقیقاً همان روند قبلی است، اما اگر رکوردها را ببینیم تاریخ ذخیره شده است. توجه داشته باشید هر چیزی که ذخیره می‌شود قابل ویرایش است و می‌توانید این مقادیر را تغییر دهید و ذخیره کنید. به‌جای تاریخ می‌توان هر مقدار ثابتی ذخیره کرد، یا از پلاگین‌ها استفاده کرد و مقدار متغیری را در یک فیلد ذخیره کرد. نام این فیلد را test می‌گذاریم، فیلد مخفی را انتخاب و فعال می‌کنیم.

نظرسنجی و محاسبهٔ ریاضی با پلاگین‌ها

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

اما استفاده‌های بیشتری نیز می‌توان از این فیلد داشت. برای مثال فرض کنید نظرسنجی از کاربر انجام می‌دهیم و می‌پرسیم نظر شما دربارهٔ سامانهٔ ما چیست. چند فیلد سؤال می‌افزاییم تا بتوانیم حالتی را که در فیلد مخفی می‌خواهیم توضیح دهیم داخل آن نشان دهیم. (اولی ۳، دومی ۱، آخری ۴ وارد شد. پس از تازه‌سازی صفحه q01 برابر ۳، q02 برابر ۱ و آخری برابر ۴ بوده است. ۴ به‌علاوهٔ ۱ برابر ۵، ۵ به‌علاوهٔ ۳ برابر ۸ و ۸ تقسیم بر ۳ برابر ۲٫۶۶ می‌شود.)

اکنون فیلد test را پایین می‌آوریم و با پلاگین math که در جلسات قبل آموختیم (عملیات ریاضی) و پلاگین dbentry از آن استفاده می‌کنیم. به این صورت که این مقدارها را جمع کند و بر ۳ تقسیم کند تا میانگین دیده شود. در واقع ابتدا پلاگین dbentry اجرا می‌شود، مقادیر q01، q02 و q03 را جایگذاری می‌کند (برای مثال اگر ۱ باشد ۱ می‌نویسد، اگر ۳ باشد ۳، اگر ۵ باشد ۵). پس از جایگذاری، نتیجه می‌شود پرانتز ۱ به‌علاوهٔ ۳ به‌علاوهٔ ۵ پرانتز بسته تقسیم بر ۳. پس از خروج از dbentry، پلاگین math این مقدار تولیدشده را اجرا می‌کند و مقدار نهایی باید در فیلد test ذخیره شود. نتیجه این است که میانگین سه فیلدی که کاربر وارد کرده در فیلد دیگری ذخیره شده است. آزمایش می‌کنیم. فعلاً این فیلد را غیرفعال و پیام تشکر را از عملکرد ربات حذف می‌کنیم. بنابراین میانگین مقدارهایی که کاربر ارسال کرده با فیلد مخفی test به‌عنوان فیلدی جدید ذخیره شد.

فراخوانی اطلاعات فرم با پلاگین 34:20

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

بدین ترتیب آموختیم چگونه از فیلد مخفی استفاده کنیم و نتیجه را نیز به کاربر نمایش دهیم. هر یک از فیلدهایی را که کاربر فرستاده می‌توانید به همین صورت در فیلد نهایی و در پیامی که می‌خواهید به کاربر نمایش دهید استفاده کنید. بر اساس پلاگین‌هایی که قبلاً آموختید، مانند dbentry، می‌توانید در پیام‌های بعدی از فیلدهای قبلی استفاده کنید. برای مثال نامی که کاربر وارد کرده را در فیلد بعدی استفاده می‌کنیم. مشاهده می‌شود نام واردشده در سؤال بعدی استفاده شد (همان‌طور که در پیام انتهایی از فیلد test استفاده کردیم و مقدار آن را نمایش دادیم).

فیلد انتقال به فیلد 35:34

فیلد دیگری که مهم و بسیار کاربردی است فیلد انتقال به فیلد است. با این فیلد می‌توانید کاربر را به‌صورت شرطی در فرم جابه‌جا کنید و از ترتیبی که به‌صورت پیش‌فرض تعیین کرده‌اید خارج کنید. برای مثال اگر می‌خواهید بپرسید آیا مایل است در نظرسنجی شرکت کند یا خیر، ابتدا از کاربر بپرسید؛ اگر مایل بود سؤال‌های بعدی را بپرسید و اگر نبود از این فیلدها عبور کند و پیام تشکر در انتها برایش ارسال شود. برای این کار این فیلد را جابه‌جا می‌کنیم. پیش از نخستین سؤالی که می‌خواهیم بپرسیم این مورد را می‌آوریم و یک فیلد سؤال نیز اضافه می‌کنیم که آیا کاربر می‌خواهد در نظرسنجی شرکت کند یا خیر. ترتیب را درست می‌کنیم و ذخیره می‌کنیم. اکنون می‌توان شرطی افزود که بر اساس مقدار فیلد نظرسنجی تصمیم بگیرد فیلدهای بعدی را نمایش بدهد یا خیر. از پلاگین dbentry استفاده کردیم تا مقدار نظرسنجی را وارد کند. در واقع اگر کاربر روی «بله» کلیک کرده باشد مقدار «بله» جایگذاری می‌شود و اگر روی «خیر» کلیک کرده باشد مقدار «خیر». بنابراین پلاگین این مقدار را با «خیر» یا «بله» جایگذاری می‌کند. اگر «خیر» باشد این دو مساوی می‌شوند؛ بنابراین به فیلد thanks منتقل می‌شود که فیلد آخر و پیام تشکر است. نمایش نتیجه را نیز از این فیلد حذف می‌کنیم. پس سؤال‌ها به ترتیب پرسیده می‌شود، اما وقتی از فیلد نظرسنجی عبور می‌شود یک فیلد «انتقال به فیلد» وجود دارد که بررسی می‌کند: اگر مقدار نظرسنجی مساوی «خیر» بود از بقیه صرف‌نظر می‌کند و مستقیماً به فیلد thanks منتقل می‌شود؛ آن سؤال‌ها پرسیده نمی‌شود و فرم در این مرحله تمام می‌شود.

آزمایش می‌کنیم. برای کوتاه‌تر شدن برخی فیلدها را حذف می‌کنیم تا پس از موبایل نظرسنجی پرسیده شود. اگر «خیر» را بزنیم باید پیام تشکر ارسال شود و دقیقاً همین‌طور کار کرد. اگر «بله» را بزنیم سؤال‌ها پرسیده می‌شود و سپس پیام تشکر ارسال می‌شود. بنابراین با فیلد «انتقال به فیلد» توانستیم به‌صورت شرطی برخی فیلدها را کنار بگذاریم و به فیلد مورد نظر منتقل کنیم. امکان بازگشت به فیلدهای قبلی نیز وجود دارد، اما باید دقت کنید مشکل‌ساز نشود و کاربر وارد حلقه نشود.

ایجاد شروط پیچیده‌تر و فیلدهای متوالی

مثال دیگری از «انتقال به فیلد»: فرض کنید در صورتی که کاربر «بله» را انتخاب می‌کرد نیز می‌خواستیم سؤال‌های دیگری بپرسیم. برای این کار فیلد دیگری تعیین می‌کنیم، برای مثال شاغل بودن کاربر، و سپس اگر شاغل است شغلش را نیز بفرستد.

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

حالا که پیام تشکر جابه‌جا شد باید دقت کنیم در این قسمت (نام اختیاری است و برای راحتی کار خودمان است) که می‌گوییم به فیلد شاغل برود، اگر «خیر» را انتخاب کرده بود شاغل بودنش پرسیده شود. توجه داشته باشید ذخیرهٔ هر قسمت مجزا است؛ یعنی اگر می‌خواهید اطلاعات این قسمت ذخیره شود باید روی همان کلید ذخیره کلیک کنید. فعال و غیرفعال کردن به‌صورت لحظه‌ای انجام می‌شود و نیازی به کلید ذخیره ندارد.

اکنون یک «انتقال به فیلد» اضافه می‌کنیم و زیر فیلد شاغل می‌آوریم تا بر اساس آن انتقال انجام شود. اگر مقدار شاغل با «خیر» مساوی باشد به فیلد علاقه برود. اما نکته‌ای وجود دارد: فرض کنیم کاربر شاغل بود؛ طبیعتاً این بخش انجام نمی‌شود (چون «خیر» نیست). شغل را می‌نویسد و پس از آن طبیعتاً علاقه را نیز که مربوط به حالت غیرشاغل بود می‌پرسد.

پس چه باید کرد؟ باید یک فیلد انتقال نیز میان شغل و علاقه قرار دهیم تا پس از پرسیدن شغل به فیلد thanks منتقل شود و دیگر علاقه پرسیده نشود. اگر در این مرحله باشیم یعنی شغل پرسیده شده و مشخصاً فرد شاغل بودن را انتخاب کرده است. بنابراین الزامی نیست مقدار شاغل بودن را دوباره دقیق بررسی کنیم. می‌توان هر مقداری در هر دو طرف نوشت؛ چون می‌خواهیم در هر صورت وقتی شغل پرسیده شد پس از آن به thanks منتقل شود.

گرچه می‌توان دوباره dbentry را استفاده کرد و «بله» بودن شاغل را بررسی کرد، اما نیازی به این کار نیست. مقدار ۱ همواره با ۱ مساوی است و اگر کاربر وارد این مرحله شد، پس از پرسیده شدن شغل وارد این انتقال به فیلد می‌شود و همواره به thanks منتقل می‌شود و هیچ‌گاه علاقه پرسیده نخواهد شد. یک‌بار بررسی می‌کنیم: پس از نظرسنجی چون «خیر» زدیم وارد سؤال شاغل بودن شد. اگر «بله» را بزنیم باید شغل کاربر پرسیده شود؛ تا اینجا درست است. هم می‌توان شغلی را دستی نوشت و هم روی «تمایلی ندارم» کلیک کرد. پس از این باید پیام تشکر ارسال شود و دیگر علاقه پرسیده نشود. مشاهده می‌شود درست کار کرد.

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

تنها نکتهٔ باقی‌مانده این است که می‌توانید به‌جای «انتقال به فیلد»، این فیلد را به‌عنوان فیلد پایانی انتخاب کنید؛ یعنی بگویید پس از این فیلد، به هر طریقی اگر کاربر به فیلد شغل رسید، دیگر هیچ فیلد دیگری نمایش داده نشود و سؤالی پرسیده نشود. فقط توجه داشته باشید که اگر این گزینه را بزنید دیگر پیام تشکر نیز ارسال نمی‌شود. پس می‌توانستیم پیام تشکر دیگری اینجا تعبیه کنیم و آن را به‌عنوان فیلد پایانی در نظر بگیریم. در این صورت از این مرحله به فیلدهای بعدی منتقل نمی‌شد و روند فیلدها همان‌جا تمام می‌شد.

زمان پایان فرم و ثبت رکوردها

وقتی کاربری همهٔ این مراحل را تا انتها پیش رفت و به انتهای فرم رسید، در رکوردها «زمان پایان» برای او درج می‌شود. بنابراین زمان پایان فرم زمانی است که همهٔ این مراحل (چه با انتقال فیلد و چه بدون آن) تا انتها پیش رفته باشد. این‌که دفعهٔ بعد رکورد جدیدی برای کاربر ایجاد شود یا نشود به زمان پایان وابسته است و در فرآیند پیشرفته نیز این‌که آیا برای این رکورد زمان پایان تعیین شده یا نشده بسیار مهم است؛ در آموزش فرآیند پیشرفته با آن آشنا خواهیم شد.

فیلد انتقال به فرآیند دیگر 50:34

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

این مورد را نیز می‌آزماییم؛ بقیهٔ فیلدها را غیرفعال می‌کنیم تا آزمایش‌های بعدی سریع‌تر پیش برود. همان‌طور که مشاهده می‌شود اینجا نیز دقیقاً مانند انتقال به فیلد است، با این تفاوت که وقتی این مقدار تعیین شد می‌توانید شناسهٔ فرآیند را نیز تعیین کنید یا بگویید داخل فرآیند کدام قسمت و کدام دستور اجرا شود.

قبلاً نیز دیدیم اگر در فرآیندها وارد یک فرآیند شویم، این شناسهٔ فرآیند است که باید به این صورت تعیین شود و داخل این فرآیند زیرفرآیندی هست که در واقع منوی سادهٔ /start است. بنابراین اگر نام و شمارهٔ موبایل را وارد کنیم در مرحلهٔ بعد به منوی شروع بازمی‌گردیم. آزمایش می‌کنیم؛ پس از وارد کردن شمارهٔ موبایل به دستور اصلی ربات منتقل شد. دستور اصلی ربات را با شناسهٔ فرآیند و شناسهٔ همان زیرفرآیند مربوط به /start تعیین کردیم.

اجرای فرآیند دیگر و بازگشت 53:32

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

بسیاری اوقات، به‌ویژه برای فرآیندهای پیشرفته، این موضوع می‌تواند بسیار کاربردی باشد. برای مثال می‌توانید بسیاری از محاسبات را در این مرحله انجام دهید و در مراحل بعدی، در فیلدهایی که قرار است از کاربر سؤال بپرسید، از آن‌ها استفاده کنید.

فیلد حذف رکورد 54:22

حذف رکورد به این معناست که ممکن است بر اساس انتخاب کاربر، برای مثال شناسهٔ رکورد خاصی را به‌عنوان کد رهگیری به او داده باشید و بخواهید دفعهٔ بعد بتواند رکورد خود را حذف کند.

همان‌طور که در توضیحات آمده، می‌توانید با ویرگول انگلیسی چندین رکورد را انتخاب و حذف کنید. برای مثال یکی از شناسه‌ها را انتخاب می‌کنیم و در این قسمت به‌صورت دستی وارد می‌کنیم. پس از وارد کردن شمارهٔ موبایل وارد این بخش می‌شود و این رکورد حذف می‌شود؛ شماره ۹۱۱۱۱۱ است، مربوط به زمان ۱۵ و ۵۱ دقیقه.

دریافت شناسه از کاربر و حذف خودکار از پایگاه داده

چون پیام تشکر را حذف کرده‌ایم نمایش داده نمی‌شود. اگر صفحه را تازه کنیم این رکورد باید حذف شده باشد. رکورد جدید اضافه شده و آن رکورد دیگر نمایش داده نمی‌شود.

اگر بخواهیم این شناسه را از کاربر بگیریم چه باید کرد؟ اولاً باید در پیام‌های تشکر قبلی که به کاربر ارسال می‌کنیم، به‌عنوان کد رهگیری این شناسه را در اختیار او گذاشته باشیم تا در دفعات بعدی برای حذف از آن استفاده کند. این شناسه حدس‌زدنی نیست و کاربر نمی‌تواند خودش عددی بفرستد و حذف کند. برای در اختیار گذاشتن شناسه، ابتدا این فیلد را غیرفعال می‌کنیم، پیام تشکر را فعال می‌کنیم و داخل آن به‌عنوان کد رهگیری شناسهٔ این رکورد را بازمی‌گردانیم.

همان‌طور که قبلاً گفته شد استفاده از پلاگین‌ها در جلسات قبلی آموزش داده شده است. مشاهده می‌شود کد رهگیری نمایش داده می‌شود. اگر بخواهیم حذف انجام شود می‌توانیم سؤالی از کاربر بپرسیم: کدام رکورد حذف شود؟ فیلد delete را پایین‌تر می‌آوریم، فعال می‌کنیم و در این قسمت از پلاگین msg استفاده می‌کنیم تا متن کاربر به‌کار رود. نتیجه از کاربر گرفته می‌شود؛ هم در خود این فیلد شناسه ذخیره می‌شود و هم این فیلد اجرا می‌شود و هر شناسه‌ای که کاربر ارسال کرده در این قسمت قرار می‌گیرد و طبیعتاً حذف می‌شود.

اکنون شناسهٔ این رکورد را که آخر آن ۲۵۴ است به کاربر داده‌ایم. کاربر می‌تواند در سؤال بعدی از آن استفاده کند. اکنون test3 باید در رکورد دیده شود و test2 باید از پایگاه داده حذف شود. می‌توان پیام دیگری نیز گذاشت که نتیجه را به کاربر بازگرداند. ۲۵۴ اکنون باید حذف شده باشد. test2 وجود ندارد، test را داریم، test3 را نیز اکنون وارد کرده‌ایم اما test2 در نتایج نیست و حذف شده است.

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

نحوه ارسال اطلاعات فرم به مدیر 61:16

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

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

تنظیم محتوای پیام مدیر و آزمایش خروجی

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

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

افزودن شروط به فیلدها 67:17

نکتهٔ دیگری که دربارهٔ فیلدها و فرآیند فرم وجود دارد این است که برای هر یک از این فیلدها می‌توانید شرط اضافه کنید. قبلاً با شروط آشنا شدیم. در شروط می‌توانید هر شرطی اضافه کنید و در بخش‌های مختلف ربات استفاده کنید؛ در بخش پلاگین‌ها در جلسهٔ دوم با آن آشنا شدیم. یکی از بخش‌هایی که می‌توان از این شروط استفاده کرد همین قسمت است. می‌توانید هم از این قسمت وارد شروط شوید و هم از طریق منوی اصلی ربات.

اگر بخواهیم شرطی اضافه کنیم، برای مثال شمارهٔ موبایل را هر شماره‌ای قبول نکند و با الگویی مقایسه شود. می‌خواهیم مطمئن شویم حتماً عدد وارد شده باشد و متن قبول نشود. نام شرط را تعیین می‌کنیم و می‌گوییم هر وقت پیامی از کاربر دریافت شد با الگویی بررسی شود. برای مثال با regular expression می‌توان عدد بودن را بررسی کرد.

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

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

اکنون می‌توان این الگو را پیشرفته‌تر کرد و هرچه از regular expression اطلاعات داشته باشید می‌توانید الگوهای بهتری تعیین کنید. برای مثال می‌خواهیم حتماً با صفر و نه شروع شود؛ عدد بودن را با اعداد صفر تا نه نشان می‌دهیم و تعیین می‌کنیم این بخش از اعداد ۹ رقم باشد. ذخیره می‌کنیم و توضیحات لازم را می‌نویسیم. آزمایش می‌کنیم. هر حالتی غیر از الگوی موبایل که تعیین کردیم خطا می‌دهد؛ حتی وقتی عدد است. حتی عدد ۱۰ رقمی نیز خطا می‌دهد. پس باید دقیقاً بر اساس همان الگو باشد. اگر بخواهیم خطای مخصوصی وقتی شمارهٔ موبایل اشتباه وارد شده داده شود، می‌توانیم پیام دیگری ایجاد کنیم و بگوییم این خطا را برای آن حالت برگرداند. با این کار تعیین کردیم برای شمارهٔ موبایل این نوع خطا را بدهد. ممکن است چند شرط تعیین کنید و برای هر کدام خطای متفاوتی بگذارید. فقط توجه داشته باشید که باید همواره یک پیام داشته باشید که در این گزینه هیچ شرطی برای آن در نظر گرفته نشده باشد. چرا؟ چون وقتی نخستین بار این پیام ارسال می‌شود هنوز خطایی رخ نداده است. بنابراین اگر خطایی برای آن در نظر بگیرید به مشکل برمی‌خورد و این پیام در نخستین باری که کاربر وارد این فیلد شده ارسال نخواهد شد. به‌طور کلی باید یک پیام بدون خطا داشته باشید و برای هر خطا و هر شرط می‌توانید پیامی تعیین کنید. امکان چند پیام نیز وجود دارد. دوباره آزمایش می‌کنیم. خطای متفاوتی داد و با متن اصلی متفاوت است.

همان‌طور که دیدید در برخی پیام‌ها به پیام‌های مشخص و محدود نیاز داریم؛ مانند «بله» و «خیر» که می‌خواهیم کاربر فقط یکی از این دو گزینه را انتخاب کند. در این نوع سؤال‌ها نیز می‌توان از شروط استفاده کرد تا کاربر نتواند اطلاعات دیگری وارد کند، چون در پیام‌رسان می‌تواند هر مقداری تایپ و ارسال کند. اگر بخواهیم محدود کنیم و نگذاریم مقداری غیر از این گزینه‌ها ارسال شود، وارد بخش شروط می‌شویم و شرط مناسب با این کلید را اضافه می‌کنیم. راه‌حل‌های مختلفی وجود دارد که آسان‌ترین آن حالت in list است که می‌توان با ویرگول انگلیسی فهرست مقدار کلیدها را وارد کرد و شرط را ایجاد کرد. اکنون در هر پیامی که این شرط به آن اضافه شود فقط پاسخ بله یا خیر قبول می‌شود و هر پاسخ دیگری خطا می‌دهد. ممکن است برای حالت‌های مختلف شرط‌های دیگری نیز تعیین و به فهرست اضافه کنید. در جلسات قبل با نحوهٔ استفاده از شرط in list آشنا شدیم.

تعیین محدودیت ثبت رکورد 75:01

نکتهٔ آخر به تنظیمات کلی برمی‌گردد. آزمایش می‌کنیم که اگر تعداد ثبت رکورد را محدود کرده باشیم چه خطایی می‌دهد. برای مثال محدود کرده‌ایم که هر کاربر بیشتر از یک رکورد نتواند ثبت کند؛ در حالی که به‌عنوان یک کاربر قبلاً چندین رکورد در پایگاه داده ثبت کرده‌ام. بنابراین باید هنگام ورود به این بخش خطا بدهد. مشاهده می‌شود خطا داد و می‌گوید فقط یک‌بار می‌توانید اطلاعات را وارد کنید. چرا کلید ویرایش نمایش داده می‌شود؟ به این دلیل که امکان ویرایش را فراهم کرده‌ایم؛ یعنی آخرین رکورد را کاربر می‌تواند ویرایش کند. می‌توانم دوباره بازگردم و این رکورد را که آخرین رکورد من است با این دستور ویرایش کنم. اگر این مورد را حذف می‌کردم کلید ویرایش برای کاربر نمایش داده نمی‌شد.

تنظیمات پیشرفته و بررسی سوابق پیش از ثبت‌نام

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

اما حالت دیگری که می‌توانید داشته باشید و مربوط به همین جلسه است این است که ورود به این فرم را بر اساس دستور ویرایش انجام دهید. وقتی دستور اصلی ندارید و در واقع دستور ویرایش همان دستوری است که همواره کاربر با آن وارد می‌شود، معنای اول آن این است که همواره فقط می‌تواند یک‌بار این فرم را پر کند. اما هر بار که این فرم را پر می‌کند در واقع اطلاعات قبلی حذف می‌شود و اطلاعات قبلی ویرایش می‌شوند. بنابراین این مورد را روی صفر می‌گذاریم چون عملاً کاربردی نخواهد داشت و دستور /info از این پس به معنای ویرایش آخرین رکورد است. اگر قبلاً هیچ رکوردی نداشته باشد چه می‌شود؟ در این صورت یک رکورد برای نخستین بار ایجاد می‌شود و از آن پس برای ویرایش استفاده می‌شود. این نکتهٔ اول.

نکتهٔ دوم این است که ممکن است پیش از آن‌که کاربر شروع به پر کردن این فرم کند بخواهید هشداری بدهید و بگویید این فرم را قبلاً پر کرده‌اید و اکنون الزامی نیست که بازگردید و ویرایش کنید؛ یا هر پیام دیگری که مد نظر است در ابتدا نمایش دهید. برای این کار می‌توان از آنچه آموخته‌ایم استفاده کرد. برای مثال ابتدا یک فیلد دریافت متن و یک فیلد انتقال به فیلد اضافه می‌کنیم و ترتیب آن‌ها را به ابتدای فرم می‌آوریم. پیامی که می‌خواهیم و اخطاری که می‌خواهیم نمایش داده شود را وارد می‌کنیم. حتی می‌توان از پلاگین‌ها نیز استفاده کرد. دو کلید می‌گذاریم: کلید اول برای ادامهٔ ویرایش و کلید دوم برای بازگشت.

در انتقال به فیلد می‌توان هر یک از فیلدها را به‌عنوان معیار قرار داد. برای مثال می‌خواهیم فیلد موبایل را بررسی کنیم؛ اگر فیلد موبایل خالی بود کاربر به فیلد name منتقل شود و اگر خالی نبود این خطا نمایش داده شود. روند کلی به این صورت شد که نخستین بار که کاربر وارد این فرم می‌شود این فیلد بررسی می‌کند. چون موبایل خالی است وارد فیلد name می‌شود و این فیلد را نمایش نمی‌دهد. اما اگر قبلاً موبایل را وارد کرده باشد این شرط محقق نمی‌شود و ادامهٔ فرم را پیش می‌برد که همان پیام خطای ماست. وقتی پیام خطا داده شد، اگر بله را انتخاب کند مقدار بله برای این فیلد ذخیره می‌شود و سپس نام از کاربر پرسیده می‌شود که در واقع این نام و این موبایل به‌جای نام و موبایل قبلی در رکوردها ذخیره می‌شود. اما اگر روی /start و در واقع کلید بازگشت کلیک کرده باشد، چون این دستور آدرس مستقیم دستور شروع ربات است، از این قسمت خارج می‌شود و وارد دستور شروع می‌شود و دیگر فرآیند ویرایش را ادامه نمی‌دهد. آزمایش می‌کنیم: اگر بازگشت را بزنیم به دستور اصلی بازمی‌گردد و اگر بله را بزنیم اطلاعات نام و شمارهٔ موبایل پرسیده می‌شود. اگر کاربری برای نخستین بار وارد شده باشد این سؤال از او پرسیده نمی‌شود و همان فیلد نام پرسیده می‌شود.

اتصال چند فرم به یک پایگاه داده 82:18

ممکن است بپرسید آیا می‌توان چند فرآیند فرم ایجاد کرد و همه را به یک پایگاه داده متصل کرد؟ پاسخ مثبت است. یعنی می‌توانید اگر اطلاعات کاربر را می‌گرفتید، اطلاعات تکمیلی را در فرآیندی دیگر از او دریافت کنید و به همان پایگاه داده‌ای که قبلاً انتخاب کرده بودید متصل کنید و طبیعتاً دستور دیگری نیز برای آن تعیین کنید. در این صورت هر فیلدی که اینجا اضافه می‌کنید، اگر جزء فیلدهایی باشد که قبلاً در فرم قبلی وجود داشت، آن را ویرایش می‌کند و اگر فیلد جدیدی بود به‌عنوان ادامهٔ همان فیلدهای قبلی در پایگاه داده ذخیره می‌شود. یعنی اگر وارد پایگاه داده شوید، در ادامهٔ همین ستون‌ها اطلاعات جدید ذخیره می‌شود. نکته این است که چون ستون‌ها را فقط از فرآیند فرم قبلی دریافت می‌کنید، برای این‌که ستون‌های جدید را نیز در بخش رکوردها ببینید باید نام آن‌ها را اینجا وارد کنید؛ یعنی نام فیلدهایی که آنجا اضافه کرده‌اید را باید در این قسمت اضافه کنید. برای مثال از کاربر آدرس پرسیده‌ایم، فیلد آدرس و فیلد کد پستی اضافه شده است. در این صورت وقتی وارد بخش رکوردها می‌شوید در انتها آدرس و کد پستی نیز نمایش داده می‌شود و در خروجی اکسل نیز می‌توانید آن را دریافت کنید. می‌توانید هر تعداد فرمی که می‌خواهید اضافه کنید و همه را به یک پایگاه داده متصل کنید و اطلاعات قبلی را بر اساس آن ویرایش کنید، اضافه کنید یا هر تغییری انجام دهید.

کلید انتقال داده کاربر به فیلد مشخص 85:06

بنابراین استفاده‌های مختلفی می‌توان داشت. ممکن است وقتی نخستین بار ثبت‌نام انجام می‌شود بخواهید اطلاعاتی از کاربر بگیرید اما فرم ویرایش متفاوتی برای او تعیین کنید تا مثلاً نتواند کد ملی را تغییر دهد، یا برخی اطلاعات جدید را به اطلاعاتی که قبلاً وارد کرده بود اضافه کند.

در جلسات قبل با کلیدهای انتقال به فرآیند آشنا شدیم. فرض کنید می‌خواهید کاربر وقتی روی کلید خاصی کلیک کرد به بخشی از این فرم هدایت شود. می‌خواهیم وقتی کاربر در منو یا دستور دیگری روی کلیدی کلیک کرد مقدار «معلم» به‌طور خودکار ذخیره شود و لازم نباشد دوباره سؤال پرسیده شود. برای این کار در منوی مورد نظر نوع کلیدِ انتقال به فرآیند را برای یک کلید انتخاب می‌کنیم، فرآیند فرم خود را انتخاب می‌کنیم، کاربر را به فیلد name منتقل می‌کنیم که در این صورت دیگر شغل از او پرسیده نمی‌شود و از آن عبور می‌کند، و نخستین سؤالی که پرسیده می‌شود نام کاربر خواهد بود. برای این‌که نام به‌صورت سؤالی پرسیده شود تیک را می‌زنیم و در این قسمت تعیین می‌کنیم مقدار شغل به‌عنوان معلم ذخیره شده باشد.

کاری که اکنون انجام می‌شود این است که وقتی روی کلید «ثبت‌نام معلمان» کلیک کردیم مقدار معلم برای شغل ذخیره می‌شود و کاربر وارد فیلد name می‌شود و نامش پرسیده می‌شود. می‌توان اطلاعات دیگری نیز در این قسمت اضافه کرد و هر تعداد فیلد را به‌طور خودکار مقداردهی کرد. امکان دیگری که وجود دارد این است که اگر تیک نمایش رکورد برای نخستین بار را نزنید، به‌جای پرسیدن سؤال مربوط به نام، هر مقداری که اکنون ارسال می‌شود به‌عنوان نام فرد ذخیره خواهد شد. یعنی وقتی مقدار «معلمان» با زدن این کلید به آن فرآیند ارسال می‌شود، مقدار «معلمان» به‌عنوان نام این کاربر ذخیره می‌شود که البته ما این را نمی‌خواهیم و می‌خواهیم نام از او پرسیده شود. پس این تیک را فعال می‌کنیم. نکتهٔ بعدی شناسهٔ رکورد است. شناسهٔ رکورد مشخص می‌کند آیا می‌خواهید رکورد خاصی را ویرایش کنید یا قرار است رکورد جدیدی اضافه شود. می‌توانید در این قسمت از پلاگین‌ها نیز استفاده کنید و شناسهٔ رکورد کاربر مورد نظر را وارد کنید؛ این‌ها بحث‌های پیشرفته‌تر است که احتمالاً در فرآیند پیشرفته به آن‌ها اشاره شود.

تنها نکتهٔ باقی‌مانده دربارهٔ بخش پایگاه‌های داده است. برای جستجو ابتدا باید عملگر مورد نظر را برای هر یک از بخش‌هایی که می‌خواهد جستجو شود انتخاب کنید. برای مثال اگر می‌خواهید زمان پایان هر یک معیار فیلتر باشد می‌توانید این تاریخ یا ساعت را در این قسمت وارد کنید؛ مثلاً زمان پایان بزرگ‌تر باشد از ساعت 00:00 اول مرداد ۱۴۰۵. ممیزها، دونقطه‌ها و موارد مشابه را خود سامانه می‌گذارد و کافی است فقط عددها را وارد کنید. برای مثال می‌خواهیم از اینجا به بعد نمایش داده شود. اگر جستجو را بزنیم مقدارهای پیش از این دیگر نمایش داده نمی‌شوند؛ فیلتر شده‌اند. اگر روی «هیچ‌کدام» بگذارید هر مقداری هم که در این بخش‌ها وارد کنید در جستجو دخیل نیست. از طرفی می‌توانید بر اساس پل‌های ارتباطی جستجو را محدود کنید. اگر می‌خواهید جزء این‌ها باشد یا نباشد و بقیهٔ پل‌های ارتباطی آورده شود، می‌توانید با این عملگر و انتخاب پل‌های ارتباطی مورد نظر این کار را انجام دهید. شناسه نیز همین‌طور است؛ برای مثال اگر می‌خواهید شناسهٔ مشخصی را پیدا کنید بر اساس کد رهگیری که به کاربر داده‌اید می‌توانید اینجا جستجو کنید. کاربری گفته کد رهگیری من این است و در اطلاعات ایراد وجود دارد؛ می‌توانید جستجو کنید و پیدا کنید. زمان شروع نیز مانند زمان پایان است. شناسهٔ کاربر را می‌توانید از بخش کاربران یا از این قسمت پیدا کنید و همهٔ مقدارهایی که این کاربر ارسال کرده را جستجو کنید (البته همهٔ رکوردهای فعلی بر اساس همین کاربر است).

جستجوی پیشرفته با عملگرهای شباهت (like)

یا برای مثال اگر می‌خواهید بر اساس نام یا هر یک از فیلدهایی که امکان جستجوی آن را فراهم کرده‌اید جستجو کنید (یعنی باید جزء فیلدهای قابل جستجو باشد)، باید باز هم عملگر مورد نظر را انتخاب کنید و مقدار را وارد کنید. اینجا عملگر like یعنی «مشابه بودن» را انتخاب می‌کنیم. با این عملگر در بخش پلاگین‌ها در dbentry آشنا شدید.

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

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

دریافت خروجی اکسل 93:42

وقتی «خروجی اکسل» را می‌زنید دقیقاً بر اساس همین فیلترهایی که انتخاب کرده‌اید و مقدارهایی که نمایش داده می‌شود این خروجی دریافت می‌شود. سپس می‌توانید بر اساس امکانات برنامهٔ اکسل با آن‌ها کار کنید و کارهای بیشتری انجام دهید؛ مانند ایجاد نمودار و امکانات دیگری که در خود اکسل وجود دارد.

حذف رکوردها 94:13

برای حذف رکوردها بر اساس فیلتر نیز دقت کنید؛ وقتی جستجو را می‌زنید هر چیزی که نمایش داد، اگر «حذف رکوردها» را بزنید دقیقاً همین مواردی که بر اساس فیلتر قرار است نمایش داده شوند همه از پایگاه داده حذف می‌شوند. می‌توانید به‌صورت دستی نیز برخی از آن‌ها را حذف کنید. کلید «حذف فیلترها» نیز هر تغییری که در این بخش داده‌اید را پاک می‌کند و همهٔ رکوردها را دوباره نمایش می‌دهد.

افزودن شروط به فیلدها 94:47

اتصال به گوگل‌شیت و پایگاه‌داده‌های متناظر

نکتهٔ آخر این‌که در بخش «نسخه‌های متناظر» فعلاً حالت گوگل‌شیت را داریم که آموزش آن به‌صورت مجزا به‌عنوان جلسه‌ای تکمیلی در سایت و بخش آموزش قرار می‌گیرد. ممکن است امکان نسخه‌های متناظر دیگری مانند پایگاه‌داده‌های شخصی یا APIهای مختلف نیز به‌تدریج به این بخش اضافه شود که آموزش آن‌ها نیز جداگانه قرار داده می‌شود.

به‌عنوان نمونه گوگل‌شیت را ایجاد می‌کنیم تا نگاهی کلی داشته باشید. اطلاعاتی که وارد می‌کنیم یکی «کلید اصلی» است که بسیار مهم است؛ چون بر اساس این کلید قرار است اطلاعات در گوگل‌شیت به‌روز شود. یعنی هر اطلاعاتی که در گوگل‌شیت دارید را می‌توانید با زمان‌بندی مشخص دریافت کنید و وارد پایگاه دادهٔ خود کنید، یا برعکس؛ هر تغییری که در پایگاه داده انجام می‌شود وارد گوگل‌شیت شود. اگر به‌روزرسانی را روی حالت «مداوم» بگذارید، هر لحظه هر تغییری در پایگاه داده بدهید همان لحظه در گوگل‌شیت نیز اعمال می‌شود. البته حالت برعکس وجود ندارد؛ اگر می‌خواهید اطلاعات از طریق گوگل‌شیت به‌روز شود و در پایگاه دادهٔ صهبات تغییر کند باید حتماً زمان‌بندی مشخصی برای آن تعیین کنید.

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

تنظیمات اتصال و همگام‌سازی اطلاعات

«کاربر پیش‌فرض» نیز اجباری است. در واقع وقتی قرار است دادهٔ جدیدی از گوگل‌شیت دریافت شود باید فرض بگیریم آن رکورد از طرف کدام کاربر ایجاد شده (یعنی اگر دستی وارد ربات می‌شد کدام کاربر این کار را می‌کرد)؛ پس باید یکی از کاربران خود را از فهرست انتخاب کنید.

«کلید اتصال» را باید از خود گوگل (Google API) دریافت کنید. «شناسهٔ فایل» گوگل‌شیت را نیز مانند همین مثال وارد می‌کنید. «نام شیت» نیز برای مثال Sheet1 یا Sheet2؛ اگر نام خاصی دارد وارد می‌کنید، البته اجباری نیست و اگر نگذارید نخستین شیت ملاک عمل قرار می‌گیرد. «ردیف آغاز» یعنی ممکن است ردیف اول اطلاعاتی دیگر یا عنوان ستون‌ها باشد که مربوط به جدول نیست؛ پس می‌توانید دقیقاً مشخص کنید اطلاعات در گوگل‌شیت از چه ردیفی شروع می‌شوند.

قسمت بسیار مهم این است که مشخص کنید ستون‌های A، B، C و موارد مشابه معادلشان در پایگاه دادهٔ صهبات چیست تا اطلاعات بر اساس آن‌ها به‌روز شوند. دقت کنید کلید اصلی که انتخاب کرده‌اید حتماً باید جزء ستون‌های «قابل جستجو» باشد، چون اگر قابل جستجو نباشد نمی‌توان آن‌ها را تشخیص داد و به‌روز کرد. در نهایت کلید «به‌روزرسانی رکوردها» را می‌زنید تا اطلاعات از گوگل‌شیت دریافت و وارد پایگاه داده شود.

توجه داشته باشید که هر ویرایشی از سمت صهبات یا از سمت گوگل‌شیت برای هر رکورد از ربات شما امتیاز کسر می‌کند. از طرفی نگهداری رکوردهای بیشتر نیز به‌صورت روزانه امتیازهای بیشتری کم می‌کند. نحوهٔ اتصال گوگل‌شیت به‌صورت ویدیویی یا مطلب وبلاگی در صفحهٔ آموزش قرار می‌گیرد.

جمع بندی 99:17

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