using GreenHome.VoiceCall.Avanak;
using Microsoft.AspNetCore.Mvc;
namespace GreenHome.Api.Controllers;
///
/// Controller for testing Voice Call service (Avanak)
///
[ApiController]
[Route("api/[controller]")]
public class VoiceCallTestController : ControllerBase
{
private readonly IVoiceCallService voiceCallService;
private readonly ILogger logger;
public VoiceCallTestController(IVoiceCallService voiceCallService, ILogger logger)
{
this.voiceCallService = voiceCallService;
this.logger = logger;
}
///
/// Test getting account status
///
/// Account status response
[HttpGet("account-status")]
public async Task GetAccountStatus()
{
try
{
logger.LogInformation("Testing AccountStatus");
var result = await voiceCallService.GetAccountStatusAsync();
logger.LogInformation("AccountStatus retrieved successfully");
return Ok(new
{
success = true,
message = "وضعیت حساب با موفقیت دریافت شد",
data = result
});
}
catch (Exception ex)
{
logger.LogError(ex, "Error getting account status");
return StatusCode(500, new
{
success = false,
message = "خطا در دریافت وضعیت حساب",
error = ex.Message
});
}
}
///
/// Test generating TTS (Text-to-Speech)
///
/// TTS generation request
/// TTS generation response
[HttpPost("generate-tts")]
public async Task GenerateTTS([FromBody] GenerateTTSRequest request)
{
try
{
logger.LogInformation("Testing GenerateTTS for text: {Text}", request.Text);
var result = await voiceCallService.GenerateTTSAsync(request);
logger.LogInformation("TTS generated successfully");
return Ok(new
{
success = true,
message = "تولید صوت با موفقیت انجام شد",
data = result
});
}
catch (Exception ex)
{
logger.LogError(ex, "Error generating TTS");
return StatusCode(500, new
{
success = false,
message = "خطا در تولید صوت",
error = ex.Message
});
}
}
///
/// Test QuickSend (sending voice call with uploaded audio file)
///
/// QuickSend request
/// QuickSend response
[HttpPost("quick-send")]
public async Task QuickSend([FromBody] QuickSendRequest request)
{
try
{
logger.LogInformation("Testing QuickSend to {Recipient} with MessageId {MessageId}",
request.Recipient, request.MessageId);
var result = await voiceCallService.QuickSendAsync(request);
logger.LogInformation("QuickSend completed successfully");
return Ok(new
{
success = true,
message = "تماس صوتی با موفقیت ارسال شد",
data = result
});
}
catch (Exception ex)
{
logger.LogError(ex, "Error sending quick voice call");
return StatusCode(500, new
{
success = false,
message = "خطا در ارسال تماس صوتی",
error = ex.Message
});
}
}
///
/// Test QuickSendWithTTS (sending voice call with TTS)
///
/// QuickSendWithTTS request
/// QuickSendWithTTS response
[HttpPost("quick-send-with-tts")]
public async Task QuickSendWithTTS([FromBody] QuickSendWithTTSRequest request)
{
try
{
logger.LogInformation("Testing QuickSendWithTTS to {Number} with text: {Text}",
request.Number, request.Text);
var result = await voiceCallService.QuickSendWithTTSAsync(request);
if (result != null && result.IsSuccess)
{
logger.LogInformation("QuickSendWithTTS completed successfully. QuickSendId: {QuickSendId}",
result.QuickSendId);
}
else
{
logger.LogWarning("QuickSendWithTTS failed with ReturnValue: {ReturnValue}",
result?.ReturnValue ?? 0);
}
return Ok(new
{
success = result?.IsSuccess ?? false,
message = result?.IsSuccess == true
? "تماس صوتی با موفقیت ارسال شد"
: $"خطا در ارسال تماس صوتی (کد خطا: {result?.ReturnValue})",
data = result,
quickSendId = result?.QuickSendId ?? 0
});
}
catch (Exception ex)
{
logger.LogError(ex, "Error sending quick voice call with TTS");
return StatusCode(500, new
{
success = false,
message = "خطا در ارسال تماس صوتی",
error = ex.Message
});
}
}
///
/// Test getting QuickSend status
///
/// GetQuickSend request
/// QuickSend status response
[HttpPost("quick-send-status")]
public async Task GetQuickSendStatus([FromBody] GetQuickSendRequest request)
{
try
{
logger.LogInformation("Testing GetQuickSendStatus for QuickSendId: {QuickSendId}",
request.QuickSendId);
var result = await voiceCallService.GetQuickSendStatusAsync(request);
logger.LogInformation("QuickSendStatus retrieved successfully");
return Ok(new
{
success = true,
message = "وضعیت تماس صوتی با موفقیت دریافت شد",
data = result
});
}
catch (Exception ex)
{
logger.LogError(ex, "Error getting quick send status");
return StatusCode(500, new
{
success = false,
message = "خطا در دریافت وضعیت تماس صوتی",
error = ex.Message
});
}
}
///
/// Quick test with default values (for easy testing)
///
/// Phone number to send voice call to
/// Text to convert to speech (optional)
/// QuickSendWithTTS response
[HttpPost("quick-test/{phoneNumber}")]
public async Task QuickTest(string phoneNumber, [FromQuery] string? text = null)
{
try
{
var testText = text ?? $"سلام. این یک تماس صوتی تست از سرویس GreenHome است. زمان تست: {DateTime.Now:yyyy/MM/dd HH:mm:ss}";
logger.LogInformation("Quick test voice call to {PhoneNumber} with text: {Text}",
phoneNumber, testText);
var request = new QuickSendWithTTSRequest
{
Number = phoneNumber,
Text = testText,
ServerID = 0 // Default
};
var result = await voiceCallService.QuickSendWithTTSAsync(request);
if (result != null && result.IsSuccess)
{
logger.LogInformation("Quick test voice call sent successfully. QuickSendId: {QuickSendId}",
result.QuickSendId);
}
return Ok(new
{
success = result?.IsSuccess ?? false,
message = result?.IsSuccess == true
? "تماس صوتی تست با موفقیت ارسال شد"
: $"خطا در ارسال تماس صوتی تست (کد خطا: {result?.ReturnValue})",
data = result,
quickSendId = result?.QuickSendId ?? 0,
testInfo = new
{
phoneNumber,
text = testText,
sentAt = DateTime.Now
}
});
}
catch (Exception ex)
{
logger.LogError(ex, "Error in quick test voice call");
return StatusCode(500, new
{
success = false,
message = "خطا در ارسال تماس صوتی تست",
error = ex.Message
});
}
}
}