Изменить ответное сообщение Twiml <say>
Я создал приложение и использую twilio для исходящих звонков. Но всякий раз, когда я звоню, у меня есть тот же XML-документ со статическим Привет, ваша учетная запись удаляется. но в этот раз я тоже хочу добавить в него параметры. например, Hello, ваш аккаунт {accountnumber} удален. Мой код выглядит следующим образом:
public void call()
{
// Find your Account Sid and Token at twilio.com/console
const string accountSid = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
const string authToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
TwilioClient.Init(accountSid, authToken);
try
{
var call = CallResource.Create(
method: Twilio.Http.HttpMethod.Get,
url: new Uri("https://automatecondominium.com/Services/Twilio/VoiceMessages/twiliomessage.xml"),
to: new Twilio.Types.PhoneNumber("+917018244303"),
from: new Twilio.Types.PhoneNumber("+15206197315")
);
}
catch (Exception)
{
throw;
}
}
1 ответ
Вы не должны отправлять с большими параметрами как часть URL.
У вас есть язык, голос и параметры сообщения, как часть URL. Вы должны генерировать эти значения как часть кода, они не должны быть параметрами. У вас должно быть только значение параметра, на основе которого вы можете сгенерировать все эти значения и отправить их в TwiML.
Подумайте о следующем.
public void MakeCall()
{
const string accountSid = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
const string authToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
TwilioClient.Init(accountSid, authToken);
try
{
//Generate and store message data in some datastore and
//Create and identifier to get that data later.
// GenerateMessageData method does the same thing.
var messageId = GenerateMessageData();
//Pass the messageId as URL parameter.
var call = CallResource.Create(
method: Twilio.Http.HttpMethod.Get,
url: new Uri("https://automatecondominium.com/twilio/twiml?p="+messageId),
to: new Twilio.Types.PhoneNumber("+917018244303"),
from: new Twilio.Types.PhoneNumber("+15206197315")
);
}
catch (Exception)
{
throw;
}
}
private string GenerateMessageData()
{
var messageId = Guid.NewGuid().ToString();
var messageContent = "Some Message"; // This could be any message you want.
var language = "Somelanguage"; //this could be any language you want.
var voice = "SomeVoice"; // Male or Female whichever you want.
var messageData = new MessageData {MessageId = messageId, Message = messageContent, Language = language, Voice = voice };
//Save messageData to database or some data store so that you can retrieve it later.
return messageId;
}
Ниже приведен класс MessageData.
public class MessageData
{
public string MessageId {get;set;}
public string Voice {get;set;}
public string Language {get;set;}
public string Message {get;set;}
}
Теперь мне нужно создать действие контроллера для запроса к серверу twilio/twiml?p
,
Рассмотрим следующий метод действия контроллера в моем TwilioController
учебный класс.
[Route("~/twiml/{p}")]
[HttpPost]
public IActionResult GetTwiml(string p)
{
//Get the messagedata from the datastore based on the messageId retrieved in request.
var messageData = GetMessageData(p);
//initializing Voice Response For creating XML
var response = new VoiceResponse();
// I have no idea why you have lot of comparison of Voice with string.empty and "0"
// so I am not changing it.
// I am just replacing the Voice, Language and Message variables
//with the property values from messageDat object.
if ((messageData.Voice != string.Empty && messageData.Voice != "0") && (messageData.Voice == "0"))
{
//Combining dynamic Message and selecting voice for reading message
response.Say(messageData.Message, voice: messageData.Voice);
var XML = new TwiMLResult(response.ToString());
return XML;
}
if ((messageData.Voice != string.Empty && messageData.Voice != "0") && (messageData.Voice != string.Empty && messageData.Voice != "0"))
{
//Combining dynamic Message and selecting voice for reading message
response.Say(messageData.Message, voice: messageData.Voice, language: messageData.Language);
var XML = new TwiMLResult(response.ToString());
return XML;
}
if ((messageData.Voice == string.Empty || messageData.Voice == "0") && (messageData.Voice == string.Empty || messageData.Voice == "0"))
{
//Combining dynamic Message and selecting voice for reading message
response.Say(messageData.Message);
var XML = new TwiMLResult(response.ToString());
return XML;
}
return null;
}
private MessageData GetMessageData(string messageId)
{
MessageData messageData ;
//retrieve message data based on the messageId and return;
return messageData;
}
Таким образом, вы можете сократить URL-адрес и по-прежнему генерировать динамический контент для голосового вызова.
В приведенном выше коде, например, класс MessageData. У вас может быть другой сценарий, основанный на ваших требованиях.