خرید آنلاین پیکاپ در فروشگاه: Bonjour Meal - Part 1 - Getting

1. مقدمه

637766505206e0a1.pngc604dca3ca211399.png

آخرین به روز رسانی: 2022-05-11

به پیام های تجاری خوش آمدید!

این کد لبه مقدمه‌ای برای ادغام با پیام‌های تجاری است که به مشتریان امکان می‌دهد از طریق جستجوی Google و Maps با کسب‌وکارهایی که مدیریت می‌کنید ارتباط برقرار کنند. ممکن است کسب‌وکاری باشید که می‌خواهید مستقیماً با Business Messages ادغام شود، یا شاید در یک فروشنده نرم‌افزار مستقل کار می‌کنید که راه‌حل‌های پیام‌رسانی را برای کسب‌وکارهایی که با آن‌ها کار می‌کنید ایجاد می‌کند، یا شاید به‌تازگی به پیام‌های تجاری برخورد کرده‌اید و می‌خواهید در مورد آن کار کنید. پلت فرم

صرف نظر از اینکه چه چیزی شما را به اینجا رسانده است، این نرم افزار کد یک راه فوق العاده برای شروع است. در پایان آن، شما اولین نماینده دیجیتال خود را خواهید داشت که کاربران می توانند با آن تعامل داشته باشند. هنگامی که بعد از کمی صیقل دادن بیشتر آماده راه اندازی در Business Messages هستید، پتانسیل دسترسی به میلیون ها مشتری را خواهید داشت.

چه چیزی یک عامل دیجیتال خوب را می سازد؟

Business Messages یک سطح مکالمه است که تجربه ای شبیه به برنامه را در دستگاه های تلفن همراه ارائه می دهد که به مصرف کنندگان اجازه می دهد بدون نصب برنامه اضافی با مشاغل ارتباط برقرار کنند. عامل دیجیتال منطقی است که مشتریان شما با آن تعامل دارند. منطق توسط یک برنامه وب مستقر در ابر یا در زیرساخت شما مدیریت می شود. این کاملاً به شما بستگی دارد که چگونه به کاربر پاسخ می دهید. بهترین نمایندگی ها زمینه ای را برای تعیین انتظارات فراهم می کنند، مشتریان خود را درگیر نگه می دارند و عملکردی را برای پشتیبانی از نیازهای کاربران ارائه می دهند.

چیزی که خواهی ساخت

در این کد لبه، شما قصد دارید یک نماینده دیجیتال در Business Messages برای یک شرکت ساختگی به نام Bonjour Meal بسازید. این نماینده دیجیتال به چند سوال ساده مانند "ساعت چند تعطیل می کنی؟" پاسخ می دهد. یا "آیا می توانم آنلاین خرید کنم؟"

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

در این لبه کد، برنامه شما این کار را انجام می دهد

  • از طریق یک تراشه پیشنهادی به سوالات پاسخ دهید
  • کاربر را راهنمایی کنید تا سؤالاتی بپرسد که نماینده دیجیتال شما می تواند به آنها پاسخ دهد
  • ویژگی های گفتگوی غنی را برای درگیر نگه داشتن کاربر در مکالمه ارائه دهید

883b5a7f9f266276.png

چیزی که یاد خواهید گرفت

  • نحوه استقرار یک برنامه وب در App Engine در Google Cloud Platform. از طرف دیگر، می توانید از ngrok برای آزمایش عمومی برنامه محلی خود استفاده کنید.
  • نحوه پیکربندی حساب Business Messages خود با یک برنامه وب برای دریافت پیام از کاربران
  • نحوه ارسال ویژگی‌های غنی مانند کارت‌ها، چرخ فلک‌ها و پیشنهادهای مکالمه با Business Messages API
  • چگونه Business Messages پیام های شما را ارسال می کند

این Codelab بر روی ساخت اولین عامل دیجیتال شما متمرکز شده است.

آنچه شما نیاز دارید

  • برای یک حساب توسعه دهنده رایگان Business Communications ثبت نام کنید
  • برای دستورالعمل‌های نحوه انجام ، سایت توسعه‌دهنده ما را بررسی کنید
  • یک دستگاه Android با نسخه 5 یا بالاتر یا یک دستگاه iOS با برنامه Google Maps
  • تجربه برنامه نویسی وب اپلیکیشن
  • اتصال به اینترنت!

2. راه اندازی

API ها را فعال کنید

برای این کد لبه، از آنجایی که ما با یک برنامه جنگو کار خواهیم کرد، برای استقرار برنامه در App Engine به Cloud Build API تکیه خواهیم کرد. از طرف دیگر، اگر از ngrok استفاده می کنید، نیازی به فعال کردن Cloud Build API نیست.

برای فعال کردن Cloud Build API:

  1. Cloud Build API را در Google Cloud Console باز کنید.
  2. روی Enable کلیک کنید.

یک حساب کاربری ایجاد کنید

برای دسترسی به API های Business Communications و Business Messages باید یک حساب سرویس ایجاد کنید. مراحل موجود در مستندات را دنبال کنید تا یک حساب سرویس در کنسول توسعه‌دهنده Business Communications ایجاد کنید .

کد شروع Django Python EchoBot را اجرا کنید

در یک ترمینال، نمونه ربات Django Echo را با دستور زیر در فهرست کاری پروژه خود کلون کنید:

$ git clone https://github.com/google-business-communications/bm-bonjour-meal-django-starter-code

فایل اعتبار JSON خود را که برای حساب سرویس ایجاد شده است در پوشه منابع نمونه کپی کنید و نام اعتبارنامه را به "bm-agent-service-account-credentials.json" تغییر دهید.

bm-bonjour-meal-django-starter-code/bonjourmeal-codelab/step-1/resources/bm-agent-service-account-credentials.json

در یک ترمینال، به دایرکتوری مرحله 1 نمونه بروید.

برای استقرار نمونه دستورات زیر را در ترمینال اجرا کنید:

$ gcloud config set project PROJECT_ID*
$ gcloud app create
$ gcloud app deploy
  • PROJECT_ID شناسه پروژه پروژه ای است که برای ثبت نام با API ها استفاده کرده اید.

به URL برنامه کاربردی در خروجی آخرین دستور توجه کنید:

Deployed service [default] to [https://PROJECT_ID.appspot.com]

کد شروعی که به تازگی نصب کردید حاوی یک برنامه وب با یک هوک برای دریافت پیام‌ها از Business Messages است. این برنامه پیام ها را به کاربر بازتاب می دهد و می تواند برخی از ویژگی های غنی موجود در سطح مکالمه را به نمایش بگذارد.

کتاب وب خود را پیکربندی کنید

اکنون که سرویس شما مستقر شده است، از URL برنامه برای تنظیم URL webhook خود در صفحه تنظیمات حساب در Business Communications Developer Console استفاده خواهید کرد.

URL webhook آدرس برنامه + "/callback/" خواهد بود. به عنوان مثال، ممکن است چیزی شبیه به این باشد: https://PROJECT_ID.appspot.com/callback/

به صفحه تنظیمات حساب کنسول Business Communications Console بروید. در گوشه سمت راست بالای نوار ناوبری، باید نام پروژه GCP خود را ببینید. اگر یک کشویی مشاهده کردید، حتما پروژه GCP خود را انتخاب کنید.

نقطه فنی جزئیات تماس را پر کنید و سپس Webhook را با URL webhook برای برنامه کاربردی خود به روز کنید.

ceb66c905ded40be.png

روی ذخیره در کنار مرجع پروژه GCP خود کلیک کنید.

3. ایجاد اولین نماینده خود

با استفاده از کنسول توسعه دهنده ارتباطات تجاری

در کنسول Business Communications، روی نشان‌واره در بالا سمت چپ کلیک کنید تا به داشبورد کنسول بازگردید، سپس روی ایجاد عامل کلیک کنید. شما در همان زمان که نماینده خود را ایجاد می کنید، یک برند ایجاد می کنید. Business Messages را برای نوع نماینده انتخاب کنید و مطمئن شوید که اطلاعات شریک صحیح است.

در نام تجاری ، نام برندی را که ایجاد می‌کنید تایپ کنید. نام تجاری کسب‌وکاری است که با آن کار می‌کنید و مصرف‌کنندگان می‌توانند به صورت مکالمه با نماینده تعامل داشته باشند. در نام نماینده ، آنچه را که می‌خواهید کاربران در مکالمه پیام‌های تجاری ببینند، مشخص کنید. در مورد غذای ساختگی Bonjour Meal، Bonjour Rail شرکت راه آهنی است که رستوران های Bonjour Meal را مدیریت می کند. بنابراین من Bonjour Rail را به عنوان مارک و Bonjour Meal را به عنوان نماینده مشخص می کنم.

عامل موجودیت مکالمه ای است که نشان دهنده برند است.

88a9798e6546eb4e.png

روی Create agent کلیک کنید و به کنسول اجازه دهید تا جادو کند. این درخواست چند ثانیه طول می کشد تا چندین درخواست به Business Communications API برای ایجاد نام تجاری و عامل ایجاد کند. می‌توانید از Business Communications API مستقیماً برای ایجاد یک نماینده و ایجاد یک نام تجاری استفاده کنید. اسناد را بررسی کنید تا ببینید یک درخواست curl برای انجام همان کارهایی که کنسول انجام می دهد چگونه به نظر می رسد.

اولین مکالمه خود را دارید

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

f6bd8ded561db36f.png

با کلیک بر روی هر یک از تراشه ها می توانید URL تست را کپی کنید. البته URL آزمایشی دستگاهی را که برای تست در دسترس دارید کپی کنید. این پیام کپی شده را به هر طریقی که می خواهید به دستگاه خود ارسال کنید.

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

برای فراخوانی سطح مکالمه نماینده خود، روی راه اندازی ضربه بزنید.

2bf9f282e09062de.png

با نماینده تعامل داشته باشید و در مورد توانایی آن احساس کنید. در بیشتر موارد، باید متوجه شوید که سطح مکالمه فقط پیام های شما را بازتاب می دهد. چیزی مانند "سلام، جهان!" و خواهید دید که نماینده همان پیام را برای شما ارسال خواهد کرد.

برنامه مستقر شده همچنین دارای منطقی برای نمایش ویژگی های غنی موجود در Business Messages است.

  • اگر "کارت" ارسال کنید، یک کارت غنی را فراخوانی می کنید
  • اگر «تراشه‌ها» را ارسال کنید، تراشه‌های پیشنهادی را فراخوانی می‌کنید
  • اگر «چرخ فلک» را بفرستید، چرخ فلک کارت‌های غنی را فراخوانی می‌کنید

تبریک می گویم! این گفتگوی افتتاحیه نماینده شما با شماست!

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

به روز رسانی پیام خوش آمد گویی و استفاده از تراشه های مکالمه

بیایید کمی با Developer Console تمرین کنیم، ببینیم چگونه پیام خوش آمد گویی نماینده را ویرایش کنیم و از تراشه‌های پیشنهادی برای کمک به کاربر در برقراری ارتباط استفاده کنیم.

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

4323f988216fa054.png

پیام خوشامدگویی (فیلد زرد ورودی) را برای خواندن به روز کنید:

به نمایندگی پیش غذا Bonjour Meal خوش آمدید. من می توانم پیام های شما را تکرار کنم و برخی از ویژگی های غنی پشتیبانی شده در پلتفرم را به شما نشان دهم، این پیشنهادها را امتحان کنید!

روی + افزودن شروع مکالمه همانطور که در کادر بنفش در تصویر بالا اشاره شده است کلیک کنید تا شروع کننده مکالمه را برای فراخوانی تراشه های پیشنهاد، چرخ فلک و کارت اضافه کنید. شروع کننده مکالمه ای که اضافه می کنید به یک جزء متنی و یک جزء postbackData نیاز دارد. متن چیزی است که به کاربر نمایش داده می شود در حالی که داده های postBack همان چیزی است که به وب هوک نماینده شما ارسال می شود. وب هوک داده‌های پس‌بازگشت را تجزیه می‌کند و پاسخ مناسب را برای کاربر ارسال می‌کند. 906bc74668a1b215.png

اطلاعات Agent در کنسول پس از اصلاح به این شکل است:

8e96b0a10edd20af.png

در سمت راست کنسول، پیش نمایشی از ظاهر نماینده را مشاهده می کنید. توجه داشته باشید که چگونه پیام خوش آمد گویی آنچه را که به تازگی آن را تغییر داده اید و تراشه های پیشنهادی زیر آن را نشان می دهد؟

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

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

در همین حال، بیایید نگاهی به نحوه عملکرد همه چیز در زیر کاپوت بیندازیم.

4. تجزیه و تحلیل کد شروع

نمای 10000 فوتی از کد منبع

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

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

در سطح بالایی، جنگو URL ها را به نماها هدایت می کند، و منطق view قالبی را تولید می کند که در مرورگر رندر می شود. بیایید نگاهی به urls.py پروژه بیندازیم.

bm-django-echo-bot/bmcodelab/urls.py [خطوط 31-37]

from django.urls import include, path
import bopis.views as bopis_views

urlpatterns = [
    path('', bopis_views.landing_placeholder),
    path('callback/', bopis_views.callback),
]

دو مسیر در اینجا تعریف شده است، و بنابراین جنگو می تواند منطق را اجرا کند اگر آن دو URL شناسایی شوند. با توجه به اینکه آدرس پروژه https://PROJECT_ID.appspot.com/ است، مسیرهایی که پروژه از آنها آگاه است عبارتند از:

  • https://PROJECT_ID.appspot.com/
  • https://PROJECT_ID.appspot.com/callback/

هر دو مسیر URL به bopis_views اشاره دارد که از bopis/views.py است. بیایید نگاهی بیندازیم به آنچه در این فایل می گذرد. برای شروع، اجازه دهید ابتدا bopis_views.landing_placeholder درک کنیم.

bm-django-echo-bot/bonjourmeal-codelab/step-1/bopis/views.py [خطوط 302-309]

... 
def landing_placeholder(request):
    return HttpResponse("<h1>Welcome to the Bonjour Meal Codelab</h1>
    <br/><br/>
    To message your Bonjour Meal agent, go to the Developer Console and retrieve
    the Test URLs for the agent you have created as described in the codelab
    <a href='https://codelabs.developers.google.com/codelabs/'>here</a>.")
...

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

URL دیگر به تابعی به نام callback ، همچنین در bopis/views.py هدایت می‌شود. بنابراین اجازه دهید نگاهی به آن تابع داشته باشیم.

bm-django-echo-bot/bopis/views.py [خطوط 60-101]

...
def callback(request):
    """
    Callback URL. Processes messages sent from user.
    """
    if request.method == "POST":
        request_data = request.body.decode('utf8').replace("'", '"')
        request_body = json.loads(request_data)

        print('request_body: %s', request_body)

        # Extract the conversation id and message text
        conversation_id = request_body.get('conversationId')
        print('conversation_id: %s', conversation_id)

        # Check that the message and text body exist

        if 'message' in request_body and 'text' in request_body['message']:
            message = request_body['message']['text']

            print('message: %s', message)
            route_message(message, conversation_id)
        elif 'suggestionResponse' in request_body:
            message = request_body['suggestionResponse']['postbackData']

            print('message: %s', message)
            route_message(message, conversation_id)
        elif 'userStatus' in request_body:
            if 'isTyping' in request_body['userStatus']:
                print('User is typing')
            elif 'requestedLiveAgent' in request_body['userStatus']:
                print('User requested transfer to live agent')

        return HttpResponse("Response.")

    elif request.method == "GET":
        return HttpResponse("This webhook expects a POST request.")
...

منطق در اینجا بدنه درخواست را برای یک پیام یا یک پیشنهاد Response تجزیه می کند و آن اطلاعات را به تابعی به نام route_message منتقل می کند، سپس یک HttpResponse را به زیرساخت Business Messages برمی گرداند تا دریافت پیام را تأیید کند.

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

b10113f9d037e6a5.png

Business Messages محتویات پیام را به‌عنوان یک بار JSON به وب‌هوک شما می‌فرستد، جایی که به یک عامل زنده یا منطقی برای پاسخ به عنوان یک ربات هدایت می‌شود. مکانیسم مسیریابی، در مورد ما در اینجا، route_message است. بیایید نگاهی بیندازیم.

bm-django-echo-bot/bopis/views.py [خطوط 105-122]

...
def route_message(message, conversation_id):
    '''
    Routes the message received from the user to create a response.

    Args:
        message (str): The message text received from the user.
        conversation_id (str): The unique id for this user and agent.
    '''
    normalized_message = message.lower()

    if normalized_message == CMD_RICH_CARD:
        send_rich_card(conversation_id)
    elif normalized_message == CMD_CAROUSEL_CARD:
        send_carousel(conversation_id)
    elif normalized_message == CMD_SUGGESTIONS:
        send_message_with_suggestions(conversation_id)
    else:
        echo_message(message, conversation_id)
...

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

bm-django-echo-bot/bopis/views.py [خطوط 40-42]

...
# Set of commands the bot understands
CMD_RICH_CARD = 'card'
CMD_CAROUSEL_CARD = 'carousel'
CMD_SUGGESTIONS = 'chips'
...

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

ارسال پیام

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

اما چگونه برنامه با استفاده از Business Messages یک پیام خروجی برای کاربر ارسال می کند؟

a9475b1da93a83e8.png

وقتی زیرساخت شما به کاربر پاسخ می دهد، پاسخ را به Business Messages API ارسال می کنید که پیام را به کاربر تحویل می دهد.

Business Messages API دارای کتابخانه هایی در Python، Node.js و Java است. ما همچنین یک REST API داریم که اگر زیرساخت شما به زبانی نیست که ما کتابخانه ای برای آن داریم، می توانید مستقیماً درخواست دهید. برای مشاهده نحوه استفاده از cURL برای ارسال پیام به یک شناسه مکالمه خاص، به ارسال پیام نگاهی بیندازید.

برای هدف این نرم افزار، ما بر روی استفاده از کتابخانه مشتری پایتون تمرکز خواهیم کرد که قبلاً در کد شروع Bonjour Meal که در App Engine در پروژه GCP شما مستقر شده است، یا به صورت محلی از طریق ngrok اجرا شده است.

بیایید به تابع echo_message نگاه کنیم و ببینیم که چگونه با API برای ارسال پیام به Business Messages تعامل داریم.

bm-django-echo-bot/bopis/views.py [خطوط 199-212]

...
def echo_message(message, conversation_id):
    '''
    Sends the message received from the user back to the user.

    Args:
        message (str): The message text received from the user.
        conversation_id (str): The unique id for this user and agent.
    '''
    message_obj = BusinessMessagesMessage(
        messageId=str(uuid.uuid4().int),
        representative=BOT_REPRESENTATIVE,
        text=message)

    send_message(message_obj, conversation_id)
...

در این تابع، یک BusinessMessagesMessage با متغیر پیام ارسال شده به تابع echo_message نمونه سازی می شود. پس از نمونه سازی، شیء به send_message همراه با شناسه مکالمه ارسال می شود.

bm-django-echo-bot/bopis/views.py [خطوط 214-236]

...
def send_message(message, conversation_id):
    '''
    Posts a message to the Business Messages API, first sending
    a typing indicator event and sending a stop typing event after
    the message has been sent.

    Args:
        message (obj): The message object payload to send to the user.
        conversation_id (str): The unique id for this user and agent.
    '''
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        SERVICE_ACCOUNT_LOCATION,
        scopes=['https://www.googleapis.com/auth/businessmessages'])

    client = bm_client.BusinessmessagesV1(credentials=credentials)

    # Create the message request
    create_request = BusinessmessagesConversationsMessagesCreateRequest(
        businessMessagesMessage=message,
        parent='conversations/' + conversation_id)

    bm_client.BusinessmessagesV1.ConversationsMessagesService(
        client=client).Create(request=create_request)
...

تمام کاری که تابع send_message انجام می‌دهد این است که از اعتبار حساب سرویس شما برای تأیید اینکه می‌توانید پیام‌هایی را به این مکالمه ارسال کنید، نمونه‌سازی مشتری پیام‌های تجاری، و ایجاد درخواستی برای ارسال پیام به conversation ID داده شده، استفاده می‌کند.

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

اکنون که نحوه ارسال پیام را دیدیم، بررسی کنید که نمونه چگونه کارت های غنی، چرخ فلک ها و تراشه های پیشنهادی را ارسال می کند. در بخش بعدی، کد منبع را برای ارسال پیام با برخی از این ویژگی‌های غنی تغییر می‌دهیم.

وقتی آماده شدید، بیایید عامل Bonjour Meal را سفارشی کنیم.

5. سفارشی کردن نماینده خود

اگر تا به حال برنامه Codelab را دنبال کرده اید، باید نماینده زیبای خود را ببینیم.

906bc74668a1b215.png

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

در ادامه این کد لبه، عامل را با موارد زیر گسترش می دهیم:

  • شامل یک لوگوی واقعی
  • پیام خوش آمد گویی بهبود یافته
  • اطلاعات مربوط به ساعات کاری را ارائه دهید
  • به کاربر اطلاع دهید که خرید آنلاین اقلام به زودی انجام می شود
  • استفاده از تراشه های پیشنهاد مکالمه برای تسهیل مکالمه

ما از Console Communications Business استفاده می‌کنیم تا در به‌روزرسانی نشان‌واره، پیام خوش‌آمدگویی به ما کمک کند، اما شما همیشه این گزینه را دارید که مستقیماً از Business Communications API برای انجام همین کار استفاده کنید. سپس باید کد منبع را به‌روزرسانی کنیم تا پیام‌های مناسب برای ارائه اطلاعات در مورد ساعات کاری ارسال کنیم و Bonjour Meal به زودی یک ویژگی خرید آنلاین را ارائه می‌کند. وقتی این کار انجام شد، به کنسول ارتباطات تجاری باز می‌گردیم و تراشه‌های پیشنهادی مکالمه ایجاد می‌کنیم تا به هدایت مکالمه به سمت تجربیات مسیر شادی که نماینده دیجیتال پشتیبانی می‌کند کمک کند.

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

eb6b8ac6b62387ee.png

روی آپلود کلیک کنید و می‌توانید تصویری را برای آپلود یا وارد کردن از یک URL انتخاب کنید.

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

بیایید لوگویی را بارگذاری کنیم که در کد منبعی که در ابتدای این آزمایشگاه شبیه‌سازی کردید قرار دارد. می توانید آن را در فهرست ./assets/ مخزن پیدا کنید و فایل "bonjour_meal-logo.png" نام دارد. شما می توانید فایل را به حالت مدال در مرورگر وب بکشید، یک ابزار ویرایش نور برای دستکاری کیفیت تصویر و برش ارائه می شود. وضوح تصویر و برش را طوری تنظیم کنید که تصویر کمتر یا مساوی با محدودیت 50 کیلوبایتی باشد. وقتی از تصویر راضی بودید، برای تأیید روی علامت تیک در دایره آبی کلیک کنید و در پایین مدال روی «انتخاب» کلیک کنید.

1856081f59623ae2.png

در نهایت روی Save در سمت راست بالای صفحه اطلاعات نماینده کلیک کنید. این تغییری است که مدتی طول می کشد تا در دستگاه شما منعکس شود زیرا اطلاعات عامل در سرورهای ما ذخیره می شود و باید ظرف دو ساعت پس از تغییر قابل مشاهده باشد.

پیام خوشامدگویی را به روز کنید

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

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

6598fec47021136e.png

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

"به Bonjour Meal خوش آمدید. من یک دستیار هستم که می‌توانم در مورد سوالاتی که ممکن است در مورد غذای Bonjour داشته باشید به شما کمک کنم. برخی از گزینه‌های زیر را امتحان کنید."

در نهایت روی Save در سمت راست بالای صفحه اطلاعات نماینده کلیک کنید. باز هم، این تغییر به دلیل مکانیسم ذخیره سازی ما برای اطمینان از سریع بودن همه چیز، مدتی طول می کشد تا منعکس شود!

ارائه اطلاعات مربوط به ساعات کاری

برای ارائه این اطلاعات به کاربران، یک پیام سفارشی با استفاده از Business Messages API برای کاربر ارسال می کنیم.

ممکن است به یاد داشته باشید که پیام ها در تابع route_message views.py تجزیه می شوند. تابع ابتدا رشته را عادی می کند و سپس شروع به بررسی می کند که آیا پیام نرمال شده با هر یک از پارامترهای کدگذاری شده مطابقت دارد یا خیر. برای سادگی، اجازه دهید یک شرط اضافی اضافه کنیم تا ببینیم آیا پیام نرمال شده برابر با یک ثابت جدید است که ما آن را CMD_BUSINESS_HOURS_INQUIRY می نامیم و حاوی مقدار "business-hours-inquiry" است یا خیر. اگر شرط درست ارزیابی شود، تابعی به نام send_message_with_business_hours را فراخوانی می کنیم.

تابع route_message اکنون به شکل زیر خواهد بود:

bm-django-echo-bot/bopis/views.py

...
def route_message(message, conversation_id):
    '''
    Routes the message received from the user to create a response.

    Args:
        message (str): The message text received from the user.
        conversation_id (str): The unique id for this user and agent.
    '''
    normalized_message = message.lower()

    if normalized_message == CMD_RICH_CARD:
        send_rich_card(conversation_id)
    elif normalized_message == CMD_CAROUSEL_CARD:
        send_carousel(conversation_id)
    elif normalized_message == CMD_SUGGESTIONS:
        send_message_with_suggestions(conversation_id)
    elif normalized_message == CMD_BUSINESS_HOURS_INQUIRY:
        send_message_with_business_hours(conversation_id)
    else:
        echo_message(message, conversation_id)
...

برای اینکه کد کار کند، باید دو تغییر دیگر ایجاد کنیم. اولین مورد این است که CMD_BUSINESS_HOURS_INQUIRY همراه با سایر ثابت ها تعریف کنیم، دوم اینکه در واقع تابع send_message_with_business_hours را تعریف کنیم و با استفاده از Business Messages API پیام ارسال کنیم.

بیایید ابتدا ثابت را در بالای فایل با سایر اعلان های ثابت تعریف کنیم:

bm-django-echo-bot/bopis/views.py

...
# Set of commands the bot understands
CMD_RICH_CARD = 'card'
CMD_CAROUSEL_CARD = 'carousel'
CMD_SUGGESTIONS = 'chips'
CMD_BUSINESS_HOURS_INQUIRY = 'business-hours-inquiry'
...

و اکنون، send_message_with_business_hours را تعریف کنیم. شما می توانید این تابع را در هر جایی از فایل، به دنبال نحو مناسب پایتون تعریف کنید. از آنجایی که این تابع به سادگی یک پیام ارسال می کند، بسیار شبیه echo_message ، می توانید از آن به عنوان یک الگو برای تعریف این تابع استفاده کنید.

bm-django-echo-bot/bopis/views.py

...
def send_message_with_business_hours(conversation_id):

    message = '''Thanks for contacting us! The hours for the store are:\n
    MON 8am - 8pm\n
    TUE 8am - 8pm\n
    WED 8am - 8pm\n
    THU 8am - 8pm\n
    FRI 8am - 8pm\n
    SAT 8am - 8pm\n
    SUN 8am - 8pm
    '''

    message_obj = BusinessMessagesMessage(
        messageId=str(uuid.uuid4().int),
        representative=BOT_REPRESENTATIVE,
        text=message)

    send_message(message_obj, conversation_id)
...

با این کار، ربات ما باید بتواند با این ساعات کاری زمانی که کاربر پیام زیر را ارسال می کند، پاسخ دهد: "ساعات کاری - استعلام". شما می توانید چیزی شبیه به این را انتظار داشته باشید:

125802166995afd5.png

پس از استقرار کد منبع در GCP، تغییرات بلافاصله قابل مشاهده خواهند بود. ما برنامه وب را در Google Cloud Platform به همان روشی که اطلاعات نماینده در حافظه پنهان ذخیره می شود، ذخیره نمی کنیم، بنابراین شما می توانید فوراً این تجربه را آزمایش کنید.

در حالی که ما در اینجا با ایجاد تغییرات منبع شتاب داریم، اجازه دهید یک اصلاح دیگر ایجاد کنیم که به کاربر اجازه می دهد در مورد خرید آنلاین پرس و جو کند. نماینده دیجیتال شما پاسخ خواهد داد و می گوید که این ویژگی هنوز در دسترس نیست، اما باید بعداً بازگردید و بررسی کنید.

به کاربر اطلاع دهید که خرید آنلاین به زودی در راه است

ما اصلاحات مشابهی را انجام خواهیم داد تا کاربر را در مورد ساعات کاری مطلع کنیم. این بار، بیایید اطلاعات را به همراه یک تصویر جذاب در یک کارت غنی قرار دهیم.

پیام نرمال شده را تجزیه کنید و شرطی را برای یک ثابت به نام CMD_ONLINE_SHOPPING_INQUIRY با مقدار تنظیم شده روی "خرید آنلاین" بررسی کنید که اگر شرط درست باشد send_online_shopping_info_message را فراخوانی می کند.

bm-django-echo-bot/bopis/views.py

...
# Set of commands the bot understands
CMD_RICH_CARD = 'card'
CMD_CAROUSEL_CARD = 'carousel'
CMD_SUGGESTIONS = 'chips'
CMD_BUSINESS_HOURS_INQUIRY = 'business-hours-inquiry'
CMD_ONLINE_SHOPPING_INQUIRY = 'online-shopping-inquiry'
...
...
...
def route_message(message, conversation_id):
    '''
    Routes the message received from the user to create a response.

    Args:
        message (str): The message text received from the user.
        conversation_id (str): The unique id for this user and agent.
    '''
    normalized_message = message.lower()

    if normalized_message == CMD_RICH_CARD:
        send_rich_card(conversation_id)
    elif normalized_message == CMD_CAROUSEL_CARD:
        send_carousel(conversation_id)
    elif normalized_message == CMD_SUGGESTIONS:
        send_message_with_suggestions(conversation_id)
    elif normalized_message == CMD_BUSINESS_HOURS_INQUIRY:
        send_message_with_business_hours(conversation_id)
    elif normalized_message == CMD_ONLINE_SHOPPING_INQUIRY:
        send_online_shopping_info_message(conversation_id)
    else:
        echo_message(message, conversation_id)
...

اکنون send_online_shopping_info_message را تعریف کنیم. ما می خواهیم این پیام در یک کارت غنی با یک تصویر ارسال شود، بنابراین بیایید تابع send_rich_card را کپی کنیم تا به عنوان یک الگو برای تعریف send_online_shopping_info_message استفاده کنیم.

ابتدا باید متن بازگشتی را به روز کنیم تا یک پیام مناسب داشته باشیم. اگر دستگاه به دلایلی نتواند کارت غنی دریافت کند، از متن بازگشتی استفاده می‌شود. در مرحله بعد، باید BusinessMessagesRichCard به‌روزرسانی کنیم تا عنوان، توضیحات، پیشنهادات و یک فیلد رسانه مرتبط را شامل شود. تابع ما باید به شکل زیر باشد:

bm-django-echo-bot/bopis/views.py

...
def send_online_shopping_info_message(conversation_id):
    fallback_text = ('Online shopping will be available soon!')

    rich_card = BusinessMessagesRichCard(
        standaloneCard=BusinessMessagesStandaloneCard(
            cardContent=BusinessMessagesCardContent(
                title='Online shopping info!',
                description='Thanks for your business, we are located in SF near the Golden Gate Bridge. Online shopping is not yet available, please check back with us in a few days.',
                suggestions=[],
                media=BusinessMessagesMedia(
                    height=BusinessMessagesMedia.HeightValueValuesEnum.MEDIUM,
                    contentInfo=BusinessMessagesContentInfo(
                        fileUrl=SAMPLE_IMAGES[4],
                        forceRefresh=False
                    ))
                )))

    message_obj = BusinessMessagesMessage(
        messageId=str(uuid.uuid4().int),
        representative=BOT_REPRESENTATIVE,
        richCard=rich_card,
        fallback=fallback_text)

    send_message(message_obj, conversation_id)
...

وووووو نماینده دیجیتال ما اکنون می تواند به کاربرانی که در مورد خرید آنلاین سؤال می کنند پاسخ دهد. در حال حاضر، نماینده دیجیتال ما هنوز از خرید آنلاین پشتیبانی نمی کند، بنابراین ما پیامی را به کاربر ارائه می دهیم که به آنها اطلاع می دهد که این ویژگی به زودی ارائه می شود. هنگامی که کاربر در مورد خرید آنلاین سؤال می کند، نماینده دیجیتال ما به این شکل به نظر می رسد.

5cd63c57c1b84f9a.png

درست مانند تغییر قبلی که به کاربر اجازه داد تا در مورد ساعات کاری پرس و جو کند، اگر از ngrok استفاده می‌کنید یا به محض اینکه کد را در موتور برنامه GCP استفاده می‌کنید، این تغییر بلافاصله قابل مشاهده است.

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

استفاده از تراشه ها برای هدایت مکالمه

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

به کنسول ارتباطات تجاری بروید و به صفحه اطلاعات نماینده نماینده خود دسترسی پیدا کنید. ما قبلا شروع کننده مکالمه را برای "تراشه ها"، "کارت" و "چرخ فلک" تعریف کردیم. در حالی که آن‌ها هنوز کار می‌کنند، دیگر به عملکرد تجاری ما مرتبط نیستند. می‌توانید آنها را کنار بگذارید تا به نمایش این ویژگی‌های غنی ادامه دهند یا آن‌ها را حذف کنید تا نماینده دیجیتال شما شروع‌کننده‌های مکالمه را به‌طور خاص برای کسب و کار Bonjour Meal نمایش دهد.

ما دو شروع کننده مکالمه جدید ایجاد خواهیم کرد. برای مورد اول، متن را روی «ساعات کاری شما چیست؟» تنظیم کنید. و داده های Postback را روی "business-hours-inquiry" تنظیم کنید. برای شروع مکالمه دوم، متن را روی «آیا می توانم از اینجا خرید کنم؟» تنظیم کنید. و داده های Postback را روی "خرید آنلاین-اطلاعات" تنظیم کنید.

نتیجه باید پیکربندی مانند تصویر زیر باشد:

ef6e6888acea93e3.png

مانند سایر تغییرات ایجاد شده در کنسول کسب و کار، انتشار این کار مدتی طول می کشد تا بتوانید تغییرات ایجاد شده در دستگاه تلفن همراه خود را مشاهده کنید.

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

در پایان تابع، موارد زیر را اضافه کنید:

bm-django-echo-bot/bopis/views.py

...
def send_online_shopping_info_message(conversation_id):
...
    # at the end of the function, send a message with suggestions
    message_obj = BusinessMessagesMessage(
        messageId=str(uuid.uuid4().int),
        representative=BOT_REPRESENTATIVE,
        text='Let us know how else we can help you:',
        fallback='Please let us know how else we can help you.',
        suggestions=[
            BusinessMessagesSuggestion(
                reply=BusinessMessagesSuggestedReply(
                text='Business hours',
                postbackData='business-hours-inquiry')
            ),
        ])

    send_message(message_obj, conversation_id)
...

# Let's do the same with the business hours
def send_message_with_business_hours(conversation_id):
...
    # at the end of the function, send a message with suggestions
    message_obj = BusinessMessagesMessage(
        messageId=str(uuid.uuid4().int),
        representative=BOT_REPRESENTATIVE,
        text='Let us know how else we can help you:',
        fallback='Please let us know how else we can help you.',
        suggestions=[
            BusinessMessagesSuggestion(
                reply=BusinessMessagesSuggestedReply(
                text='Can I purchase online?',
                postbackData='online-shopping-inquiry')
            ),
        ])

    send_message(message_obj, conversation_id)
...

توجه داشته باشید که فیلد نوشتاری در یک BusinessMessagesSuggestion به 25 کاراکتر محدود است، همانطور که در مستندات توضیح داده شده است.

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

ef57695e2bacdd20.png

6. تبریک می گویم

تبریک می‌گوییم، شما با موفقیت اولین نماینده دیجیتال Business Messages خود را ایجاد کردید!

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

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

در اینجا یک تیزر از آنچه که احتمالاً می تواند به نظر برسد آمده است.

57d2bb7b0ec38c81.png

چگونه یک تجربه مکالمه عالی ایجاد کنم؟

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

زمینه را فراهم کنید و انتظارات را تعیین کنید

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

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

قابلیتی را در اختیار کاربر قرار دهد

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

کاربر را درگیر نگه دارید

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

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

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

بعدش چی؟

هنگامی که آماده شدید، برخی از موضوعات زیر را بررسی کنید تا در مورد تعاملات پیچیده تری که می توانید در Business Messages به دست آورید آشنا شوید.

اسناد مرجع