diff --git a/src/Infrastructure/BotSharp.Abstraction/Browsing/IWebBrowser.cs b/src/Infrastructure/BotSharp.Abstraction/Browsing/IWebBrowser.cs index 376c7cac..f732b801 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Browsing/IWebBrowser.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Browsing/IWebBrowser.cs @@ -23,6 +23,6 @@ public interface IWebBrowser Task ExtractData(BrowserActionParams actionParams); Task EvaluateScript(string conversationId, string script); Task CloseBrowser(string conversationId); - Task SendHttpRequest(BrowserActionParams actionParams); + Task SendHttpRequest(HttpRequestParams actionParams); Task GetAttributeValue(MessageInfo message, ElementLocatingArgs location, BrowserActionResult result); } diff --git a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/BrowsingContextIn.cs b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/BrowsingContextIn.cs index f613738b..ff3b94f3 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/BrowsingContextIn.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/BrowsingContextIn.cs @@ -40,10 +40,4 @@ public class BrowsingContextIn [JsonPropertyName("direction")] public string? Direction { get; set; } - - /// - /// Http request payload - /// - [JsonPropertyName("payload")] - public string? Payload { get; set; } } diff --git a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/HttpRequestParams.cs b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/HttpRequestParams.cs new file mode 100644 index 00000000..2b8cc052 --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/HttpRequestParams.cs @@ -0,0 +1,25 @@ +using System.Net.Http; + +namespace BotSharp.Abstraction.Browsing.Models; + +public class HttpRequestParams +{ + [JsonPropertyName("url")] + public string Url { get; set; } = string.Empty; + + [JsonPropertyName("method")] + public HttpMethod Method { get; set; } + + /// + /// Http request payload + /// + [JsonPropertyName("payload")] + public string? Payload { get; set; } + + public HttpRequestParams(string url, HttpMethod method, string? payload = null) + { + Method = HttpMethod.Get; + Url = url; + Payload = payload; + } +} diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.HttpRequest.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.HttpRequest.cs index 404fd3c9..8d54a430 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.HttpRequest.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.HttpRequest.cs @@ -1,27 +1,34 @@ +using System.Net.Http; + namespace BotSharp.Plugin.WebDriver.Drivers.PlaywrightDriver; public partial class PlaywrightWebDriver { - public async Task SendHttpRequest(BrowserActionParams actionParams) + public async Task SendHttpRequest(HttpRequestParams args) { var result = new BrowserActionResult(); + + var body = args.Method == HttpMethod.Post ? + $"body: '{args.Payload}'" : string.Empty; + // Send AJAX request string script = $@" (async () => {{ - const response = await fetch('{actionParams.Context.Url}', {{ - method: 'POST', + const response = await fetch('{args.Url}', {{ + method: '{args.Method}', headers: {{ 'Content-Type': 'application/json' }}, - body: '{actionParams.Context.Payload}' + {body} }}); return await response.json(); }})(); "; + var conv = _services.GetRequiredService(); try { - var response = await EvaluateScript(actionParams.ConversationId, script); + var response = await EvaluateScript(conv.ConversationId, script); result.IsSuccess = true; result.Body = JsonSerializer.Serialize(response); } diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/HttpRequestFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/HttpRequestFn.cs index 17b84a1b..1e42df1f 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/HttpRequestFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/HttpRequestFn.cs @@ -17,11 +17,11 @@ public class HttpRequestFn : IFunctionCallback public async Task Execute(RoleDialogModel message) { var convService = _services.GetRequiredService(); - var args = JsonSerializer.Deserialize(message.FunctionArgs); + var args = JsonSerializer.Deserialize(message.FunctionArgs); var agentService = _services.GetRequiredService(); var agent = await agentService.LoadAgent(message.CurrentAgentId); - var result = await _browser.SendHttpRequest(new BrowserActionParams(agent, args, convService.ConversationId, message.MessageId)); + var result = await _browser.SendHttpRequest(args); message.Content = result.IsSuccess ? result.Body :