TWIML动词中的特殊字符

时间:2018-01-12 17:26:09

标签: xml twilio twilio-api twiml twilio-twiml

我有一个动词,我需要用西班牙语阅读。但是,Twilio .Net解析器在给定编码中使用无效字符失败。失败的行(为简洁而编辑)是:

> <Say voice="man" language="es">cita para la instalación de alfombra,
> el lunes, 15 de enero</Say>

我的XML定义为<?xml version="1.0" encoding="utf-8"?>

如何让Twilio .Net库正确解析该字符?如果我将它直接放在TWIML bin中,那么,.Net SDK无法解析它。

更新:添加代码示例

我使用帮助程序库生成VoiceResponse对象并通过webhook返回它们。例如:

foreach (var (translation, date) in installations)
{
    gather.Append(new Say($"{translation} {SpanishDate(date)}", Say.VoiceEnum.Man, language: "es"));
}
public static string SpanishDate(DateTime date)
{
return $"el {date.ToString("dddd", new CultureInfo("es-ES"))}, {(date.Day == 1 ? "primo" : date.Day.ToString())} de {date.ToString("MMMM", new CultureInfo("es-ES"))}";
}

我正在查看帮助程序库返回的结果XML,即:

<Say voice="man" language="es">Cita para la instalacion de pisos de madera  el miércoles, 28 de febrero</Say>

VoiceResponse对象生成的XML(使用ToString()方法)存储在blob存储中,直到调用完成,然后在webhook中作为TwiMLResult返回。

在帮助程序库的TwiMLResult构造函数中抛出异常,该构造函数试图解析XML并且失败。

at System.Xml.XmlTextReaderImpl.Throw(Exception e) 
at System.Xml.XmlTextReaderImpl.InvalidCharRecovery(Int32& bytesCount, Int32& charsCount) 
at System.Xml.XmlTextReaderImpl.GetChars(Int32 maxCharsCount) 
at System.Xml.XmlTextReaderImpl.ReadData() 
at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars) 
at System.Xml.XmlTextReaderImpl.FinishPartialValue() 
at System.Xml.XmlTextReaderImpl.get_Value() 
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r) 
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o) 
at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options) 
at Twilio.AspNet.Mvc.TwiMLResult.LoadFromString(String twiml, Encoding encoding) 
at Twilio.AspNet.Mvc.TwiMLResult..ctor(String twiml) 

2 个答案:

答案 0 :(得分:1)

在看了@Marcos如何做他的样本后,我发现当我在TwiMLResult中返回预渲染的XML时,我没有将编码设置为UTF8。正确的方法是(例子):

var xml = voiceResponse.ToString();
var result = new TwiMLResult(xml, Encoding.UTF8);

答案 1 :(得分:0)

Twilio开发者传道者在这里。

查看您发布的示例,通过使用您可以找到here的帮助程序库,您似乎不会生成TwiML。您可以通过运行:

来安装它

Install-Package Twilio

我使用相同的字符串编写了一个示例应用程序,并生成了正确的XML。

public IActionResult Index()
{       
    var response = new VoiceResponse();
    response.Say("cita para la instalación de alfombra, el lunes, 15 de enero!", language: "es");

    return Content(response.ToString(), "text/xml");
}

以上回报:

<?xml version="1.0" encoding="utf-8"?>
<Response>
  <Say language="es">cita para la instalación de alfombra, el lunes, 15 de enero!</Say>
</Response>

希望这会对你有所帮助。