изменить ответное сообщение Twiml <say> - PullRequest
0 голосов
/ 01 июня 2018

Я создал приложение и использую 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 Ответ

0 голосов
/ 07 июня 2018

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

...