۱. قبل از شروع
در این آزمایشگاه کد، شما یاد خواهید گرفت که یک کلاینت جنگو (Django) برای ایجاد یک تجربه مکالمهای برای یک برنامه Dialogflow بسازید. به طور خاص، موارد زیر را انجام خواهید داد:
- کلاینت رابط کاربری Django را دانلود، تنظیم و اجرا کنید.
- نقطه پایانی Dialogflow detectIntent را طوری تنظیم کنید که از کلاینت frontend جنگو فراخوانی شود.
- برنامه را روی Google Cloud در App Engine مستقر کنید.
- بررسی کنید که آیا دعوتنامههای تقویم برای هر درخواست کاربر تنظیم میشوند یا خیر.
پیشنیازها
قبل از ادامه، باید codelab های زیر را تکمیل کنید:
- ساخت برنامه زمانبندی قرار ملاقات با Dialogflow
- آشنایی با موجودیتها در Dialogflow
- با ادغام Dialogflow با Calendar، تحقق اهداف را درک کنید
آنچه یاد خواهید گرفت
- نحوه تنظیم و اجرای یک کلاینت frontend جنگو برای Dialogflow
- نحوه استقرار کلاینت frontend جنگو در Google Cloud در App Engine
- نحوه تست یک برنامه Dialogflow از یک frontend سفارشی
آنچه خواهید ساخت
- شما یک کلاینت frontend جنگو را برای Dialogflow تنظیم و اجرا خواهید کرد.
- شما کلاینت frontend جنگو را روی Google Cloud روی App Engine مستقر خواهید کرد.
- شما یک برنامه Dialogflow را از آن رابط کاربری سفارشی آزمایش خواهید کرد.
آنچه نیاز دارید
- درک اولیه از پایتون
- درک اولیه از Dialogflow
۲. نمای کلی معماری
شما از تجربه مکالمه Appointment Scheduler که قبلاً ساختهاید استفاده خواهید کرد و یک frontend سفارشی برای برنامه ایجاد خواهید کرد. شما frontend را با Django خواهید ساخت، آن را به صورت محلی اجرا و آزمایش خواهید کرد و آن را در App Engine مستقر خواهید کرد.
کاربر از طریق frontend درخواست قرار ملاقات ارسال میکند که Dialogflow detectIntent API را برای تنظیم قرار ملاقات برای تاریخ و زمان درخواستی فراخوانی میکند. سپس Dialogflow درخواستی را به Calendar ارسال میکند تا قرار ملاقات مربوطه را تنظیم کند و از طریق Dialogflow تأییدیه را به کاربر بازگرداند.

نتیجه نهایی به این شکل خواهد بود:

۳. برنامه frontend را دانلود و اجرا کنید
- با تایپ این دستور در ترمینال محلی رایانه خود، مخزن را روی دستگاه محلی خود کلون کنید:
git clone https://github.com/priyankavergadia/Django-Dialogflow-Appointment-Scheduler.git
- به پوشهای که کد در آن قرار دارد بروید. همچنین میتوانید نمونه را به صورت زیپ دانلود کرده و آن را استخراج کنید.
cd Django-Dialogflow-Appointment-Scheduler
۴. محیط محلی خود را تنظیم کنید
هنگام استقرار، برنامه شما از Cloud SQL Proxy که در محیط استاندارد App Engine تعبیه شده است برای ارتباط با نمونه Cloud SQL شما استفاده میکند. با این حال، برای آزمایش برنامه خود به صورت محلی، باید یک کپی محلی از Cloud SQL Proxy را در محیط توسعه خود نصب و استفاده کنید. برای اطلاعات بیشتر، به «درباره Cloud SQL Proxy» مراجعه کنید.
برای انجام وظایف مدیریتی اولیه در نمونه Cloud SQL خود، میتوانید از Cloud SQL برای کلاینت MySQL استفاده کنید.
پروکسی Cloud SQL را نصب کنید
پروکسی Cloud SQL را دانلود و نصب کنید. پروکسی Cloud SQL برای اتصال به نمونه Cloud SQL شما هنگام اجرای محلی استفاده میشود.
پروکسی را دانلود کنید.
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
پروکسی را قابل اجرا کنید.
chmod +x cloud_sql_proxy
یک نمونه SQL ابری ایجاد کنید
- یک نمونه Cloud SQL برای MySQL نسل دوم ایجاد کنید. نام نمونه را "polls-instance" یا چیزی شبیه به آن بگذارید. آماده شدن نمونه ممکن است چند دقیقه طول بکشد. پس از آماده شدن، باید در لیست نمونهها قابل مشاهده باشد.
- از ابزار gcloud برای اجرای دستور زیر استفاده کنید که در آن
[YOUR_INSTANCE_NAME]نام نمونه شما را نشان میدهد. مقداری که برای نام اتصال نمونه نشان داده شده است را برای مرحله بعدی یادداشت کنید، که در قالب[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME].
gcloud sql instances describe [YOUR_INSTANCE_NAME]
روش دیگر این است که میتوانید روی نمونه کلیک کنید تا نام اتصال نمونه را ببینید.

نمونه Cloud SQL خود را مقداردهی اولیه کنید
پروکسی Cloud SQL را با استفاده از نام اتصال نمونه از مرحله قبل شروع کنید. [YOUR_INSTANCE_CONNECTION_NAME] را با مقداری که در مرحله قبل ثبت کردهاید جایگزین کنید. این کار یک اتصال از رایانه محلی شما به نمونه شما برای اهداف آزمایش محلی برقرار میکند. پروکسی Cloud SQL را در حین آزمایش برنامه خود به صورت محلی، در حال اجرا نگه دارید.
./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306
در مرحله بعد، یک کاربر و پایگاه داده جدید Cloud SQL ایجاد کنید.
- با استفاده از کنسول گوگل کلود، یک پایگاه داده جدید برای نمونه ابری SQL خود با نام polls-instance ایجاد کنید. برای مثال، میتوانید "polls" را به عنوان نام وارد کنید.

- با استفاده از کنسول ابری، یک حساب کاربری جدید برای نمونهی SQL ابری خود با نام polls-instance ایجاد کنید.

تنظیمات پایگاه داده را پیکربندی کنید
- برای ویرایش،
mysite/settings.pyرا باز کنید. - در دو جا،
[YOUR-USERNAME]و[YOUR-PASSWORD]را با نام کاربری و رمز عبور پایگاه داده که در بخش قبل ایجاد کردهاید، جایگزین کنید. این به تنظیم اتصال به پایگاه داده برای استقرار App Engine و آزمایش محلی کمک میکند. - در خطی که نوشته شده است:
'HOST': 'cloudsql/ [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]'، عبارت[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]را با مقداری که در بخش قبل ثبت کردهاید، جایگزین کنید. - دستور زیر را اجرا کنید و مقدار نام اتصال نمونه خروجی را برای مرحله بعدی کپی کنید.
gcloud sql instances describe [YOUR_INSTANCE_NAME]
- به جای
[YOUR-CONNECTION-NAME]مقداری را که در بخش قبل ثبت کردهاید، قرار دهید. - به جای
[YOUR-DATABASE]نامی را که در بخش قبلی انتخاب کردید، قرار دهید.
# [START db_setup]
if os.getenv('GAE_APPLICATION', None):
# Running on production App Engine, so connect to Google Cloud SQL using
# the unix socket at /cloudsql/<your-cloudsql-connection string>
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]',
'NAME': '[YOUR-DATABASE]',
}
}
else:
# Running locally so connect to either a local MySQL instance or connect to
# Cloud SQL via the proxy. To start the proxy via command line:
# $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
# See https://cloud.google.com/sql/docs/mysql-connect-proxy
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'NAME': '[YOUR-DATABASE]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]'
}
}
# [END db_setup]
-
settings.pyببندید و ذخیره کنید.
۵. تنظیم حساب کاربری سرویس
- در کنسول Dialogflow، کلیک کنید
در برگه عمومی کنار شناسه پروژه ، روی Google Cloud کلیک کنید.
. - روی منوی ناوبری ☰ > APIها و خدمات > اعتبارنامهها کلیک کنید.
- روی ایجاد اعتبارنامهها > حساب سرویس کلیک کنید.

- در جزئیات حساب سرویس ، عبارت "appointment-scheduler" را به عنوان نام حساب سرویس وارد کنید، سپس روی ایجاد کلیک کنید.

- جایی که نوشته شده «به این سرویس حساب دسترسی به پروژه بدهید» ، برای رد شدن از آن، روی «ادامه » کلیک کنید.
- جایی که نوشته شده «به کاربران اجازه دسترسی به این حساب سرویس را بدهید (اختیاری) ، روی «ایجاد کلید» > «JSON» > «ایجاد» کلیک کنید.
یک فایل JSON در رایانه شما دانلود خواهد شد که در بخشهای بعدی تنظیمات به آن نیاز خواهید داشت.

۶. نقطه پایانی Dialogflow detectIntent را طوری تنظیم کنید که از برنامه فراخوانی شود
- در پوشه چت، فایل JSON مربوط به اطلاعات احراز هویت خود را جایگزین
AppointmentScheduler.jsonکنید. - در فایل
views.pyدر پوشه چت، عبارتGOOGLE_PROJECT_ID = "<YOUR_PROJECT_ID>"را به شناسه پروژه خود تغییر دهید.
۷. ساخت و اجرای برنامه به صورت محلی
برای اجرای برنامه Django روی رایانه محلی خود، باید یک محیط توسعه پایتون، شامل پایتون، pip و virtualenv، راهاندازی کنید. برای دستورالعملها، به «راهاندازی محیط توسعه پایتون» مراجعه کنید.
- یک محیط پایتون ایزوله ایجاد کنید و وابستگیها را نصب کنید:
virtualenv env source env/bin/activate pip install -r requirements.txt
- برای تنظیم مدلهای خود، migrationهای جنگو را اجرا کنید.
python3 manage.py makemigrations python3 manage.py makemigrations polls python3 manage.py migrate
- یک وب سرور محلی راه اندازی کنید.
python3 manage.py runserver
- در مرورگر وب خود، آدرس http://localhost:8000/ را وارد کنید. شما باید یک صفحه وب ساده مانند تصویر زیر مشاهده کنید:

صفحات برنامه نمونه توسط وب سرور Django که روی رایانه شما اجرا میشود، ارائه میشوند. وقتی آماده ادامه کار شدید، Control+S (در مکینتاش Command+S ) را فشار دهید تا وب سرور محلی متوقف شود.
۸. برنامه را در محیط استاندارد App Engine مستقر کنید
دستور زیر را اجرا کنید تا تمام فایلهای استاتیک برنامه به پوشهای که توسط STATIC_ROOT در settings.py مشخص شده است، منتقل شوند:
python3 manage.py collectstatic
با اجرای دستور زیر در دایرکتوری برنامه که فایل app.yaml در آن قرار دارد، برنامه را آپلود کنید:
gcloud app deploy
منتظر پیامی باشید که به شما اطلاع میدهد بهروزرسانی تکمیل شده است.
۹. کلاینت frontend را آزمایش کنید
در مرورگر وب خود، آدرس https://<your_project_id>.appspot.com را وارد کنید.
این بار، درخواست شما توسط یک وب سرور که در محیط استاندارد App Engine اجرا میشود، ارائه میشود.
دستور app deploy برنامه را همانطور که در app.yaml توضیح داده شده است، مستقر میکند و نسخه تازه مستقر شده را به عنوان نسخه پیشفرض تنظیم میکند و باعث میشود که به تمام ترافیک جدید سرویس دهد.
۱۰. تولید
۱۱. وقتی آماده ارائه محتوای خود در محیط عملیاتی شدید، متغیر DEBUG را در mysite/settings.py به False تغییر دهید.
۱۲. چتبات خود را آزمایش کنید
به آدرس https://<your_project_id>.appspot.com بروید و موارد زیر را وارد کنید:
- کاربر: «برای ثبت نام خودرو، ساعت ۳ بعد از ظهر فردا وقت بگیرید.»
- ربات چت به صورت زیر پاسخ میدهد:

- تقویم، پاسخ را ثبت میکند.

۱۳. تمیز کردن
اگر قصد دارید سایر کدهای Dialogflow را تکمیل کنید، فعلاً از این بخش صرف نظر کنید و بعداً به آن برگردید.
عامل Dialogflow را حذف کنید
- کلیک
در کنار نماینده فعلی شما. 
- در برگه عمومی ، به پایین بروید و روی حذف این عامل کلیک کنید.
- در پنجرهای که ظاهر میشود، عبارت Delete را تایپ کرده و روی Delete کلیک کنید.
۱۴. تبریک
شما یک چتبات در Dialogflow ایجاد کردید و آن را با Calendar ادغام کردید. اکنون شما یک توسعهدهنده چتبات هستید!
بیشتر بدانید
برای مطالعه بیشتر به منابع زیر مراجعه کنید:
- ادغام رابط برنامهنویسی کاربردی Vision با Dialogflow
- نمونههای کد در صفحه گیتهاب Dialogflow