TWIML 动词中的特殊字符
Special Characters in TWIML verb
我有一个动词需要用西班牙语阅读。但是,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 对象(使用 ToString() 方法)生成的 XML 存储在 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)
这里是 Twilio 开发人员布道者。
查看您发布的示例,您似乎没有使用可以找到的帮助程序库生成 TwiML here。您可以通过 运行:
安装
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");
}
以上returns:
<?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>
希望对您有所帮助。
在查看了@Marcos 是如何做他的示例之后,我发现当我 return TwiMLResult 中的 pre-rendered XML 时,我没有将编码设置为 UTF8 .正确的做法是(示例):
var xml = voiceResponse.ToString();
var result = new TwiMLResult(xml, Encoding.UTF8);
我有一个动词需要用西班牙语阅读。但是,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 对象(使用 ToString() 方法)生成的 XML 存储在 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)
这里是 Twilio 开发人员布道者。
查看您发布的示例,您似乎没有使用可以找到的帮助程序库生成 TwiML here。您可以通过 运行:
安装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");
}
以上returns:
<?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>
希望对您有所帮助。
在查看了@Marcos 是如何做他的示例之后,我发现当我 return TwiMLResult 中的 pre-rendered XML 时,我没有将编码设置为 UTF8 .正确的做法是(示例):
var xml = voiceResponse.ToString();
var result = new TwiMLResult(xml, Encoding.UTF8);