۱. مقدمه


آخرین بهروزرسانی: ۲۳-۰۸-۲۰۲۱
انتقال زنده کارشناس با پیامهای تجاری
قابلیت انتقال کارشناس زنده در پیامهای تجاری به کارشناس شما این امکان را میدهد که مکالمه را به عنوان یک ربات شروع کند و در اواسط مکالمه به یک کارشناس زنده (نماینده انسانی) تغییر وضعیت دهد. ربات شما میتواند به سوالات متداول، مانند ساعات کاری، پاسخ دهد، در حالی که کارشناس زنده شما میتواند یک تجربه سفارشی با دسترسی بیشتر به زمینه کاربر ارائه دهد. هنگامی که انتقال بین این دو تجربه یکپارچه باشد، کاربران به سرعت و با دقت به سوالات خود پاسخ میدهند و در نتیجه نرخ تعامل بازگشتی بالاتر و رضایت مشتری افزایش مییابد.
این آزمایشگاه کد به شما آموزش میدهد که چگونه از ویژگی انتقال زندهی عامل (ایجنت) به طور کامل استفاده کنید.
آنچه خواهید ساخت
در این آزمایشگاه کد، شما یک وبهوک برای عامل خود خواهید ساخت که میتواند رویدادهای انتقال عامل را به صورت زنده ارسال و دریافت کند. شما از یک رابط کاربری اولیه ارائه شده توسط کد اولیه برای آزمایش آنچه ساختهاید استفاده خواهید کرد.

آنچه یاد خواهید گرفت
- نحوه ذخیره و مدیریت وضعیت مکالمه.
- نحوه استفاده از پیامهای تجاری برای ارسال رویدادهای انتقال اپراتور به صورت زنده.
- نحوه تنظیم یک وبهوک و رابط کاربری اولیه برای پیوستن به مکالمات به عنوان یک عامل.
- بهترین شیوهها برای استفاده از API پیامهای تجاری.
این آزمایشگاه کد بر استفاده از API پیامهای تجاری برای پیادهسازی انتقال زندهی عامل تمرکز دارد. میتوانید کد اولیهی هر مرحله را بخوانید، اما فقط باید کد مربوط به پیامهای تجاری را پیادهسازی کنید.
آنچه نیاز دارید
- یک نماینده پیامهای تجاری، شامل کلید حساب سرویس شما. میتوانید با دنبال کردن راهنمای «ایجاد یک نماینده» ، یک نماینده ایجاد کنید.
- پیکربندی Cloud Datastore فعال که به پروژه GCP نماینده شما لینک شده است. میتوانید از راهنمای سریع Cloud Datastore برای راهاندازی آن استفاده کنید. نیازی به دانستن نحوه استفاده از Cloud Datastore ندارید.
- رایانهای که Google Cloud SDK و Node.js (نسخه ۱۰ یا بالاتر) روی آن نصب شده باشد.
- یک دستگاه اندروید (با نسخه ۵ یا بالاتر) یا یک دستگاه iOS برای آزمایش تجربه کاربری.
- تجربه برنامهنویسی وب. شما مقدار کمی کد جاوا اسکریپت خواهید نوشت و ممکن است نیاز به اشکالزدایی آنچه مینویسید داشته باشید.
۲. یک ربات اکو ایجاد کنید
در این مرحله، یک نماینده ربات پایه به نام "Echo bot" را مستقر خواهید کرد. این ربات پیامهای کاربر را دریافت میکند، آنها را در یک رشته مکالمه در Cloud Datastore ثبت میکند و سپس با پاسخ دادن با همان محتوا، پیام کاربر را "بازتاب" میدهد. هنگامی که یک ربات پایه و زیرساخت ثبت وقایع دارید، میتوانید در مراحل بعدی به آن اضافه کنید تا یک پیادهسازی کامل انتقال عامل زنده ایجاد کنید.
کد شروع را دریافت کنید
در یک ترمینال، کد آغازین Live Agent Transfer را با دستور زیر در دایرکتوری کاری پروژه خود کپی کنید:
git clone https://github.com/google-business-communications/bm-nodejs-live-agent-transfer
کد شروع را بفهمید
بیایید نگاهی به ساختار کد اولیهای که در طول آزمایشگاه کد با آن کار خواهید کرد، بیندازیم.
به پوشهی step-1 بروید و محتویات آن را مشاهده کنید. این پوشه شامل عناصر زیر است:
- bin : این دایرکتوری شامل اسکریپت آغازگر www است که سرور را راهاندازی و پیکربندی میکند.
- libs : این دایرکتوری شامل
datastore_util.jsاست که شامل متدهای راحتی برای خواندن و نوشتن از Cloud Datastore است. نیازی نیست که نحوه کار این فایل را بدانید. فقط به متدهای موجود و نحوه عملکرد آنها توجه کنید. - منابع : این شامل کلید حساب سرویس شما به صورت فایلی به نام
credentials.jsonاست. - routes : فایل
index.jsشامل webhook و تمام متدهای کمکی آن است. این فایل اصلی است که با آن کار خواهید کرد و به آن اضافه خواهید کرد. - views : این دایرکتوری شامل فایلهای قالب EJS برای عناصر رابط کاربری است. در مراحل بعدی فایلهای بیشتری در آن قرار خواهد گرفت.
- app.js، app.yaml، package.json : این فایلها برنامه و وابستگیهای آن را پیکربندی میکنند.
قبل از استقرار، کلید حساب سرویس GCP خود را دانلود کنید و فایل اعتبارنامههای JSON را در هر دایرکتوری منابع در کد نمونه کپی کنید. این کار را برای هر مرحله از codelab انجام دهید.
cp credentials.json bm-nodejs-live-agent-transfer/step-<step number>/resources/credentials.json
استقرار کد آغازین
در ترمینال، به دایرکتوری step-1 نمونه بروید. سپس، با تنظیم شناسه پروژهای که برای ثبت در APIها استفاده کردهاید، ابزار gcloud را برای استفاده از پروژه Google Cloud خود تنظیم کنید.
gcloud config set project <PROJECT_ID>
برای استقرار برنامه، دستور زیر را اجرا کنید:
gcloud app deploy
به آدرس URL برنامهی اجرا شده در خروجی آخرین دستور توجه کنید:
Deployed service [default] to [https://PROJECT_ID.appspot.com]
کد آغازینی که شما پیادهسازی کردید شامل یک برنامه وب با یک وبهوک برای دریافت پیامها از Business Messages است. برنامه پیامها را به کاربر بازمیگرداند و رشتههای پیام را در Cloud Datastore ثبت میکند.
نماینده خود را پیکربندی کنید
به صفحه تنظیمات حساب کاربری خود در کنسول توسعهدهندگان ارتباطات تجاری بروید و وبهوک خود را روی URL برنامهی مستقر شده خود تنظیم کنید. برای مثال، https://PROJECT_ID.appspot.com/callback/ .
سپس در صفحه اطلاعات عامل، نوع تعامل اولیه و ثانویه خود را به ترتیب روی ربات و انسان پیکربندی کنید.

گفتگو با ربات اکو
عامل خود را در کنسول توسعهدهندگان باز کنید. صفحه مرور کلی را مشاهده خواهید کرد که به شما امکان میدهد جزئیات عامل خود را بررسی کنید. URL تست عامل را که با دستگاه تست تلفن همراه شما مطابقت دارد، کپی کنید. از این URL در دستگاه تلفن همراه خود برای راهاندازی سطح مکالمه عامل خود استفاده کنید.

با ارسال چند پیام با اپراتور تعامل کنید. سطح مکالمه فقط آنچه را که شما میگویید کپی میکند - تجربه کاربری خیلی مفیدی نیست. کاش راهی برای صحبت با یک شخص واقعی وجود داشت!
۳. پیوستن به گفتگو
حالا بیایید از دیدگاه نماینده زنده خود به مکالمه نگاه کنیم. به عنوان یک نماینده زنده، قبل از پیوستن به مکالمه، باید نکاتی را در مورد آن بدانید، مانند شناسه مکالمه. همچنین مفید است بدانید که آیا کاربر درخواست صحبت با یک نماینده زنده را داده است یا خیر. در این مرحله، از یک صفحه CRM (مدیریت ارتباط با مشتری) پایه برای مشاهده این اطلاعات و پیوستن به مکالمه به عنوان یک نماینده زنده استفاده خواهید کرد.
کد آغازین این مرحله یک CRM پایه اضافه میکند که تمام مکالمات جاری مربوط به اپراتور را فهرست میکند. بیایید نگاهی به آن CRM بیندازیم تا ببینیم چه مکالماتی ممکن است نیاز به توجه یک اپراتور فعال داشته باشند.
به دایرکتوری step-2 بروید و برنامه را دوباره مانند مرحله قبل مستقر کنید.
وقتی برنامه را اجرا میکنید، یک URL هدف مشاهده میکنید. برای مشاهده فهرستی از رشته مکالمهای که در مرحله قبل شروع کردهاید، به این URL در مرورگر بروید. وضعیت مکالمه در حال حاضر "مدیریتشده توسط ربات" است زیرا ربات echo به عنوان نماینده عامل ما در این مکالمه عمل میکند.

دکمهی «عضویت در چت» ظاهر میشود اما هنوز کاری انجام نمیدهد. همچنین از روی این رابط نمیتوانید تشخیص دهید که آیا کاربر میخواهد با یک نمایندهی زنده صحبت کند یا خیر.
پیامهای تجاری یک رویداد درخواستشده توسط یک عامل زنده ارائه میدهد که نشان میدهد چه زمانی کاربر میخواهد با یک عامل زنده صحبت کند. برای فهرست کردن آن در رابط کاربری، باید آن وضعیت را پیگیری کنید.
به متد callback در index.js نگاهی بیندازید. یک کامنت TODO نشان میدهد که کجا باید درخواست کاربر برای یک عامل زنده را دریافت کرده و وضعیت نخ را بهروزرسانی کنید.
مرحله ۲/مسیرها/index.js
/**
* The webhook callback method.
*/
router.post('/callback', async function(req, res, next) {
...
} else if (requestBody.userStatus !== undefined) {
if (requestBody.userStatus.requestedLiveAgent !== undefined) {
...
// TODO: Update the thread state to QUEUED_THREAD_STATE.
}
}
});
...
});
شما باید از متدهای موجود در libs/datastore_utils.js برای بارگذاری رشته مکالمه فعلی و بهروزرسانی وضعیت آن به QUEUED_THREAD_STATE استفاده کنید.
اگر مطمئن نیستید چه کاری باید انجام دهید، نگاهی به راهحلها بیندازید. کد اولیه شامل یک دایرکتوری solutions در زیر هر مرحله است که در آن باید مقداری کد را تکمیل کنید. این دایرکتوریها حاوی یک کپی از کل برنامه با پیادهسازی کامل برای مرحله داده شده هستند.
پس از تکمیل پیادهسازی و استقرار مجدد برنامه، از منوی بالای صفحه در مکالمه دستگاه همراه خود برای درخواست یک نماینده فعال استفاده کنید.

حالا اگر به CRM برگردید، باید در مکالمه خود یادداشتی با این مضمون ببینید: «درخواست کمک از کارشناس زنده». این کاربر به کمک یک انسان نیاز دارد! برای اینکه دکمه کار کند، باید نقطه پایانی joinConversation را پیادهسازی کنید.
کامنت TODO دیگر را در متد stubbed برای /joinConversation پیدا کنید.
مرحله ۲/مسیرها/index.js
/**
* Updates the thread state and sends a representative join signal to the user.
*/
router.post('/joinConversation', async function(req, res, next) {
let conversationId = req.body.conversationId;
// TODO: Update the thread state to LIVE_AGENT_THREAD_STATE and post a REPRESENTATIVE_JOINED event.
res.json({
'result': 'ok',
});
});
شما باید دوباره وضعیت نخ را بهروزرسانی کنید، این بار به LIVE_AGENT_THREAD_STATE . علاوه بر این، باید از متد conversations.events.create در API پیامهای تجاری برای ارسال یک رویداد REPRESENTATIVE_JOINED استفاده کنید.
برای ایجاد بار درخواست، باید فیلدهای مشخص شده در جدول زیر را تنظیم کنید:
نام فیلد | نکته |
| این را روی 'conversations/{conversationId}' تنظیم کنید. |
| شناسه تصادفی خودتان را برای رویداد ایجاد کنید. |
| از متد |
| این خودِ بدنهی رویداد است. شما باید نوع رویداد (eventType) و نمایندهی آن (representative) را تنظیم کنید. |
برای راهنمایی، به صفحه مرجع متد create یا صفحه مرجع رویدادها نگاهی بیندازید.
وقتی پیادهسازی شما تمام شد، برنامه را دوباره راهاندازی کنید و روی دکمهی «پیوستن به چت» کلیک کنید. یک کادر محاورهای «پیوسته » ظاهر میشود و وضعیت چت به «چت زنده» تغییر میکند. اگر به مکالمه در دستگاه تلفن همراه خود نگاه کنید، یادداشتی در چت خواهید دید که میگوید نمایندهی زندهی شما به آن پیوسته است.
تبریک میگوییم! در مرحله بعدی، به نحوه برقراری ارتباط مستقیم با کاربر توسط نماینده آنلاین شما خواهیم پرداخت.
۴. پیامرسانی به عنوان یک عامل زنده
حالا که به مکالمه پیوستهاید، وقت آن رسیده که به عنوان نمایندهی زنده پیام ارسال کنید.
به پوشه step-3 بروید و برنامه را مجدداً مستقر کنید. در CRM، روی رشته گفتگوی خود از مرحله قبل کلیک کنید. اکنون باید یک رابط چت ساده را ببینید. از اینجا، میتوانید پیامهای کاربر را به صورت بلادرنگ مشاهده کنید.

با این حال، ارسال پیام به عنوان عامل هنوز پیادهسازی نشده است. شما باید آن را در این مرحله تکمیل کنید.
فایل routes/index.js را باز کنید و به سه نقطه پایانی تازه اضافه شده نگاه کنید:
-
/messages: فایل نمایmessages.ejsرا دریافت کرده و آن را در مرورگر رندر میکند. وقتی روی یک رشته مکالمه از فهرست کلیک میکنید، به یکی از این صفحات هدایت میشوید. -
/retrieveMessages: محتوای پیام یک رشته را دریافت میکند و فهرستی قالببندیشده از تمام پیامهای موجود در مکالمه را برمیگرداند. صفحه پیامها بهطور دورهای این نقطه پایانی را برای نمایش آخرین پیامها فراخوانی میکند. -
/sendMessage: پیامی را از نمایندهی عامل زنده به کاربر ارسال میکند. صفحهی پیامها وقتی روی ارسال کلیک میکنید، این را فراخوانی میکند. در حال حاضر پیادهسازی نشده است.
حالا، نگاهی به متد storeAndSendResponse موجود بیندازید:
مرحله ۳/مسیرها/index.js
/**
* Updates the thread, adds a new message and sends a response to the user.
*
* @param {string} message The message content that was received.
* @param {string} conversationId The unique id for this user and agent.
* @param {string} threadState Represents who is managing the conversation for the CRM.
* @param {string} representativeType The representative sending the message, BOT or HUMAN.
*/
async function storeAndSendResponse(message, conversationId, threadState, representativeType) {
...
}
وبهوک از قبل از این روش برای ارسال پاسخ از ربات اکو استفاده میکند. این روش ابتدا دادههای پیام ورودی را در شیء Cloud Datastore برای مکالمه ذخیره میکند. سپس، پیام پاسخ را ارسال میکند. نگاهی دقیق به شیء پیامی که ایجاد میکند، به ویژه در نوع نماینده، بیندازید.
حالا، خودتان نقطه پایانی /sendMessage را پیادهسازی کنید. میتوانید از متد storeAndSendResponse موجود در اینجا برای انجام بیشتر کارها استفاده کنید. نکته مهم این است که به یاد داشته باشید نماینده صحیح را تنظیم کنید.
وقتی این کار را انجام دادید، برنامه را دوباره راهاندازی کنید و به مکالمه خود در CRM برگردید. اکنون میتوانید پیامهای خود را در تاریخچه چت مشاهده کنید. همچنین میتوانید پیامهای نماینده خود را در دستگاه آزمایشی موبایل خود مشاهده کنید.

قبل از ادامه، مطمئن شوید که نحوه کار نقاط پایانی جدید را درک کردهاید. در مرحله بعدی، نقطه پایانی خود را برای خروج از مکالمه اضافه خواهید کرد.
۵. ترک مکالمه
بعد از اینکه به کاربر در پاسخ به سوالاتش کمک کردید، میتوانید مکالمه را ترک کنید و اجازه دهید کاربر دوباره با ربات صحبت کند. در پیامهای تجاری، این تغییر با رویداد REPRESENTATIVE_LEFT اعلام میشود.
به پوشه step-4 بروید، برنامه را مجدداً مستقر کنید و به رشته مکالمه خود بازگردید. اکنون پیوند «بستن و ترک مکالمه» در انتهای رشته وجود دارد. این پیوند هنوز کار نمیکند زیرا نقطه پایانی leaveConversation پیادهسازی نشده است.

به فایل index.js نگاه کنید. یک کامنت TODO وجود دارد که به شما دستور میدهد یک نقطه پایانی leaveConversation جدید ایجاد کنید.
مرحله ۴/مسیرها/index.js
/*
* TODO: Create a '/leaveConversation' endpoint that does the following:
* - Updates the thread to BOT_THREAD_STATE.
* - Sends a REPRESENTATIVE_LEFT event.
* - Sends a message to the thread informing the user that they are speaking to the echo bot again.
*
* Hint: You can use the same methods that '/joinConversation' uses.
*/
برای پیادهسازی این، باید هر آنچه را که تاکنون از آزمایشگاه کد آموختهاید، کنار هم قرار دهید. این نقطه پایانی باید موارد زیر را انجام دهد:
- رشته را به
BOT_THREAD_STATEبهروزرسانی کنید. - یک رویداد
REPRESENTATIVE_LEFTارسال کنید. - در مکالمه پیامی ارسال کنید تا به کاربر بگویید که با ربات echo صحبت میکند. از متد
storeAndSendResponseاستفاده کنید. به یاد داشته باشید که نماینده بهBOTبرگشته است.
مرحله آخر، وضعیت مکالمه را برای کاربر روشن میکند. کاربر وقتی نمایندهای چت را ترک میکند، رویدادی را میبیند، اما لزوماً متوجه نمیشود که دوباره با ربات اکو صحبت میکند. با ارسال پیام مستقیم از ربات، سردرگمی کاربر را کاهش داده و تجربه را بهبود میبخشید.
حالا که ربات کارها را انجام میدهد، کارشناس آنلاین شما میتواند به مکالمه دیگری بپیوندد. هر چقدر که دوست دارید با کد نمونه و CRM بازی کنید. ایدههای مختلفی را که برای تجربه انتقال کارشناس آنلاین کسب و کارتان دارید، امتحان کنید و ببینید به چه نتیجهای میرسید.
۶. جمعبندی
تبریک میگویم که آزمایشگاه کد انتقال مامور زنده را به پایان رساندید!
شما یک عامل ایجاد کردهاید که میتواند انتقالهای عامل را از ابتدا تا انتها به صورت زنده مدیریت کند. همچنین یک راه برای پیگیری وضعیت مکالمه با Cloud Datastore یاد گرفتهاید.
با انتقال کارشناس آنلاین، میتوانید درخواستهای رایج را به ربات خود بسپارید، در حالی که کارشناسان آنلاین شما به سوالات پیچیدهتر رسیدگی میکنند. کاربران شما از تجربه جدید سفارشی و مفید رضایت بیشتری خواهند داشت و احتمال بازگشت و توصیه کسب و کار شما به دوستانشان افزایش مییابد.
بعدش چی؟
به برخی از این آزمایشگاههای کد نگاهی بیندازید:
مطالعه بیشتر
- اصول اولیه انتقال کارشناس حضوری را با راهنمای «انتقال از ربات به کارشناس حضوری» مرور کنید.
- با استفاده از راهنمای Dialogflow، ربات اکو خود را به یک ربات سوالات متداول ارتقا دهید.