ここでは、任意のユーザーイベント (メニューアイテムなど) から Chatbot にメッセージを送信する方法について説明します。
いくつかの選択肢を含む Web パネルまたは SD パネルをユーザーに表示し、そこでいずれかの項目が選択されると Chatbot に通知が届き、ユーザーからの質問に応じて Chatbot が回答できるようにすることが目的です。
たとえば、ユーザーと Chatbot があいさつをするときについて考えてみます。ユーザーからあいさつがあったときの Chatbot の最初のアクションは、サポートメニューをユーザーに表示することです。次の図を参照してください:
ユーザーがメニューからアクションを選択すると、Chatbot がユーザーの意図を繰り返すため、処理する意図の内容が "Make an inquiry" であることが明確になります。
NLP プロバイダーでメッセージが処理された後、Chatbot はユーザーに回答します。
この例では、"Greetings" の Flow は次のようになります:
Flow に設定された [ Conversational Object ] は "Greetings" で、ここでは Web Panel オブジェクトであることに注目してください (SD Panel オブジェクトにすることもできます)。
ユーザーが選択した項目に応じて、次のいずれかの Flow 表示がトリガーされます:
- Make a Claim Flow
- Get Information Flow
- Set a date and time Flow
そのため、Conversational Flows オブジェクトは次の図のようになります:
これらの Flow のいずれかをトリガーするには、有効なメッセージを NLP プロバイダーに送信して意図が正しく認識されるようにする必要があります。
意図をトリガーするために使用するメッセージを知るには、各 Flow の [ Trigger Messages ] プロパティを確認してください。
"Greetings" Web パネルフォームは次のようになります:
Conversational Object パネル ("Greetings" Web パネル) のコードは次のとおりです:
Event Start
GreetingsProcedure(&greeting)
GreetingLbl.Caption = format(!"%1 I'm here to assist you.This is what I can help you with.Let's start!",&greeting)
Endevent
Event 'Get Information' // [ Make an inquiry ] ボタンのクリック時イベント
GlobalEvents.BotEvent(!"Make an inquiry")
Endevent
Event 'Schedule an activity' // [ Set a date and time ] ボタンのクリック時イベント
GlobalEvents.BotEvent(!"Set a date and time")
Endevent
Event 'Do a claim' // [ Do a claim ] ボタンのクリック時イベント
GlobalEvents.BotEvent(!"Do a claim")
Endevent
最初に Start イベントで、1 日の時間帯に応じたあいさつメッセージを取得するプロシージャーを呼び出します。
次に、各ボタンに関連付けられたイベントによって、新しいメッセージがあることが Chatbot に通知されます。Flow をトリガーするために使用するメッセージは、前に説明したとおり、その Flow にとって有効なトリガーメッセージである必要があります。
イベントが実行されると Chatbot サービスがトリガーされ、ユーザーが Chatbot のメッセージボックスにメッセージを指定してクエリを入力した場合と同じように、ユーザーに応答が送信されます。
これが、グローバルイベント機能を使用する理由です。
GlobalEvents.BotEvent イベントは、生成された PanelChatWeb オブジェクトと PanelChatSD オブジェクトで定義されています。例に示すとおり、これらのオブジェクトを使用すると、対応する GlobalEvents.BotEvent がトリガーされてメッセージを受信し、受信したメッセージは NLP プロバイダーに送信されます。
Event GlobalEvents.BotEvent(&Send)
Do 'SendMessage'
Endevent
Sub 'SendMessage' //メッセージの送信
&WebClient = &WebNotification.ClientId
&NotificationInfo = new()
&PreviousContext = GetChatMeta(&UserId, &Instance)
NewMessage(&UserId, ChatbotMessageTypes.User, &Send, "", &PreviousContext, "", &WebClient, &Instance)
GridSent.Refresh()
CommonChatbots.SendMessage.Submit("", &Instance, ChatbotPlatform.Web, &Send, "", &PreviousContext, &WebClient)
Do 'NotifyOtherClients'
&Send.SetEmpty()
endsub
CommonChatbots.SendMessage プロシージャーは、SendMessage メソッドを呼び出します。
注: これらのイベントは、生成された PanelChatWeb オブジェクトと PanelChatSD オブジェクトで既に定義されているため、プログラムする必要はありません。
「GeneXus を利用して Chatbot をビルドする方法」で完全な例を参照してください。ソリューションは、例の CitizenSDAdv インスタンスと CitizenAdv インスタンスにあります。
|