Congratulations!

[Valid Atom 1.0] This is a valid Atom 1.0 feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: https://www.functionprologue.com/feeds/posts/default

  1. <?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2898752564976177498</id><updated>2024-04-11T23:29:55.368-07:00</updated><category term="Artificial Intelligence"/><category term="Microsoft Power Virtual Agents"/><category term="PVA"/><category term="Conversational AI"/><category term="Generative AI"/><category term="Power Virtual Agents"/><category term="GPT-4"/><category term="JavaScript"/><category term="OpenAI API"/><title type='text'>Kevin Voell</title><subtitle type='html'>Adventures in AI using AI</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.functionprologue.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default'/><link rel='alternate' type='text/html' href='http://www.functionprologue.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kevin Voell</name><uri>http://www.blogger.com/profile/01460870577820039832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRFZc5ucTlZ_pgseYIOlvC1VC8ws3I28mqfkSYeGLcoAREWSEheUKkNrLn6Z0Pk2zaAdN4noCZusdHBDB9I37fLmpNevZkEgIOBiKZ2TvLS-LfCzcurFKhLtDKbozQz-l9yagxKR7ajyBh18jq3iWw3K-yrkX2qeNbS16nBkbVURvR0rA/s220/about-1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2898752564976177498.post-7213721601241213072</id><published>2023-10-23T20:46:00.002-07:00</published><updated>2023-10-23T20:57:56.949-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Artificial Intelligence"/><category scheme="http://www.blogger.com/atom/ns#" term="Generative AI"/><category scheme="http://www.blogger.com/atom/ns#" term="GPT-4"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Power Virtual Agents"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenAI API"/><category scheme="http://www.blogger.com/atom/ns#" term="Power Virtual Agents"/><category scheme="http://www.blogger.com/atom/ns#" term="PVA"/><title type='text'>Playing with PVA&#39;s HTTP Requests: An Introductory Tic-Tac-Toe Duel with OpenAI&#39;s GPT-4</title><content type='html'>&lt;details&gt;
  2.  &lt;summary&gt;Prompt (Expand to see prompt used)&lt;/summary&gt;
  3.  &lt;div class=&quot;prompt&quot;&gt;
  4.    &lt;script src=&quot;https://gist.github.com/KevinVoell/50645c4abe7b36b45d841bb7e45d35d7.js&quot;&gt;&lt;/script&gt;
  5.  &lt;/div&gt;
  6. &lt;/details&gt;
  7. &lt;p style=&quot;text-align: left;&quot;&gt;When exploring the capabilities of PVA&#39;s new Send HTTP request feature, we decided to embark on a playful, yet instructional venture: integrating a game of Tic-Tac-Toe with OpenAI&#39;s GPT-4. While it&#39;s unlikely you&#39;d actually deploy a game of Tic-Tac-Toe via a chatbot, this exercise offers invaluable insights into harnessing some of PVA&#39;s advanced features.&lt;/p&gt;
  8. &lt;h2 id=&quot;1-setting-up-ai-conversation-structure&quot;&gt;1. Setting Up AI Conversation Structure&lt;/h2&gt;
  9. &lt;p&gt;&lt;strong&gt;System Prompt&lt;/strong&gt;: Every interaction with GPT-4 starts with a system prompt that sets the context. For our game, the system prompt might be something like &quot;You are an AI assistant helping the user play a game of Tic-Tac-Toe.&quot;&lt;/p&gt;
  10. &lt;script src=&quot;https://gist.github.com/KevinVoell/a9b30b6a8f3103b758eb5dfd81693689.js&quot;&gt;&lt;/script&gt;
  11. &lt;p&gt;&lt;strong&gt;Initial User Prompt&lt;/strong&gt;: This is the user&#39;s entry into the game. A simple &quot;Let&#39;s Play&quot; triggers the topic and sets the game in motion.&lt;/p&gt;
  12. &lt;script src=&quot;https://gist.github.com/KevinVoell/9428ea09fea6278b56868be7ef2a3da4.js&quot;&gt;&lt;/script&gt;
  13. &lt;p&gt;&lt;strong&gt;Continuing the Conversation&lt;/strong&gt;: As the game progresses, user and assistant messages build upon each other. We employ PVA&#39;s &quot;Modify items in a list&quot; feature, which, for now, is exclusively accessible via YAML.&lt;/p&gt;
  14. &lt;p&gt;&lt;strong&gt;Prompt Example after first round&lt;/strong&gt;&lt;/p&gt;
  15. &lt;script src=&quot;https://gist.github.com/KevinVoell/b028079b241bd8b95da3b780daf36b3c.js&quot;&gt;&lt;/script&gt;
  16. &lt;p&gt;# If you&#39;re not familiar with generative AI interaction, GPT-4 doesn&#39;t have a memory or idea of &quot;state&quot; during a chat so you need to send the entire chat history of the system, assistant, and user messages with each API call you make.  You can see in the screenshot above this history being built from within PVA.  It&#39;s important to note that you pay for OpenAI usage by the number of tokens you use.  Different AI models have different prices per tokens as well, so GPT-4 is more expensive than GPT-3.5-turbo for example, but GPT-4 is more capable.&lt;/p&gt;
  17.  
  18. &lt;h2 id=&quot;2-configuring-http-requests&quot;&gt;2. Configuring HTTP Requests&lt;/h2&gt;
  19. &lt;p&gt;To make our chatbot interact with GPT-4, we utilize the Send HTTP request node:&lt;/p&gt;
  20. &lt;ul&gt;
  21. &lt;li&gt;&lt;em&gt;URL&lt;/em&gt;: Direct the request to OpenAI&#39;s GPT-4 endpoint.&lt;/li&gt;
  22. &lt;li&gt;&lt;em&gt;HTTP Action&lt;/em&gt;: Use POST.&lt;/li&gt;
  23. &lt;li&gt;&lt;em&gt;Headers&lt;/em&gt;: Insert the necessary authentication headers, including your API key (always ensure you handle API keys securely! More on this later).&lt;/li&gt;
  24. &lt;li&gt;&lt;em&gt;Body&lt;/em&gt;: Construct the JSON body, which includes the conversation context and user messages.&lt;/li&gt;
  25. &lt;/ul&gt;
  26. &lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgU7HehU770h3yCSmaArpkxUrYXzsLP4XCHvBMJuDJEulPwsPPw_WBV0bZTkPGx8hHHdvLEYQ3V1iztWqCASbjpb7IdesFeoNZtDVU9tSiv6OshiBQ_qgkPAzQuPf3Y3TmQ9u3XijfxDpcsApGiEAKYrSfgikrggaHiNhrgkOBcQlSWq8bMah45ujPuhX5X&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;523&quot; data-original-width=&quot;324&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgU7HehU770h3yCSmaArpkxUrYXzsLP4XCHvBMJuDJEulPwsPPw_WBV0bZTkPGx8hHHdvLEYQ3V1iztWqCASbjpb7IdesFeoNZtDVU9tSiv6OshiBQ_qgkPAzQuPf3Y3TmQ9u3XijfxDpcsApGiEAKYrSfgikrggaHiNhrgkOBcQlSWq8bMah45ujPuhX5X=w248-h400&quot; width=&quot;248&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - HTTP Request Node&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh1wNWF8xhSoTODfrhe2rDt2XirycPR_gUqMaDMXhShGiNgIblS_pKQoQCYYg-ZqNap6vwXNtbEkUXrhRA4MgTeSpjKBx6A7cAtVw_kquhmWaxG_DUobTUqOo6Pe65B2dAGDrgBT3L0l1QxmMW_r2LIM7JG1xDlyIHYVF9Zeght2APhnbZc0ewFmSqfcGfr&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;582&quot; data-original-width=&quot;321&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh1wNWF8xhSoTODfrhe2rDt2XirycPR_gUqMaDMXhShGiNgIblS_pKQoQCYYg-ZqNap6vwXNtbEkUXrhRA4MgTeSpjKBx6A7cAtVw_kquhmWaxG_DUobTUqOo6Pe65B2dAGDrgBT3L0l1QxmMW_r2LIM7JG1xDlyIHYVF9Zeght2APhnbZc0ewFmSqfcGfr=w220-h400&quot; width=&quot;220&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - HTTP Request Properties&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
  27.  
  28. &lt;h2 id=&quot;configuring-response-data-type-in-pva-s-send-http-request-node&quot;&gt;Configuring Response Data Type in PVA&#39;s Send HTTP Request Node&lt;/h2&gt;
  29. &lt;p&gt;Handling response data accurately and efficiently is crucial to ensure your bot&#39;s interactions are relevant and meaningful. PVA&#39;s Send HTTP request node comes equipped with powerful features that simplify this process, especially when dealing with structured data like JSON. Here&#39;s how to set up the &quot;Response data type&quot; and &quot;Save response as&quot; options for optimal data management:&lt;/p&gt;
  30. &lt;h3 style=&quot;text-align: left;&quot;&gt;Setting up &quot;Response data type&quot;&lt;/h3&gt;
  31. &lt;ol&gt;
  32. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Select Data Type&lt;/strong&gt;: In the Send HTTP request node, you&#39;ll find the &quot;Response data type&quot; option. This defines the format of the data you expect from the endpoint. For structured data, such as from RESTful APIs, &quot;JSON&quot; is commonly used.&lt;/p&gt;&lt;/li&gt;
  33. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Use &quot;From sample data&quot; Feature&lt;/strong&gt;: One of PVA&#39;s standout features is its ability to derive the schema directly from a sample response. Click on &quot;From sample data&quot;, and a field will appear where you can paste a sample JSON response from your endpoint.&lt;/p&gt;
  34. &lt;/li&gt;
  35. &lt;/ol&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhPXj97IPCnIrUbbdlRRYalpoisiSyEiyIdv7TMRhqCLMEYgqitF1uKYOWsJ-85h0BEv9URjjHpexKRIWlvroTRTJVnGg97aLxfKvKyC-vzSXoWBaXDjeNXk0pgnFFDhV0kCkyBNdUTPq6myLzq08m4pgl8NY8v_tdUMgbkP_lAO9CowQLFSHBHU07MPeth&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;487&quot; data-original-width=&quot;803&quot; height=&quot;243&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhPXj97IPCnIrUbbdlRRYalpoisiSyEiyIdv7TMRhqCLMEYgqitF1uKYOWsJ-85h0BEv9URjjHpexKRIWlvroTRTJVnGg97aLxfKvKyC-vzSXoWBaXDjeNXk0pgnFFDhV0kCkyBNdUTPq6myLzq08m4pgl8NY8v_tdUMgbkP_lAO9CowQLFSHBHU07MPeth=w400-h243&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - Get Schema from sample JSON&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhPO2u1rnlsiV0Ue6tJtEHuIk2EhV-j8gcyQB9xQKvenwjZHJGfqov8_I49seTTFmVDdKzXHwQ8JWQkxMHYsFo-sswl7kjESQQm-H2pGz60lvoab3TZQE8iZstElzD9bN29bZ-EjOq9VG5KWDnOJI8R5vRup3sFy5Ggj2F176_bE-prN2UUKX9TtOqTwhN5&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;501&quot; data-original-width=&quot;801&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhPO2u1rnlsiV0Ue6tJtEHuIk2EhV-j8gcyQB9xQKvenwjZHJGfqov8_I49seTTFmVDdKzXHwQ8JWQkxMHYsFo-sswl7kjESQQm-H2pGz60lvoab3TZQE8iZstElzD9bN29bZ-EjOq9VG5KWDnOJI8R5vRup3sFy5Ggj2F176_bE-prN2UUKX9TtOqTwhN5=w400-h250&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - Schema from sample JSON&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;
  36.  
  37. &lt;p&gt;By providing a sample, PVA auto-generates a schema, streamlining the data extraction process for future responses. This is especially beneficial for endpoints that return complex or nested JSON structures, as it saves significant time and minimizes errors.&lt;/p&gt;
  38. &lt;h3 style=&quot;text-align: left;&quot;&gt;Configuring &quot;Save response as&quot;&lt;/h3&gt;
  39. &lt;ol&gt;
  40. &lt;li&gt;&lt;strong&gt;Set Response Variable Name&lt;/strong&gt;: After defining the data type and schema, you&#39;ll need to specify where this data will be stored for future use in the bot&#39;s flow. The &quot;Save response as&quot; option allows you to assign a variable name to the response. &lt;/li&gt;
  41. &lt;/ol&gt;
  42. &lt;p&gt;For example, if your bot is querying an endpoint for product details, you might name this variable &quot;ProductDetails&quot;.&lt;/p&gt;
  43.  
  44. &lt;ol&gt;
  45. &lt;li&gt;&lt;strong&gt;Accessing Data&lt;/strong&gt;: Once the data is stored in the defined variable, you can access specific attributes in subsequent nodes. For instance, if your JSON response has an attribute named &quot;productName&quot;, you can reference it in your bot as &lt;code&gt;ProductDetails.productName&lt;/code&gt;.&lt;/li&gt;
  46. &lt;/ol&gt;
  47. &lt;p&gt;By efficiently setting up the response data type and storage variable, you&#39;re ensuring your bot can process, reference, and utilize the returned data seamlessly. Leveraging the &quot;From sample data&quot; feature further ensures accuracy, making your bot&#39;s interactions more dynamic and contextually relevant.&lt;/p&gt;
  48.  
  49. &lt;h2 id=&quot;handling-errors-with-pva-s-send-http-request-node&quot;&gt;Handling Errors with PVA&#39;s Send HTTP Request Node&lt;/h2&gt;
  50. &lt;p&gt;In any real-world application, error handling is essential, ensuring that your bot continues to function smoothly even when unforeseen issues arise. The Send HTTP request node in PVA provides built-in error handling capabilities. Here&#39;s how you can set up and handle potential errors when communicating with external services.&lt;/p&gt;
  51. &lt;h3 id=&quot;setting-up-error-handling-in-the-node&quot;&gt;Setting Up Error Handling in the Node&lt;/h3&gt;
  52. &lt;ol&gt;
  53. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Configure &quot;Continue on error&quot;&lt;/strong&gt;: Within the Send HTTP request node, you&#39;ll find an option for error handling. Instead of &quot;Raise on error&quot;, which halts the bot&#39;s operation upon encountering an error, select &quot;Continue on error&quot;. This allows the bot to continue its process, giving you control over the subsequent actions based on the nature of the error.&lt;/p&gt;
  54. &lt;/li&gt;
  55. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Variables for Status Code and Error Response&lt;/strong&gt;: In addition to the response data, it&#39;s important to capture potential error details. Assign variable names for the &lt;code&gt;Status Code&lt;/code&gt; and &lt;code&gt;Error Response Body&lt;/code&gt;. These variables will store the HTTP status code and any error message returned by the endpoint, respectively.&lt;/p&gt;&lt;/li&gt;
  56. &lt;/ol&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjd_4KK6G1GFGp6wjdt0CYgdGXiU8Fkscm_BxgLJiaSaCMZIiRgG7ZZH-X-toGJScucjr6Pf2-qrd4dkMHW3-kuS35_BTnHOVfzfG6jHoyR6z48v0jJMvyDlfsvvp3Fck_7YzCCvoS5IG3DLHBXEeUlPLvbQ95ryqjAIN53rqIkPdOBkkoAU4gZ_WKXxPTc&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;439&quot; data-original-width=&quot;325&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjd_4KK6G1GFGp6wjdt0CYgdGXiU8Fkscm_BxgLJiaSaCMZIiRgG7ZZH-X-toGJScucjr6Pf2-qrd4dkMHW3-kuS35_BTnHOVfzfG6jHoyR6z48v0jJMvyDlfsvvp3Fck_7YzCCvoS5IG3DLHBXEeUlPLvbQ95ryqjAIN53rqIkPdOBkkoAU4gZ_WKXxPTc=w297-h400&quot; width=&quot;297&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - HTTP Request Error Handling Properties&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
  57. &lt;p&gt;&lt;/p&gt;
  58. &lt;h3 id=&quot;implementing-conditional-error-messages&quot;&gt;Implementing Conditional Error Messages&lt;/h3&gt;
  59. &lt;p&gt;With the error details captured in variables, you can add conditions to check for errors and then decide on the subsequent actions.&lt;/p&gt;
  60. &lt;ol&gt;
  61. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Add a Condition&lt;/strong&gt;: After the Send HTTP request node, insert a &quot;Condition&quot; node to evaluate the status of the request.&lt;/p&gt;
  62. &lt;/li&gt;
  63. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Check the Status Code Variable&lt;/strong&gt;: Set the condition to evaluate whether the &lt;code&gt;Status Code&lt;/code&gt; variable is not equal to &lt;code&gt;Blank()&lt;/code&gt;. This checks if there&#39;s a value (typically an error code) present.&lt;/p&gt;
  64. &lt;/li&gt;
  65. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Provide Feedback to the User&lt;/strong&gt;: If the condition evaluates to true (indicating an error), you can route the conversation flow to display a friendly message to the user. This message can be a generic error message or, for more advanced implementations, tailored responses based on specific status codes or error messages.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhrj3A5O6yVcB3p5wzjfbuiQMrTXX7EHtLoySx1NRSc2a0ShiGgK4Ba3VBG4EaM_tpnLHAm5x6yRMDTU4SqQ5X9JLLAhR2ZPvfbQzfpg7a56EVxsJNjgmOmcK1ns4pOzUtXmcRvzZ5Ta-T1EHblbNCz6Z51HkxRL22x6n4v2v475CyY6Fe41KXrujobIS5l&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;796&quot; data-original-width=&quot;545&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhrj3A5O6yVcB3p5wzjfbuiQMrTXX7EHtLoySx1NRSc2a0ShiGgK4Ba3VBG4EaM_tpnLHAm5x6yRMDTU4SqQ5X9JLLAhR2ZPvfbQzfpg7a56EVxsJNjgmOmcK1ns4pOzUtXmcRvzZ5Ta-T1EHblbNCz6Z51HkxRL22x6n4v2v475CyY6Fe41KXrujobIS5l=w437-h640&quot; width=&quot;437&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Sample error handling flow in our Topic&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhVWpukXDFrkGpB_44ICCyaKIO3sscYvRR5iEAoEHAbgbn9SS9xfg12ZCuQgw0TO_nJNOTg4zMsFqx3gFtj22I3L9pi9Yo7NJ7YxOBbO5AxWFquuui7e86dSRsedbQFlt_bK4zo3CfLlmZYRV1Cao5jrdCurcK5CNqmfFS5i7XpF0vHRzCNCQiV8rfZ2scO&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;322&quot; data-original-width=&quot;356&quot; height=&quot;362&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhVWpukXDFrkGpB_44ICCyaKIO3sscYvRR5iEAoEHAbgbn9SS9xfg12ZCuQgw0TO_nJNOTg4zMsFqx3gFtj22I3L9pi9Yo7NJ7YxOBbO5AxWFquuui7e86dSRsedbQFlt_bK4zo3CfLlmZYRV1Cao5jrdCurcK5CNqmfFS5i7XpF0vHRzCNCQiV8rfZ2scO=w400-h362&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Example error message output (could be prettier)&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Incorporating such error handling mechanisms ensures a better user experience. It gives clarity when issues arise and offers users guidance on the next steps, rather than leaving them puzzled with abrupt bot failures.&lt;p&gt;&lt;/p&gt;
  66.  
  67.  
  68. &lt;h2 id=&quot;3-displaying-gpt-4-s-output-and-capturing-user-input&quot;&gt;3. Displaying GPT-4&#39;s Output and Capturing User Input&lt;/h2&gt;
  69. &lt;p&gt;In our game play, once GPT-4 responds, we&#39;re taking the message from the AI and displaying it using a Question node in PVA. This allows the user to enter their choice, which is then sent back to the AI for the next turn.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjIaT4D7uRm0ftTt1f5AsCC3x2Pvp8ma7RwSxUqFfnC5_snPWxHBZ8MtD0APF8PmkeE7x7X4KDkVaqp4L9Kc8Kps0ijgbw8ZkUS9A5bx1LH6-7Qxlt_3qRsT2El61pevOgC8YDFKnuxPZ0sHUJ3uOVEnFOGK3yw46Dv9bNYBbDBAqffhUKUe9pFNQDdbueQ&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;283&quot; data-original-width=&quot;292&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjIaT4D7uRm0ftTt1f5AsCC3x2Pvp8ma7RwSxUqFfnC5_snPWxHBZ8MtD0APF8PmkeE7x7X4KDkVaqp4L9Kc8Kps0ijgbw8ZkUS9A5bx1LH6-7Qxlt_3qRsT2El61pevOgC8YDFKnuxPZ0sHUJ3uOVEnFOGK3yw46Dv9bNYBbDBAqffhUKUe9pFNQDdbueQ&quot; width=&quot;248&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - Question Node&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;
  70. &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgvgqvoIzZiHDDp0HkzUca9ZhhoaJ4hKETqiGzd9ZPobRxWwnUK_3lQHmS31pzdzBUS3iiRp8BsXKgtJ_7_tAg2TzceYpLTZdhmi-oELlmkf9WQT9PfoQFc7NCKoAgFLMjIN5VK7Ka10krtA7dsX9oJBEjQGu5TQbmkZjwCLZSkuXCq0UR9uNoJatwLgMop&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;515&quot; data-original-width=&quot;357&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgvgqvoIzZiHDDp0HkzUca9ZhhoaJ4hKETqiGzd9ZPobRxWwnUK_3lQHmS31pzdzBUS3iiRp8BsXKgtJ_7_tAg2TzceYpLTZdhmi-oELlmkf9WQT9PfoQFc7NCKoAgFLMjIN5VK7Ka10krtA7dsX9oJBEjQGu5TQbmkZjwCLZSkuXCq0UR9uNoJatwLgMop=w277-h400&quot; width=&quot;277&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - Question Example&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
  71. &lt;h2 id=&quot;4-iterative-game-loop&quot;&gt;4. Iterative Game Loop&lt;/h2&gt;
  72. &lt;p&gt;After each move, the chatbot loops back to the Send HTTP request node, perpetuating the game cycle until a conclusion (win, lose, or draw) is reached.&lt;/p&gt;
  73. &lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi56ZL5vKK9nRKHHRaArFnXGMIgiVykvXxcwAjbWur7LQjAV8XuLsvq32Ni2xLHuBCFkq2QJDn_qz0BmOGZTKEGR8wZOTlP4qEljMqtbJ0Ox1H7VN3D4Vr4Q8F0ppO0tVc6YuldDvRkAhr6Tqj72Nx6B-HlIZOJuzcvwJraZGMBRyx7pnMhGLVqDWJUc2fX&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;505&quot; data-original-width=&quot;343&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi56ZL5vKK9nRKHHRaArFnXGMIgiVykvXxcwAjbWur7LQjAV8XuLsvq32Ni2xLHuBCFkq2QJDn_qz0BmOGZTKEGR8wZOTlP4qEljMqtbJ0Ox1H7VN3D4Vr4Q8F0ppO0tVc6YuldDvRkAhr6Tqj72Nx6B-HlIZOJuzcvwJraZGMBRyx7pnMhGLVqDWJUc2fX=w272-h400&quot; width=&quot;272&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Example flow in our Topic that goes back to HTTP Request step&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;
  74.  
  75. &lt;p&gt;&lt;strong&gt;YAML for adding messages to the prompt&lt;/strong&gt;&lt;/p&gt;
  76. &lt;script src=&quot;https://gist.github.com/KevinVoell/edefba06607716cd2bf1dc45a4913569.js&quot;&gt;&lt;/script&gt;
  77. &lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh3VgUSIg1CPRcnqo4NbPQRJiblcIGQTWkM65axMLyc-YbL-sW42LuvJUpa6RUJ8caik6RRdgGRd3leMtymMgMIkCl--16SOW_mswHPCL1lxmPQCHVAOhslbnMrAN3yUQNpQju9VL8KXNnawsUd1YVND4v0G0a3XL7EGU1PAnRO3yvgSksE9GqDawvqpHGQ&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;461&quot; data-original-width=&quot;335&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh3VgUSIg1CPRcnqo4NbPQRJiblcIGQTWkM65axMLyc-YbL-sW42LuvJUpa6RUJ8caik6RRdgGRd3leMtymMgMIkCl--16SOW_mswHPCL1lxmPQCHVAOhslbnMrAN3yUQNpQju9VL8KXNnawsUd1YVND4v0G0a3XL7EGU1PAnRO3yvgSksE9GqDawvqpHGQ=w290-h400&quot; width=&quot;290&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - Modify items in a list properties&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
  78. &lt;h2 id=&quot;5-best-practices&quot;&gt;5. Best Practices&lt;/h2&gt;
  79. &lt;ul&gt;
  80. &lt;li&gt;&lt;strong&gt;Secure Your API Key&lt;/strong&gt;: Never hard-code API keys directly in scripts or workflows. Consider using Azure Key Vault or other secure mechanisms to store and retrieve sensitive information.&lt;/li&gt;
  81. &lt;li&gt;&lt;strong&gt;Manage HTTP Requests Efficiently&lt;/strong&gt;: To avoid unnecessary API costs, ensure that your HTTP requests are efficient. Design the conversation flow in a way that minimizes redundant calls to GPT-4.&lt;/li&gt;
  82. &lt;li&gt;&lt;strong&gt;Error Handling&lt;/strong&gt;: Always be prepared for potential API errors or unexpected responses. Incorporate robust error handling into your chatbot&#39;s workflow.&lt;/li&gt;
  83. &lt;/ul&gt;
  84. &lt;h2 id=&quot;demo-and-conclusion&quot;&gt;Demo and Conclusion&lt;/h2&gt;
  85. &lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgqtzHoEkb1YJi1XgMsSu5RNnEcLlB-miN2xnERMjTe1Dukky8aCRqpbDj2CKA3MZQriTr4Vrz0wnl_Zvf5dk4C-UJtTSh0bEdqhmVj6VpidpRSrQmycWYv52NZj-riwC3ENKbJGmdpCYFkUAex7OQpHvemyh3eKx_quBGvxrg0RxYityNJQoT8lckDtYOs&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;515&quot; data-original-width=&quot;357&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgqtzHoEkb1YJi1XgMsSu5RNnEcLlB-miN2xnERMjTe1Dukky8aCRqpbDj2CKA3MZQriTr4Vrz0wnl_Zvf5dk4C-UJtTSh0bEdqhmVj6VpidpRSrQmycWYv52NZj-riwC3ENKbJGmdpCYFkUAex7OQpHvemyh3eKx_quBGvxrg0RxYityNJQoT8lckDtYOs=w277-h400&quot; width=&quot;277&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Tic-Tac-Toe demo&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;
  86. &lt;p&gt;While playing Tic-Tac-Toe with a PVA bot isn&#39;t the most productive use of your time, it showcases the depth and versatility of PVA&#39;s toolset. Remember, the Send HTTP request feature is still in preview, so always be ready for potential shifts in its behavior or capabilities. Embrace the learning curve, and enjoy the game!&lt;/p&gt;
  87.  
  88. &lt;details&gt;
  89. &lt;summary&gt;Complete YAML for the Topic&lt;/summary&gt;
  90. &lt;script src=&quot;https://gist.github.com/KevinVoell/3f442a9eec5c6619b77c4a4a8aed7395.js&quot;&gt;&lt;/script&gt;
  91. &lt;/details&gt;
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99. </content><link rel='replies' type='application/atom+xml' href='http://www.functionprologue.com/feeds/7213721601241213072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2898752564976177498&amp;postID=7213721601241213072&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/7213721601241213072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/7213721601241213072'/><link rel='alternate' type='text/html' href='http://www.functionprologue.com/2023/10/playing-with-pvas-http-requests.html' title='Playing with PVA&#39;s HTTP Requests: An Introductory Tic-Tac-Toe Duel with OpenAI&#39;s GPT-4'/><author><name>Kevin Voell</name><uri>http://www.blogger.com/profile/01460870577820039832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRFZc5ucTlZ_pgseYIOlvC1VC8ws3I28mqfkSYeGLcoAREWSEheUKkNrLn6Z0Pk2zaAdN4noCZusdHBDB9I37fLmpNevZkEgIOBiKZ2TvLS-LfCzcurFKhLtDKbozQz-l9yagxKR7ajyBh18jq3iWw3K-yrkX2qeNbS16nBkbVURvR0rA/s220/about-1.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgU7HehU770h3yCSmaArpkxUrYXzsLP4XCHvBMJuDJEulPwsPPw_WBV0bZTkPGx8hHHdvLEYQ3V1iztWqCASbjpb7IdesFeoNZtDVU9tSiv6OshiBQ_qgkPAzQuPf3Y3TmQ9u3XijfxDpcsApGiEAKYrSfgikrggaHiNhrgkOBcQlSWq8bMah45ujPuhX5X=s72-w248-h400-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898752564976177498.post-6908108205495800154</id><published>2023-10-21T18:56:00.004-07:00</published><updated>2023-10-21T18:56:09.501-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Artificial Intelligence"/><category scheme="http://www.blogger.com/atom/ns#" term="Conversational AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Power Virtual Agents"/><category scheme="http://www.blogger.com/atom/ns#" term="Power Virtual Agents"/><category scheme="http://www.blogger.com/atom/ns#" term="PVA"/><title type='text'>Exploring Power Virtual Agents&#39; New (Preview) Feature: The Send HTTP Request Node</title><content type='html'>&lt;details&gt;
  100.  &lt;summary&gt;Prompt (Expand to see prompt used)&lt;/summary&gt;
  101.  &lt;div class=&quot;prompt&quot;&gt;
  102.    &lt;script src=&quot;https://gist.github.com/KevinVoell/61132c05eaddb8bd63883776401b6d6e.js&quot;&gt;&lt;/script&gt;
  103.  &lt;/div&gt;
  104. &lt;/details&gt;
  105. &lt;p&gt;Microsoft&#39;s Power Virtual Agents (PVA) is consistently bringing forward new tools and features to empower bot developers. The latest addition, still in preview, is the &quot;Send HTTP request&quot; node. In the past, developers had to rely on PowerAutomate to make these HTTP requests, but this new feature simplifies the entire process. Here&#39;s an exploration into the feature, along with a couple of challenges I faced and their solutions.&lt;/p&gt;
  106. &lt;h2 id=&quot;setting-up-the-send-http-request-node&quot;&gt;Setting Up the Send HTTP Request Node&lt;/h2&gt;
  107. &lt;p&gt;To integrate this new node, follow the steps below:&lt;/p&gt;
  108. &lt;ol&gt;
  109. &lt;li&gt;&lt;strong&gt;Inserting the Node&lt;/strong&gt;: Begin by clicking on the plus icon within your PVA canvas.&lt;/li&gt;
  110. &lt;li&gt;&lt;strong&gt;Navigating to the Feature&lt;/strong&gt;: Click on &quot;Advanced&quot; and select the &quot;Send HTTP request&quot; option.&lt;/li&gt;
  111. &lt;li&gt;&lt;strong&gt;Configuring the Node&lt;/strong&gt;:&lt;ul&gt;
  112. &lt;li&gt;&lt;em&gt;URL&lt;/em&gt;: Specify the URL endpoint you want to communicate with.&lt;/li&gt;
  113. &lt;li&gt;&lt;em&gt;HTTP Action&lt;/em&gt;: Choose the appropriate HTTP action (GET, POST, etc.).&lt;/li&gt;
  114. &lt;li&gt;&lt;em&gt;Response Type and Variable Name&lt;/em&gt;: Define the response type (JSON, String, etc.) and assign a variable name for the response data.&lt;/li&gt;
  115. &lt;li&gt;&lt;em&gt;HTTP Headers and Body Value&lt;/em&gt;: Add any required headers. If your request needs a body, especially for POST, PUT, etc., fill it in appropriately.&lt;/li&gt;
  116. &lt;li&gt;&lt;em&gt;Error Handling&lt;/em&gt;: Choose between &quot;raise on error&quot; (which stops the bot) or &quot;continue on error&quot;.&lt;/li&gt;
  117. &lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;challenges-and-solutions&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiuTLjzGl9fcPKk0I_5wR91-X3ztzmOinXEl4Txw3-DTo4wmDK8WaBzGhgtFe6WII7CxJGPqKBOiDZn-l44H9u9Y_Sg2IqHAsr2jjcHepcZmjBo476b8DV_cZng0Nnlbr-VCpYq5pEIZ-Rph4unJ0vVnPWv0XnB2b1ftHBhTCME_OcegnQdocm3JAHog6x4&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;901&quot; data-original-width=&quot;1498&quot; height=&quot;384&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiuTLjzGl9fcPKk0I_5wR91-X3ztzmOinXEl4Txw3-DTo4wmDK8WaBzGhgtFe6WII7CxJGPqKBOiDZn-l44H9u9Y_Sg2IqHAsr2jjcHepcZmjBo476b8DV_cZng0Nnlbr-VCpYq5pEIZ-Rph4unJ0vVnPWv0XnB2b1ftHBhTCME_OcegnQdocm3JAHog6x4=w640-h384&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA Simple HTTP Get&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/h2&gt;&lt;h2 id=&quot;challenges-and-solutions&quot;&gt;Challenges and Solutions&lt;/h2&gt;
  118. &lt;h3 id=&quot;unexpected-json-encoding&quot;&gt;Unexpected JSON Encoding&lt;/h3&gt;
  119. &lt;p&gt;One peculiar issue I encountered was when attempting to POST an HTTP request using straight JSON as the body. The HTTP serializer they seem to be using (possibly the System.Text.Json.JsonSerializer.Serializer) treated the JSON output as a string, converting special characters like &lt;code&gt;&quot;&lt;/code&gt; to Unicode &lt;code&gt;\u0022&lt;/code&gt; and &lt;code&gt;&#39;&lt;/code&gt; to Unicode &lt;code&gt;\u0027&lt;/code&gt;. This causes hiccups if the receiving endpoint can&#39;t decode these Unicode characters properly.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiwFBHDkBqwE2jSCXFyZDLb5mJgMOdlw663zxeFpCoJYpCyzywxZgG7psTYc0Qt_UXBmJfqCIRwuLbV6FigEQxEn7dGiP71shi8yxBXq7HrKgL7N-wVuiltZmLjI2JguZ8-P3Z3etE41018jilywvf4E2hV65TZbz75D8ICWFAR00e1EV0AZKXpfdbnL25-&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;689&quot; data-original-width=&quot;320&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiwFBHDkBqwE2jSCXFyZDLb5mJgMOdlw663zxeFpCoJYpCyzywxZgG7psTYc0Qt_UXBmJfqCIRwuLbV6FigEQxEn7dGiP71shi8yxBXq7HrKgL7N-wVuiltZmLjI2JguZ8-P3Z3etE41018jilywvf4E2hV65TZbz75D8ICWFAR00e1EV0AZKXpfdbnL25-=w185-h400&quot; width=&quot;185&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - HTTP POST with JSON content&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi4fDqpVneWN2XsQAdYF4aVHGfliVqzIISKWdP0zsI3UXYFSH7QvIHNcTdLrd9YA1iMv0KqVUWzEKz0pvOehirjpLxz9MtETXYOHM-vwlf699SzQb1IptPd0VZtEhAVY4nfl56xsENEWh9BEkbCQOcI9EaaxfrQF3yQJXwsSnDpWmTZX34WzpSfPU48C6N5&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;213&quot; data-original-width=&quot;1138&quot; height=&quot;120&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi4fDqpVneWN2XsQAdYF4aVHGfliVqzIISKWdP0zsI3UXYFSH7QvIHNcTdLrd9YA1iMv0KqVUWzEKz0pvOehirjpLxz9MtETXYOHM-vwlf699SzQb1IptPd0VZtEhAVY4nfl56xsENEWh9BEkbCQOcI9EaaxfrQF3yQJXwsSnDpWmTZX34WzpSfPU48C6N5=w640-h120&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Beeceptor.com HTTP capture&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
  120. &lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: To workaround this, you can do one of the following:&lt;/p&gt;
  121. &lt;ul&gt;
  122. &lt;li&gt;Change the type from JSON to Formula&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiXQejKomV5Y8aSQMYA3UIckdnDy85ZL2Lax6474b3cfG7VDqFV_BO7cu8lXW68LETv7iQW3OxYAH2uhY4Qg_H3vEF9x7h8r3v9XjNI-zH2LwT_8ny1uypfeNIhtnuBXz5KKH0NpYdG9Qaf2YvhieSPgBlcKNSdARad6R0VjKJuTax7cfwbZ4nRBD8pxApR&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;592&quot; data-original-width=&quot;324&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiXQejKomV5Y8aSQMYA3UIckdnDy85ZL2Lax6474b3cfG7VDqFV_BO7cu8lXW68LETv7iQW3OxYAH2uhY4Qg_H3vEF9x7h8r3v9XjNI-zH2LwT_8ny1uypfeNIhtnuBXz5KKH0NpYdG9Qaf2YvhieSPgBlcKNSdARad6R0VjKJuTax7cfwbZ4nRBD8pxApR=w219-h400&quot; width=&quot;219&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - HTTP POST with JSON content editing formula&lt;br /&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiubOpZKXYpsWaHQbbwtg6WBjKPrhb9WSEP2gorHMlZuhx8nipuO_0J5c_vQn-DyRuizgJvHOvIWjU0o1i-penzPmFGiJG4sm5NwON9940V9CwViVjC9KDBfREjX7-vOAH3Z-wCyWpVPibnlNaonUzv3JQF9dmDATKPTOjb9Gz3gQqByERTc20wMk7j5qVJ&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;217&quot; data-original-width=&quot;1141&quot; height=&quot;122&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiubOpZKXYpsWaHQbbwtg6WBjKPrhb9WSEP2gorHMlZuhx8nipuO_0J5c_vQn-DyRuizgJvHOvIWjU0o1i-penzPmFGiJG4sm5NwON9940V9CwViVjC9KDBfREjX7-vOAH3Z-wCyWpVPibnlNaonUzv3JQF9dmDATKPTOjb9Gz3gQqByERTc20wMk7j5qVJ=w640-h122&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Beeceptor.com HTTP capture&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;ul&gt;
  123. &lt;li&gt;Change the Body option from &quot;JSON content&quot; to &quot;RAW content&quot; and set the content type as &#39;application/json&#39;.&lt;/li&gt;
  124. &lt;/ul&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgojvq--iF1gfBXlLRmGvtR-eFbolQdt1W_doG84CR-Iw_XRtff6jVcs0wPadUHeTJEEJnF1emX3Ljj7C4wbKKMWAH3DCZ3QErNMCq23f0LGvCJnu4SbubPudCTbZM9cvTQ9pseaeYeeTsupHHslWSs_fzlr643ttwXDoSESzOlY9twxCRgLUihLO2ihM0_&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;555&quot; data-original-width=&quot;340&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgojvq--iF1gfBXlLRmGvtR-eFbolQdt1W_doG84CR-Iw_XRtff6jVcs0wPadUHeTJEEJnF1emX3Ljj7C4wbKKMWAH3DCZ3QErNMCq23f0LGvCJnu4SbubPudCTbZM9cvTQ9pseaeYeeTsupHHslWSs_fzlr643ttwXDoSESzOlY9twxCRgLUihLO2ihM0_=w245-h400&quot; width=&quot;245&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA - HTTP POST with Raw content&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjHfv-rmWm2Q5edP8eKHmmpLTQLngLNsA1tXytI4ZpSxcMQXPz9-3gmkNJ7H10XE7w1on3we09bXXJ1p1f8LXNRrTx5NEp-C1Crx2fqvXGhSdGzCMtp2KfZvis_ojL2oiqwXcVX6YQwqRQpH4_ovti02ridb__sL3_Mo-qp1Sua8C_wSH1tkkATyIJNCcE5&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;217&quot; data-original-width=&quot;1141&quot; height=&quot;122&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjHfv-rmWm2Q5edP8eKHmmpLTQLngLNsA1tXytI4ZpSxcMQXPz9-3gmkNJ7H10XE7w1on3we09bXXJ1p1f8LXNRrTx5NEp-C1Crx2fqvXGhSdGzCMtp2KfZvis_ojL2oiqwXcVX6YQwqRQpH4_ovti02ridb__sL3_Mo-qp1Sua8C_wSH1tkkATyIJNCcE5=w640-h122&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Beeceptor.com HTTP capture&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style=&quot;-webkit-text-size-adjust: auto;&quot;&gt;
  125.  # Didn&#39;t like the original text comparing the results, had ChatGPT rewrite
  126.  &lt;details&gt;
  127.  &lt;summary&gt;Prompt (Expand to see prompt used)&lt;/summary&gt;
  128.  &lt;div class=&quot;prompt&quot;&gt;
  129.    &lt;script src=&quot;https://gist.github.com/KevinVoell/c43316fae8bfeea663d99b499bac66e0.js&quot;&gt;&lt;/script&gt;
  130.  &lt;/div&gt;
  131. &lt;/details&gt;
  132.  
  133.  When testing the adjustments and dispatching requests to Beeceptor.com, the effects on the request body were clear:&lt;/p&gt;&lt;ul style=&quot;-webkit-text-size-adjust: auto;&quot;&gt;&lt;li&gt;Utilizing the default &quot;JSON content&quot; option led to the encoding of special characters.&lt;/li&gt;&lt;li&gt;On the other hand, two solutions surfaced:&lt;ol&gt;&lt;li&gt;Switching to &quot;RAW content&quot; preserved the original JSON structure without any undesired encoding.&lt;/li&gt;&lt;li&gt;Keeping &quot;JSON content&quot; but using a formula also prevented the encoding issues.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;misleading-error-with-incorrect-response-type&quot;&gt;Misleading Error with Incorrect Response Type&lt;/h3&gt;
  134. &lt;p&gt;Another stumble was setting the Response data type. Initially, I had it set to String, even though the actual response was a JSON object. I presumed it&#39;d simply store the entire body into the string. To my surprise, this setup caused the bot to reply with &quot;Sorry, something went wrong. Error code: SystemError&quot;—not very elucidating.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjHra0cCBjNNNUX1yOQVC4Y0v4NBN-Muzm33I9jpI98s-2LZ0UEyjjso-oEBS6Cz9Pj2K5SE1RKAw2ruuJ9U8V59m_gBZU8UqjnaNxwQaqqF7TzVaf8myzngpximR3lDXBqpUw9a4sKU02BuqdU7jTM4SeH24zySKF1NLJuVhE3cl9Oij0uDGHn9-dYwD0j&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;901&quot; data-original-width=&quot;1498&quot; height=&quot;384&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjHra0cCBjNNNUX1yOQVC4Y0v4NBN-Muzm33I9jpI98s-2LZ0UEyjjso-oEBS6Cz9Pj2K5SE1RKAw2ruuJ9U8V59m_gBZU8UqjnaNxwQaqqF7TzVaf8myzngpximR3lDXBqpUw9a4sKU02BuqdU7jTM4SeH24zySKF1NLJuVhE3cl9Oij0uDGHn9-dYwD0j=w640-h384&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
  135. &lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: After some head-scratching, I tried the &quot;from sample data&quot; feature to set the response type. Lo and behold, the bot sprang back to action, functioning seamlessly.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhDArG9_wao5MVzqO-YIXbTVRtVnJ5onbGLCeccMGqi6Upyo-l9w8Q1UwW9vbzi9E5QpdSMuXm8_gVKAgOdP6W_vieP8ukQU709ywhnOm3lolI4WAupEUrskUTr3N8N3-m6qhMJKppqcuAxKrFNmj3ItvMOmF97uI_WIingfpDmXMBwwPSu8Sxfcw8rP962&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;901&quot; data-original-width=&quot;1498&quot; height=&quot;384&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhDArG9_wao5MVzqO-YIXbTVRtVnJ5onbGLCeccMGqi6Upyo-l9w8Q1UwW9vbzi9E5QpdSMuXm8_gVKAgOdP6W_vieP8ukQU709ywhnOm3lolI4WAupEUrskUTr3N8N3-m6qhMJKppqcuAxKrFNmj3ItvMOmF97uI_WIingfpDmXMBwwPSu8Sxfcw8rP962=w640-h384&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
  136. &lt;h2 id=&quot;concluding-thoughts&quot;&gt;Concluding Thoughts&lt;/h2&gt;
  137. &lt;p&gt;The Send HTTP request node is a significant leap towards more streamlined bot-building in PVA. By removing the dependency on PowerAutomate for HTTP actions, this feature adds another layer of versatility and convenience. As with any new feature, there are growing pains, but solutions aren&#39;t far behind. Keep an eye out for more of our blogs diving deeper into PVA&#39;s evolving landscape.&lt;/p&gt;
  138. &lt;hr /&gt;
  139. &lt;p&gt;This feature is in preview, so functionalities and behaviors may change over time.&lt;/p&gt;
  140. </content><link rel='replies' type='application/atom+xml' href='http://www.functionprologue.com/feeds/6908108205495800154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2898752564976177498&amp;postID=6908108205495800154&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/6908108205495800154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/6908108205495800154'/><link rel='alternate' type='text/html' href='http://www.functionprologue.com/2023/10/exploring-power-virtual-agents-new.html' title='Exploring Power Virtual Agents&#39; New (Preview) Feature: The Send HTTP Request Node'/><author><name>Kevin Voell</name><uri>http://www.blogger.com/profile/01460870577820039832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRFZc5ucTlZ_pgseYIOlvC1VC8ws3I28mqfkSYeGLcoAREWSEheUKkNrLn6Z0Pk2zaAdN4noCZusdHBDB9I37fLmpNevZkEgIOBiKZ2TvLS-LfCzcurFKhLtDKbozQz-l9yagxKR7ajyBh18jq3iWw3K-yrkX2qeNbS16nBkbVURvR0rA/s220/about-1.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiuTLjzGl9fcPKk0I_5wR91-X3ztzmOinXEl4Txw3-DTo4wmDK8WaBzGhgtFe6WII7CxJGPqKBOiDZn-l44H9u9Y_Sg2IqHAsr2jjcHepcZmjBo476b8DV_cZng0Nnlbr-VCpYq5pEIZ-Rph4unJ0vVnPWv0XnB2b1ftHBhTCME_OcegnQdocm3JAHog6x4=s72-w640-h384-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898752564976177498.post-9020556764335705343</id><published>2023-10-20T17:40:00.003-07:00</published><updated>2023-10-20T19:06:18.306-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Artificial Intelligence"/><category scheme="http://www.blogger.com/atom/ns#" term="Conversational AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Generative AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Power Virtual Agents"/><category scheme="http://www.blogger.com/atom/ns#" term="PVA"/><title type='text'> Adding Input Parameters to Microsoft Power Virtual Agents Topics</title><content type='html'>&lt;details&gt;
  141.  &lt;summary&gt;Prompt (Expand to see prompt used)&lt;/summary&gt;
  142.  &lt;div class=&quot;prompt&quot;&gt;
  143.    &lt;script src=&quot;https://gist.github.com/KevinVoell/cfb57dd4747eb383c8435d91a934d995.js&quot;&gt;&lt;/script&gt;
  144.  &lt;/div&gt;
  145. &lt;/details&gt;
  146. # I thought the introduction could use more explanation of how input parameters are normally created, so here&#39;s my additional prompt
  147. &lt;details&gt;
  148.  &lt;summary&gt;Prompt (Expand to see prompt used)&lt;/summary&gt;
  149.  &lt;div class=&quot;prompt&quot;&gt;
  150.    &lt;script src=&quot;https://gist.github.com/KevinVoell/e70972af66e0aef1c95357471b058e37.js&quot;&gt;&lt;/script&gt;
  151.  &lt;/div&gt;
  152. &lt;/details&gt;
  153. &lt;p&gt;&lt;strong&gt;Introducing Input Parameters in PowerVirtualAgents: Beyond the Usual Route&lt;/strong&gt;&lt;/p&gt;
  154. &lt;p&gt;In the world of Power Virtual Agents, creating a seamless flow for data between various topics is both an art and a science. The conventional wisdom is to employ a question node to set up an input parameter. By designating the variable to &quot;Receive values from other topics&quot;, we can ensure the topic procures the necessary information, even directly from the user when the parameter isn&#39;t specified. It&#39;s an intuitive approach, particularly when the parameter is imperative for the conversation to progress.&lt;/p&gt;
  155. &lt;p&gt;However, this brings us to an interesting quandary: What happens when we&#39;re content with a default value, specifically the Blank()? What if the input parameter isn&#39;t always mandatory and we want to circumvent that additional user prompt? The answer lies in an alternative, nuanced approach that we&#39;re delving into today.&lt;/p&gt;
  156. &lt;p&gt;Join us as we navigate the subtleties of Power Virtual Agents, and discover how to enhance our bot&#39;s flexibility without overburdening the user.&lt;/p&gt;
  157. &lt;hr /&gt;
  158. &lt;p&gt;Input parameters are a useful feature in Microsoft Power Virtual Agents that allow you to pass data when calling topics from other topics. It provides more flexibility and dynamism in shaping user experiences. Today, we&#39;ll guide you through the process of adding these parameters via YAML file editing. &lt;/p&gt;
  159. &lt;p&gt;&lt;strong&gt;Setting up a Topic with Input Parameters:&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjGmLgP4YbTofi7byUCc2S9sPKBFn3zQ2PnInxUDf1pV2PDZfB8Hfxl41v5GpXZOij7VyJ5AbE4kBasyk8TbAqgE2BeiJd8IYE8NCjt-8iZy2Rjcy8gq4g5NuDktx_teUuwFYTSG6cqD299Yog3mc9bvm9318CfccZtThjUgGmmJ9qw1_bwc6C4o46GOBmk&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;829&quot; data-original-width=&quot;1099&quot; height=&quot;445&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjGmLgP4YbTofi7byUCc2S9sPKBFn3zQ2PnInxUDf1pV2PDZfB8Hfxl41v5GpXZOij7VyJ5AbE4kBasyk8TbAqgE2BeiJd8IYE8NCjt-8iZy2Rjcy8gq4g5NuDktx_teUuwFYTSG6cqD299Yog3mc9bvm9318CfccZtThjUgGmmJ9qw1_bwc6C4o46GOBmk=w589-h445&quot; width=&quot;589&quot; /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  160. &lt;p&gt;Here&#39;s how you can set it up:&lt;/p&gt;
  161. &lt;ol&gt;
  162. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Create a New Blank Topic&lt;/strong&gt;: Begin by initiating a new topic. &lt;/p&gt;
  163. &lt;/li&gt;
  164. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Change Trigger Type to Redirect&lt;/strong&gt;: Instead of the default trigger type, opt for the &#39;redirect&#39; type. &lt;s&gt;This allows your topic to be initiated from another topic, passing in any necessary data.&lt;/s&gt;&lt;/p&gt;
  165.  &lt;p&gt;# A Topic doesn&#39;t need to be explicitly setup with a redirect trigger in order to be called from another topic, it just ensures that the topic isn&#39;t accidentally called form a trigger phrase. Additionally you can declare input parameters on any trigger, I think, haven&#39;t tried all trigger types yet.&lt;/p&gt;
  166. &lt;/li&gt;
  167. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Open Code Editor for YAML&lt;/strong&gt;: Access the YAML editor in Power Virtual Agents to manually edit the topic definition.&lt;/p&gt;
  168. &lt;/li&gt;
  169. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Paste the Example YAML into Editor&lt;/strong&gt;:&lt;/p&gt;
  170. &lt;script src=&quot;https://gist.github.com/KevinVoell/c211591a0f2985214285aa1d7e9151b9.js&quot;&gt;&lt;/script&gt;
  171. &lt;/li&gt;
  172. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Close the Code Editor&lt;/strong&gt;: Once you&#39;ve added your input parameter, save and close the editor.&lt;/p&gt;
  173. &lt;/li&gt;
  174. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Add Conditions Based on the New Input Parameter&lt;/strong&gt;: Now, you can set conditions in your topic that react differently depending on the value of &lt;code&gt;DisplayOutput&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
  175. &lt;/ol&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEitduiNd1Z5eqHNEMZaiMphjnz7aCVkWrQJblYCwBw3CuKppiRkXgJhHXXOSQtbfB8K_p4lpdqWjHcjcOj1gdz-CL9eq8if3wcr-FFPhKd-H--3jTe3a0wgfdvV0Ob3W8nBpf6C-trUUXVb8Li7qGp_VePtpYhL2D4yJyGKJW1T6svCnbYO03Ws76ZLhBPz&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;267&quot; data-original-width=&quot;339&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEitduiNd1Z5eqHNEMZaiMphjnz7aCVkWrQJblYCwBw3CuKppiRkXgJhHXXOSQtbfB8K_p4lpdqWjHcjcOj1gdz-CL9eq8if3wcr-FFPhKd-H--3jTe3a0wgfdvV0Ob3W8nBpf6C-trUUXVb8Li7qGp_VePtpYhL2D4yJyGKJW1T6svCnbYO03Ws76ZLhBPz&quot; width=&quot;305&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PVA Variables window after adding Input parameter&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
  176. &lt;p&gt;The final YAML structure should resemble:&lt;/p&gt;
  177. &lt;script src=&quot;https://gist.github.com/KevinVoell/dd04b98aebabb6259b3f06ebe78d55e3.js&quot;&gt;&lt;/script&gt;
  178. &lt;p&gt;&lt;strong&gt;Calling Your New Topic with Input Parameters:&lt;/strong&gt;&lt;/p&gt;
  179. &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgHqcFGibuO2etgzpBSerQfjkCD7BYoZD0WON6xcCsjv63FcROf1KIu9_i2zmWsrtIkh5Ty6h3OhJz5ZkfvgkOGHEjYKnFrEPZMA_SLnvDPPUmq1MVppkrTP9WE11CpNPZ-MkMQtIpN0YSM-POjFc5tG3MyBUj8uc3ktkba7uWIlYcRaJQ45vlMXVqYDE7i&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;647&quot; data-original-width=&quot;661&quot; height=&quot;489&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgHqcFGibuO2etgzpBSerQfjkCD7BYoZD0WON6xcCsjv63FcROf1KIu9_i2zmWsrtIkh5Ty6h3OhJz5ZkfvgkOGHEjYKnFrEPZMA_SLnvDPPUmq1MVppkrTP9WE11CpNPZ-MkMQtIpN0YSM-POjFc5tG3MyBUj8uc3ktkba7uWIlYcRaJQ45vlMXVqYDE7i=w499-h489&quot; width=&quot;499&quot; /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;After setting up a topic with input parameters, you can call it from another topic. Here’s how:&lt;p&gt;&lt;/p&gt;
  180. &lt;ol&gt;
  181. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Create a New Topic&lt;/strong&gt;: Start by creating a new topic from which you’ll call your redirect topic.&lt;/p&gt;
  182. &lt;/li&gt;
  183. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Add a Trigger Phrase&lt;/strong&gt;: Add a phrase which, when uttered by a user, will trigger this topic.&lt;/p&gt;
  184. &lt;/li&gt;
  185. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Add a New Node to Redirect&lt;/strong&gt;: Add a node in your flow that redirects to the topic with the input parameter.&lt;/p&gt;
  186. &lt;/li&gt;
  187. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Click on &quot;Add Input&quot; and Select Your Input Parameter&lt;/strong&gt;: From the options, select &#39;DisplayOutput&#39;.&lt;/p&gt;
  188. &lt;/li&gt;
  189. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Provide the Value to Pass to the Input Parameter&lt;/strong&gt;: For our example, we’ll pass a value of &#39;false&#39; to the &#39;DisplayOutput&#39; parameter.&lt;/p&gt;
  190. &lt;/li&gt;
  191. &lt;/ol&gt;
  192. &lt;p&gt;The YAML for this calling structure will look something like:&lt;/p&gt;
  193. &lt;script src=&quot;https://gist.github.com/KevinVoell/8ff56965d2ef90bf381d51d255c4a2c5.js&quot;&gt;&lt;/script&gt;
  194. &lt;p&gt;That&#39;s it! You&#39;ve now successfully added input parameters to a Power Virtual Agents topic via YAML editing and called it from another topic. This provides a robust way to manage inter-topic data flow and make your bots even more interactive.&lt;/p&gt;
  195. &lt;p&gt;# Forgot to instruct the AI to create a section to see the bot in action, so here we go&lt;/p&gt;
  196. &lt;details&gt;
  197.  &lt;summary&gt;Prompt (Expand to see prompt used)&lt;/summary&gt;
  198.  &lt;div class=&quot;prompt&quot;&gt;
  199.    &lt;script src=&quot;https://gist.github.com/KevinVoell/f8eb8cd29fac54fd9bada8b6b1ed428e.js&quot;&gt;&lt;/script&gt;
  200.  &lt;/div&gt;
  201. &lt;/details&gt;
  202. &lt;h3 id=&quot;-the-bot-in-action-visualizing-the-input-parameter-difference-&quot;&gt;&lt;strong&gt;The Bot in Action: Visualizing the Input Parameter Difference&lt;/strong&gt;&lt;/h3&gt;
  203. &lt;p&gt;Having dived deep into the nuts and bolts of Power Virtual Agents, the real charm is in witnessing the subtle yet impactful differences in the user experience. Let&#39;s see how the bot behaves differently based on our input parameters.&lt;/p&gt;
  204. &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi_gbuT5nY8UIGNkqpY2kKVhs8gtGwpv2Yp-GbKnhThjf79JpD6GG4wmBXHvO5DYyDuW7LBL_dSSWaoHr-C0XFW1hj_KH6cnZCYv2yUumGI5CcqF_oPoIZoppFpDJ0u4XpncPjaglAaEiAbfE6AHM0Fh4Dw8rvPwQ1SB_Ak7Zne7pHO0NoKM3_5Dv2WnNuG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;750&quot; data-original-width=&quot;361&quot; height=&quot;692&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi_gbuT5nY8UIGNkqpY2kKVhs8gtGwpv2Yp-GbKnhThjf79JpD6GG4wmBXHvO5DYyDuW7LBL_dSSWaoHr-C0XFW1hj_KH6cnZCYv2yUumGI5CcqF_oPoIZoppFpDJ0u4XpncPjaglAaEiAbfE6AHM0Fh4Dw8rvPwQ1SB_Ak7Zne7pHO0NoKM3_5Dv2WnNuG=w334-h692&quot; width=&quot;334&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; We&#39;ve set up two distinct triggers to test our bot&#39;s response based on the &lt;code&gt;DisplayOutput&lt;/code&gt; parameter.&lt;p&gt;&lt;/p&gt;
  205. &lt;ol&gt;
  206. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Testing &quot;Redirect with Output&quot;&lt;/strong&gt;&lt;/p&gt;
  207. &lt;p&gt;&lt;strong&gt;User Interaction&lt;/strong&gt;: The user types in, &quot;Test redirect with output.&quot;&lt;/p&gt;
  208. &lt;p&gt;&lt;strong&gt;Bot&#39;s Response&lt;/strong&gt;: &lt;/p&gt;
  209. &lt;pre&gt;&lt;code&gt;Hello &lt;span class=&quot;hljs-keyword&quot;&gt;from&lt;/span&gt; RedirectTopic
  210. &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here, our bot provides feedback upon redirection. The &lt;code&gt;DisplayOutput&lt;/code&gt; parameter is presumably set to &#39;true&#39;, prompting the bot to display the message.&lt;/p&gt;
  211. &lt;/li&gt;
  212. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Testing &quot;Silent Redirect&quot;&lt;/strong&gt;&lt;/p&gt;
  213. &lt;p&gt;&lt;strong&gt;User Interaction&lt;/strong&gt;: The user enters, &quot;Test silent redirect.&quot;&lt;/p&gt;
  214. &lt;p&gt;&lt;strong&gt;Bot&#39;s Response&lt;/strong&gt;: &lt;/p&gt;
  215. &lt;pre&gt;&lt;code&gt;[No message displayed]
  216. &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this interaction, the bot stays silent after redirection. This indicates that our &lt;code&gt;DisplayOutput&lt;/code&gt; parameter is set to &#39;false&#39;, instructing the bot not to display any message post-redirect.&lt;/p&gt;
  217. &lt;/li&gt;
  218. &lt;/ol&gt;
  219. &lt;hr /&gt;
  220. &lt;p&gt;&lt;strong&gt;Analyzing the Outcomes&lt;/strong&gt;: &lt;/p&gt;
  221. &lt;p&gt;This real-time experiment showcases the agility of our bot, driven by input parameters. While the distinction might seem minor, it has profound implications for user experience:&lt;/p&gt;
  222. &lt;ul&gt;
  223. &lt;li&gt;&lt;strong&gt;User Clarity&lt;/strong&gt;: The explicit &quot;Hello from RedirectTopic&quot; message can be reassuring for users, indicating that the bot has processed their request.
  224. &lt;/li&gt;
  225. &lt;li&gt;&lt;strong&gt;Efficiency&lt;/strong&gt;: The silent redirect, on the other hand, is swift and efficient, especially for tasks that need no extraneous feedback.
  226. &lt;/li&gt;
  227. &lt;/ul&gt;
  228. &lt;p&gt;Engaging with the bot using these two triggers vividly brings out the underlying mechanism we&#39;ve set up. It&#39;s a testament to how fine-tuned control over bot responses can lead to varied and tailored user experiences.&lt;/p&gt;
  229. &lt;hr /&gt;
  230. &lt;p&gt;In essence, this hands-on interaction underlines the beauty of Power Virtual Agents: the platform’s capability to cater to diverse user needs, all governed by a simple parameter change in the background.&lt;/p&gt;
  231. </content><link rel='replies' type='application/atom+xml' href='http://www.functionprologue.com/feeds/9020556764335705343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2898752564976177498&amp;postID=9020556764335705343&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/9020556764335705343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/9020556764335705343'/><link rel='alternate' type='text/html' href='http://www.functionprologue.com/2023/10/adding-input-parameters-to-microsoft.html' title=' Adding Input Parameters to Microsoft Power Virtual Agents Topics'/><author><name>Kevin Voell</name><uri>http://www.blogger.com/profile/01460870577820039832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRFZc5ucTlZ_pgseYIOlvC1VC8ws3I28mqfkSYeGLcoAREWSEheUKkNrLn6Z0Pk2zaAdN4noCZusdHBDB9I37fLmpNevZkEgIOBiKZ2TvLS-LfCzcurFKhLtDKbozQz-l9yagxKR7ajyBh18jq3iWw3K-yrkX2qeNbS16nBkbVURvR0rA/s220/about-1.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjGmLgP4YbTofi7byUCc2S9sPKBFn3zQ2PnInxUDf1pV2PDZfB8Hfxl41v5GpXZOij7VyJ5AbE4kBasyk8TbAqgE2BeiJd8IYE8NCjt-8iZy2Rjcy8gq4g5NuDktx_teUuwFYTSG6cqD299Yog3mc9bvm9318CfccZtThjUgGmmJ9qw1_bwc6C4o46GOBmk=s72-w589-h445-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898752564976177498.post-7006954077256705956</id><published>2023-10-15T17:19:00.003-07:00</published><updated>2023-10-20T14:35:40.142-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Artificial Intelligence"/><category scheme="http://www.blogger.com/atom/ns#" term="Conversational AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Generative AI"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Power Virtual Agents"/><category scheme="http://www.blogger.com/atom/ns#" term="Power Virtual Agents"/><category scheme="http://www.blogger.com/atom/ns#" term="PVA"/><title type='text'>Boosting Website Interactivity with Power Virtual Agents (PVA)</title><content type='html'>
  232. &lt;style&gt;
  233.  
  234. &lt;/style&gt;
  235. &lt;details&gt;
  236.  &lt;summary&gt;Prompt (Expand to see prompt used)&lt;/summary&gt;
  237. &lt;div class=&quot;prompt&quot;&gt;
  238. &lt;script src=&quot;https://gist.github.com/KevinVoell/7bdbe305b7212ee874055e633b1dd9f8.js&quot;&gt;&lt;/script&gt;
  239. &lt;/div&gt;
  240. &lt;/details&gt;
  241.  
  242. &lt;p&gt;In the ever-evolving landscape of AI-driven web experiences, Microsoft&#39;s Power Virtual Agents (PVA) is taking the lead, pushing the boundaries of what&#39;s possible. Imagine a user landing on your website, curious about logging in, exploring products, or even customizing a piece of furniture. With PVA, these interactions go beyond mere text-based responses. Instead, they become dynamic engagements, driving visual highlights and actions on the web page. Let&#39;s delve into this exciting confluence of PVA and web development.&lt;/p&gt;
  243. &lt;h3 id=&quot;-setting-up-pva-topics-&quot;&gt;&lt;strong&gt;Setting Up PVA Topics&lt;/strong&gt;&lt;/h3&gt;
  244. &lt;p&gt;For the scope of this tutorial, let&#39;s consider a user might ask:&lt;/p&gt;
  245. &lt;ol&gt;
  246. &lt;li&gt;How do I login?&lt;/li&gt;
  247. &lt;li&gt;What chairs do you sell?&lt;/li&gt;
  248. &lt;li&gt;What are your customers saying?&lt;/li&gt;
  249. &lt;li&gt;How do I design my own couch?&lt;/li&gt;
  250. &lt;/ol&gt;
  251. &lt;p&gt;Now, instead of just sending back a text message, PVA, through configured topics, can send an event with a JSON payload. This payload, containing special instructions, can direct the website to perform certain actions. &lt;/p&gt;
  252. &lt;h3 id=&quot;-interacting-via-javascript-&quot;&gt;&lt;strong&gt;Interacting via JavaScript&lt;/strong&gt;&lt;/h3&gt;
  253. &lt;p&gt;The heart of this interaction lies in the JavaScript, especially within the &lt;code&gt;window.onload&lt;/code&gt; function, as this is where the PVA bot is initialized and set to handle incoming events. Let&#39;s dissect this:&lt;/p&gt;
  254. &lt;script src=&quot;https://gist.github.com/KevinVoell/5a6f34b27d2682e963f3fa0ca9c1ef0a.js&quot;&gt;&lt;/script&gt;
  255. &lt;ol&gt;
  256. &lt;li&gt;&lt;strong&gt;Bot Initialization&lt;/strong&gt;: The bot endpoint is fetched, and the PVA bot is rendered onto the website.&lt;/li&gt;
  257. &lt;li&gt;&lt;strong&gt;Handling Events&lt;/strong&gt;: As soon as the bot connection is established (&lt;code&gt;DIRECT_LINE/CONNECT_FULFILLED&lt;/code&gt;), it dispatches an event to start the conversation. When the bot sends back an event (&lt;code&gt;DIRECT_LINE/INCOMING_ACTIVITY&lt;/code&gt;), the corresponding action, whether it&#39;s highlighting an element or adding to cart, is executed.&lt;/li&gt;
  258. &lt;/ol&gt;
  259. &lt;h3 id=&quot;-a-glimpse-into-pva-s-yaml-configuration-&quot;&gt;&lt;strong&gt;A Glimpse into PVA&#39;s YAML Configuration&lt;/strong&gt;&lt;/h3&gt;
  260. &lt;p&gt;But how does the PVA bot know what event to send? The answer lies in the topic configuration. Take a look at the YAML for the &quot;Login&quot; topic:&lt;/p&gt;
  261. &lt;script src=&quot;https://gist.github.com/KevinVoell/bc7f540dba7f81a1335b63a13fbfb983.js&quot;&gt;&lt;/script&gt;
  262. &lt;p&gt;Upon the query &quot;How do I login?&quot;, PVA sends back an &lt;code&gt;EventActivity&lt;/code&gt; named &lt;code&gt;ShowElement&lt;/code&gt; to highlight the login element on the website.&lt;/p&gt;
  263. &lt;h3 id=&quot;-interactive-experience-in-action-&quot;&gt;&lt;strong&gt;Interactive Experience in Action&lt;/strong&gt;&lt;/h3&gt;
  264. &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjwBACwrIqsvFR6ZttyXBQPQjMc1zWc940rm2zQ5Yxx_jNVk9hzfWeJmUui0o01Wqv7SEulPlUFYU4IRlh7U2EyQF5YedP_WZOaLMMiPCPOx2tSkapX6-IcTaHRYBNBKP9qsrYlE8Syz1tRd9G1vDr9oPT5k7Y9QOguPYdN35U0fvT0R5rrVzCKi3Z_WrKX&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;696&quot; data-original-width=&quot;1217&quot; height=&quot;391&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjwBACwrIqsvFR6ZttyXBQPQjMc1zWc940rm2zQ5Yxx_jNVk9hzfWeJmUui0o01Wqv7SEulPlUFYU4IRlh7U2EyQF5YedP_WZOaLMMiPCPOx2tSkapX6-IcTaHRYBNBKP9qsrYlE8Syz1tRd9G1vDr9oPT5k7Y9QOguPYdN35U0fvT0R5rrVzCKi3Z_WrKX=w630-h391&quot; width=&quot;630&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Witness this seamless interaction for yourself. Dive into the full demo &lt;a href=&quot;http://static.functionprologue.com/Examples/PVA/WebsiteControl/index.html&quot;&gt;here&lt;/a&gt;. And if you&#39;re keen on getting hands-on, the complete code repository awaits you &lt;a href=&quot;https://github.com/KevinVoell/PVAWebsiteInteraction&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  265. &lt;h3 id=&quot;-in-conclusion-&quot;&gt;&lt;strong&gt;In Conclusion&lt;/strong&gt;&lt;/h3&gt;
  266. &lt;p&gt;The integration of Power Virtual Agents with websites represents a leap in interactive web experiences. With PVA at the helm, every website visit becomes a dynamic, engaging journey, making AI-driven interactivity not just a luxury but the new norm.&lt;/p&gt;
  267. </content><link rel='replies' type='application/atom+xml' href='http://www.functionprologue.com/feeds/7006954077256705956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2898752564976177498&amp;postID=7006954077256705956&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/7006954077256705956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/7006954077256705956'/><link rel='alternate' type='text/html' href='http://www.functionprologue.com/2023/10/boosting-website-interactivity-with.html' title='Boosting Website Interactivity with Power Virtual Agents (PVA)'/><author><name>Kevin Voell</name><uri>http://www.blogger.com/profile/01460870577820039832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRFZc5ucTlZ_pgseYIOlvC1VC8ws3I28mqfkSYeGLcoAREWSEheUKkNrLn6Z0Pk2zaAdN4noCZusdHBDB9I37fLmpNevZkEgIOBiKZ2TvLS-LfCzcurFKhLtDKbozQz-l9yagxKR7ajyBh18jq3iWw3K-yrkX2qeNbS16nBkbVURvR0rA/s220/about-1.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjwBACwrIqsvFR6ZttyXBQPQjMc1zWc940rm2zQ5Yxx_jNVk9hzfWeJmUui0o01Wqv7SEulPlUFYU4IRlh7U2EyQF5YedP_WZOaLMMiPCPOx2tSkapX6-IcTaHRYBNBKP9qsrYlE8Syz1tRd9G1vDr9oPT5k7Y9QOguPYdN35U0fvT0R5rrVzCKi3Z_WrKX=s72-w630-h391-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898752564976177498.post-3503891909800594212</id><published>2023-10-14T17:05:00.004-07:00</published><updated>2023-10-20T17:48:29.862-07:00</updated><title type='text'>Welcome to the Future of Blogging: An AI-Powered Adventure!</title><content type='html'>&lt;details&gt;
  268.  &lt;summary&gt;Prompt (Expand to see prompt used)&lt;/summary&gt;
  269.  &lt;div class=&quot;prompt&quot;&gt;
  270.    &lt;script src=&quot;https://gist.github.com/KevinVoell/60d962290bc0a1e96e81a3e67cf40b12.js&quot;&gt;&lt;/script&gt;
  271.  &lt;/div&gt;
  272. &lt;/details&gt;
  273.  
  274. &lt;p&gt;Hello and welcome, dear readers!&lt;/p&gt;
  275. &lt;p&gt;I&amp;#39;m thrilled to introduce you to this cutting-edge endeavor. Our blog is a little different from what you might be used to. It&amp;#39;s authored by none other than ChatGPT, an advanced AI model designed by OpenAI. Yes, you read that right! The words you&amp;#39;re consuming right now are crafted not by a human, but by an intricate web of algorithms and data.&lt;/p&gt;
  276. &lt;h3 id=&quot;-transparency-is-key-&quot;&gt;&lt;strong&gt;Transparency is Key&lt;/strong&gt;&lt;/h3&gt;
  277. &lt;p&gt;As we embark on this journey, transparency remains a core principle. To maintain this:&lt;/p&gt;
  278. &lt;ul&gt;
  279. &lt;li&gt;&lt;p&gt;&lt;strong&gt;Every prompt&lt;/strong&gt; or question that is fed to ChatGPT will be displayed with a &lt;strong&gt;blue background&lt;/strong&gt;.&lt;/p&gt;
  280. &lt;/li&gt;
  281. &lt;li&gt;&lt;p&gt;The &lt;strong&gt;AI-generated response&lt;/strong&gt; (like the one you&amp;#39;re reading) will be showcased with a &lt;strong&gt;white background&lt;/strong&gt;.&lt;/p&gt;
  282. &lt;/li&gt;
  283. &lt;/ul&gt;
  284. &lt;p&gt;This color-coding is to ensure that you, our valued readers, can easily differentiate between human-input prompts and AI outputs.&lt;/p&gt;
  285. &lt;h3 id=&quot;-we-want-to-hear-from-you-&quot;&gt;&lt;strong&gt;We Want to Hear from YOU!&lt;/strong&gt;&lt;/h3&gt;
  286. &lt;p&gt;Your involvement doesn&amp;#39;t stop at mere reading. We actively seek your ideas, feedback, and even prompts! This platform isn&amp;#39;t just about AI showcasing its writing abilities; it&amp;#39;s also a space for collaboration, learning, and exploration.&lt;/p&gt;
  287. &lt;p&gt;What topics interest you? Which questions burn in your mind? Challenge ChatGPT, and let&amp;#39;s uncover the answers together.&lt;/p&gt;
  288. &lt;hr&gt;
  289. &lt;p&gt;Here&amp;#39;s to the fusion of human curiosity and AI capabilities! Dive in, and let&amp;#39;s craft a future brimming with knowledge and innovation.&lt;/p&gt;
  290. </content><link rel='replies' type='application/atom+xml' href='http://www.functionprologue.com/feeds/3503891909800594212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2898752564976177498&amp;postID=3503891909800594212&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/3503891909800594212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/3503891909800594212'/><link rel='alternate' type='text/html' href='http://www.functionprologue.com/2023/10/welcome-to-future-of-blogging-ai.html' title='Welcome to the Future of Blogging: An AI-Powered Adventure!'/><author><name>Kevin Voell</name><uri>http://www.blogger.com/profile/01460870577820039832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRFZc5ucTlZ_pgseYIOlvC1VC8ws3I28mqfkSYeGLcoAREWSEheUKkNrLn6Z0Pk2zaAdN4noCZusdHBDB9I37fLmpNevZkEgIOBiKZ2TvLS-LfCzcurFKhLtDKbozQz-l9yagxKR7ajyBh18jq3iWw3K-yrkX2qeNbS16nBkbVURvR0rA/s220/about-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898752564976177498.post-653350012892966748</id><published>2023-08-30T07:57:00.001-07:00</published><updated>2023-08-30T07:57:53.124-07:00</updated><title type='text'>Hello world!</title><content type='html'>&lt;script src=&quot;https://gist.github.com/KevinVoell/a6930f8111a09a3ba6ceced007d2dc33.js&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.functionprologue.com/feeds/653350012892966748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2898752564976177498&amp;postID=653350012892966748&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/653350012892966748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898752564976177498/posts/default/653350012892966748'/><link rel='alternate' type='text/html' href='http://www.functionprologue.com/2020/01/blog-post_8.html' title='Hello world!'/><author><name>Kevin Voell</name><uri>http://www.blogger.com/profile/01460870577820039832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRFZc5ucTlZ_pgseYIOlvC1VC8ws3I28mqfkSYeGLcoAREWSEheUKkNrLn6Z0Pk2zaAdN4noCZusdHBDB9I37fLmpNevZkEgIOBiKZ2TvLS-LfCzcurFKhLtDKbozQz-l9yagxKR7ajyBh18jq3iWw3K-yrkX2qeNbS16nBkbVURvR0rA/s220/about-1.jpg'/></author><thr:total>0</thr:total></entry></feed>

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid Atom 1.0" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=https%3A//www.functionprologue.com/feeds/posts/default

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda