mirror of
https://github.com/bitwarden/server
synced 2026-01-07 19:13:50 +00:00
[PM-23575] Use the input text as question and avoid additional call to freshdesk (#6073)
This commit is contained in:
@@ -144,7 +144,7 @@ public class FreshdeskController : Controller
|
||||
|
||||
[HttpPost("webhook-onyx-ai")]
|
||||
public async Task<IActionResult> PostWebhookOnyxAi([FromQuery, Required] string key,
|
||||
[FromBody, Required] FreshdeskWebhookModel model)
|
||||
[FromBody, Required] FreshdeskOnyxAiWebhookModel model)
|
||||
{
|
||||
// ensure that the key is from Freshdesk
|
||||
if (!IsValidRequestFromFreshdesk(key))
|
||||
@@ -152,28 +152,8 @@ public class FreshdeskController : Controller
|
||||
return new BadRequestResult();
|
||||
}
|
||||
|
||||
// get ticket info from Freshdesk
|
||||
var getTicketRequest = new HttpRequestMessage(HttpMethod.Get,
|
||||
string.Format("https://bitwarden.freshdesk.com/api/v2/tickets/{0}", model.TicketId));
|
||||
var getTicketResponse = await CallFreshdeskApiAsync(getTicketRequest);
|
||||
|
||||
// check if we have a valid response from freshdesk
|
||||
if (getTicketResponse.StatusCode != System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
_logger.LogError("Error getting ticket info from Freshdesk. Ticket Id: {0}. Status code: {1}",
|
||||
model.TicketId, getTicketResponse.StatusCode);
|
||||
return BadRequest("Failed to retrieve ticket info from Freshdesk");
|
||||
}
|
||||
|
||||
// extract info from the response
|
||||
var ticketInfo = await ExtractTicketInfoFromResponse(getTicketResponse);
|
||||
if (ticketInfo == null)
|
||||
{
|
||||
return BadRequest("Failed to extract ticket info from Freshdesk response");
|
||||
}
|
||||
|
||||
// create the onyx `answer-with-citation` request
|
||||
var onyxRequestModel = new OnyxAnswerWithCitationRequestModel(ticketInfo.DescriptionText);
|
||||
var onyxRequestModel = new OnyxAnswerWithCitationRequestModel(model.TicketDescriptionText);
|
||||
var onyxRequest = new HttpRequestMessage(HttpMethod.Post,
|
||||
string.Format("{0}/query/answer-with-citation", _billingSettings.Onyx.BaseUrl))
|
||||
{
|
||||
@@ -249,29 +229,6 @@ public class FreshdeskController : Controller
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<FreshdeskViewTicketModel> ExtractTicketInfoFromResponse(HttpResponseMessage getTicketResponse)
|
||||
{
|
||||
var responseString = string.Empty;
|
||||
try
|
||||
{
|
||||
responseString = await getTicketResponse.Content.ReadAsStringAsync();
|
||||
var ticketInfo = JsonSerializer.Deserialize<FreshdeskViewTicketModel>(responseString,
|
||||
options: new System.Text.Json.JsonSerializerOptions
|
||||
{
|
||||
PropertyNameCaseInsensitive = true,
|
||||
});
|
||||
|
||||
return ticketInfo;
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
_logger.LogError("Error deserializing ticket info from Freshdesk response. Response: {0}. Exception {1}",
|
||||
responseString, ex.ToString());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private async Task<HttpResponseMessage> CallFreshdeskApiAsync(HttpRequestMessage request, int retriedCount = 0)
|
||||
{
|
||||
try
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
// FIXME: Update this file to be null safe and then delete the line below
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.Billing.Models;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
public class FreshdeskViewTicketModel
|
||||
{
|
||||
[JsonPropertyName("spam")]
|
||||
public bool? Spam { get; set; }
|
||||
|
||||
[JsonPropertyName("priority")]
|
||||
public int? Priority { get; set; }
|
||||
|
||||
[JsonPropertyName("source")]
|
||||
public int? Source { get; set; }
|
||||
|
||||
[JsonPropertyName("status")]
|
||||
public int? Status { get; set; }
|
||||
|
||||
[JsonPropertyName("subject")]
|
||||
public string Subject { get; set; }
|
||||
|
||||
[JsonPropertyName("support_email")]
|
||||
public string SupportEmail { get; set; }
|
||||
|
||||
[JsonPropertyName("id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[JsonPropertyName("description")]
|
||||
public string Description { get; set; }
|
||||
|
||||
[JsonPropertyName("description_text")]
|
||||
public string DescriptionText { get; set; }
|
||||
|
||||
[JsonPropertyName("created_at")]
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
[JsonPropertyName("updated_at")]
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
|
||||
[JsonPropertyName("tags")]
|
||||
public List<string> Tags { get; set; }
|
||||
}
|
||||
@@ -16,3 +16,9 @@ public class FreshdeskWebhookModel
|
||||
[JsonPropertyName("ticket_tags")]
|
||||
public string TicketTags { get; set; }
|
||||
}
|
||||
|
||||
public class FreshdeskOnyxAiWebhookModel : FreshdeskWebhookModel
|
||||
{
|
||||
[JsonPropertyName("ticket_description_text")]
|
||||
public string TicketDescriptionText { get; set; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user