WhatsApp を通じて Chatbot を公開するとき、ユーザーの ID (メッセージ受信者) は
Webhook で取得されます。アーキテクチャにより (Webhook はサービスであり、
[ Call protocol ] プロパティが HTTP のプロシージャー)、この情報は他のコードから後で取得できる場所に保持する必要があります。
このため、この情報は他で使用できるよう
コンテキストに保持されます。
ユーザー ID は、WhatsappWebhook オブジェクトによって呼び出される
SendMessageFromChannel というプロシージャーでコンテキストに保持されます。
Conversational Flows オブジェクトの
[ Enable WhatsApp ] プロパティが True に設定され、WhatsApp パートナーのデータも設定されている場合 (
[ Twilio Token ] プロパティなど)、WhatsappWebhook は自動生成されます。
この Webhook で
SendMessageFromChannel プロシージャー (CommonChatbots モジュール内にある) が呼び出され、メッセージの保存、Chatbot の呼び出し、応答の保存が行われます。
SendMessageFromChannel プロシージャーは、
GetUserIdByDevice プロシージャーを使用してユーザー ID を取得します。ユーザーのメッセージの受信者をパラメーターとして取得し、そのユーザーのコンテキストに保存されるユーザーの GUID を返します:
この情報は AnalyzeResponse オブジェクトに保存されますが、他のコードから取得するには、Context タイプの変数を使用する必要があります。Context は <InstanceName>Chatbot という名前のモジュールの下にある SDT です。たとえば、インスタンス名が「Citizen」の場合、Context SDT は CitizenChatbot モジュールの下にあります。
インスタンス化された Context を使用できます。たとえば、Context をインスタンス化できるプロシージャーは (パラメーターとして自動的に受け取れるため)、任意のユーザー入力の
Validation プロシージャーです。
ユーザーの GUID を取得するには、次のようにします:
&UserIdContext = &Context.Context.GXUserId
GeneXus 16 Upgrade 10 以降