Изменить ответное сообщение 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. У вас может быть другой сценарий, основанный на ваших требованиях.

Другие вопросы по тегам