VoiceML开发指南模版_第1页
VoiceML开发指南模版_第2页
VoiceML开发指南模版_第3页
VoiceML开发指南模版_第4页
VoiceML开发指南模版_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

16杭州德龙科技VoiceXML开发指南Ver1.0杭州德龙科技名目TOC\o“1-3“\h\z\u\l“_TOC_250027“VoiceXML概述 1\l“_TOC_250026“VoiceXML语言 1\l“_TOC_250025“系统构造 1\l“_TOC_250024“工作原理 1\l“_TOC_250023“应用程序的输入 2\l“_TOC_250022“应用程序的输出 2\l“_TOC_250021“VoiceXML根本编程 2\l“_TOC_250020“程序构造 2\l“_TOC_250019“Welcome例如程序 2\l“_TOC_250018“根本元素 3\l“_TOC_250017“程序输出 3\l“_TOC_250016“TTS输出 3\l“_TOC_250015“声音文件输出 4\l“_TOC_250014“声音文件和TTS混合输出 4\l“_TOC_250013“程序输入 5\l“_TOC_250012“菜单输入 5\l“_TOC_250011“字段输入 6\l“_TOC_250010“条件语句 8\l“_TOC_250009“goto语句 9\l“_TOC_250008“VoiceXML高级编程 10\l“_TOC_250007“3.1. 大事 10\l“_TOC_250006“3.2. 录音 11\l“_TOC_250005“呼叫转移 12\l“_TOC_250004“object元素 13\l“_TOC_250003“submit元素 13\l“_TOC_250002“ECMAScript 14\l“_TOC_250001“收发 15\l“_TOC_250000“参考文献 1616杭州德龙科技杭州德龙科技16VoiceXML概述VoiceXML语言VoiceXML〔语音扩展标记语言)是一种基于XML的因特网标记语言,用于开发语音用户界面。它是音“语音Web”使用的语言,它使得用户可以使用来访问因特网的内容,可以将其视为用HTML。使用语音界面,用户可以用他们的声音而不是通过计算机键盘和显示器与应用程序进展交互操作。在银行、学校或证券交易所,你可能已经通过语音邮件或者交互式语音应答〕系统接触过语音界面。这些系统提示用户输入相应的信息,用户再依据要求输入相应的数据作为应答,然后系统就可以为用户执行有关的在线操作,例如,在不同帐户之间进展资金转帐。VoiceXML〔HTML页〕用于描述应用程序对用户说出的提示信息,定义和接收来自用户的应答,并且描述程序掌握的流程。用户通过拨打应用程序的号码来访问VoiceXML应用程序。从用户的角度看,这个号WebURL。用户可以通过任何类型的拨打。系统构造VoiceServer系统的构造如以下图所示。语音扫瞄器通过解析VoiceXML,承受提示音、按键等方式进展人机交互完成业务流程。特别地,VoiceServer系统承受可插拔构造支持语音识别(AutomaticSpeechRecognition和语音合成(TextToSpeech)技术,从而实现完全通过语音进展人机交互的梦想。DDIALOGIC硬件VoiceXML语音扫瞄器Web Server效劳器Script层后台数据机VoiceServer系统1VoiceServer系统概图承受VoiceServerWeb技术便利地和原有数据系统结合。用户voiceXMLASP/JSP/PHPvoiceXML脚本;与后台数据系统间可以承受数据库访问,或承受XML/或其他协议访问。工作原理一般来说,VoiceXML成人员开发因特网上运行的语音界面。尤其值得留意的是VoiceXML供给了一个连接自动语音识别、文本语音转换、双音多频、呼叫处理以及其他技术和标准界面。虽然VoiceXML在肯定程度上降低了这些技术的简单性,但是要编写高质量的语音应用程序,就必需了解它们的简单性。在下面两个小节中,将对VoiceXML程序的输入和输出所使用的一些关键技术做一个概述。应用程序的输入自动语音识别是一种使口语输入能够被程序所理解的技术。为此需要将口语中的单次分解成为离散的声音小段,这种声音小段称为音素。然后将这些音素与应用程序开发人员或语音识别工具供给的词汇相比较。这不是可调整的或自然语言的识别方式。每给一个提示信息,VoiceXML以通过特地的硬件或软件来实现。〔DTMF〕音频播放。每个按键都能够产生一个可识别的独一无二的音频。该系统使得用户可以使用键盘VoiceXML应用程序,并且游程序负责接收和理解这些数字信息。应用程序的输出〔〔实际上是一种数字音频格式TTS的功能与ASR根本上相反,它将文字转变为音素,这些音素具有相对应的数字声音。另一种语音输出是用某种标准格式存储的录制的声音文件。这些声音文件格式包括WAVE和脉出都必需事先确定。因此,TTSTTS技术在过去的几年里有了显著TTS语音输出的声音往往仍旧比较死板。VoiceXMLVoiceXML应用程序转到另一个号码。VoiceXML根本编程程序构造Welcome例如程序<?xmlversion=”1.0”><!--Welcome--><vxmlversion=”1.0”><formid=”welcome”><block>欢送访问声软科技</block></form>和介绍全部的编程语言一样,WelcomeVoiceServer将通过TTS引擎来说出“欢送访问声软科技根本元素元素元素<xml>说明<?xmlversion=”1.0”>XML解析器或编辑器说明该文档是XML1.0语法VoiceXML1.0XML1.0语法编写的。虽然元素xml对应VoiceXML解释程序来说并不是必不行少的元素,但是最好使用该元素,这样就可以检查VoiceXML文档的格式是否正确,是否符合文档类型定义〔。注释 <!--Welcome例如程序-->是注释行,VoiceXML程序的注释使用标准的XML语VoiceXML注释一律承受<!--commonttext-->格式。<vxml> VoiceXML命令必需封装在<vxml>…</vxml>version告知解释程序在执行程序文件时,使用哪个版本的VoiceXML文档类型定义〔D。目前,r支持L10,具体文档类型定义参见“:///voicexml1-0.dtd“:///voicexml1-0.dtdvxml元素的applicaiton,该属性指明VoiceXMLURL。当你上载一个VoiceXML文档时,它的根文档也同时上载;一般地,根文档中可以定义全局使用的变量、过程等等。<form> <form>VoiceXML的对话框,用于描述VoiceXML应用程序对用户所说的各种提示,定义和收集用户作出的响应,并且描述程序掌握的流程。对话框分为两种:一种是菜单,一种是窗体。<form>元素负责执行对话框定义中描述的全部操作,封装与用户输入输出相关的命令,在文档中导航或导航到其他文档中,也可以给变量赋值,进展录音和呼叫转移。<block> <block>进展输出、扫瞄、声明和赋值。程序输出在VoiceXML〔TTS〕工具进展输出,另一种方法是通过播放预先录制的声音文件。TTS输出TTS2.1.1的例子<formid=”welcome”><block>欢送访问声软科技</block></form>promptTTSaudio元素使用的另一种元素。如上例,TTS信息不用<prompt>封装时,相当于使用了<prompt>元素的默认值。在以下两种状况下,必需使用prompt元素:首先,假设输出包含TTSprompt元素;语音标记元素是用于掌握向用户说出TTSbargein、cond、count或timeoutprompt元素。<formid=”welcome”><prompt>欢送访问声软科技</prompt></form>需要说明的是,VoiceServer系统对TTS的转换结果作了缓存处理,同样的内容直接从缓存中获TTSTTS的效率。声音文件输出<audio>元素用于设定向用户播放事先录制好的声音文件。不同的VoiceXML语音平台支持不同.wav文件。VoiceServer系统支持的文件格式参见其配置说明文档。声音文件输出的例如如下:<audiosrc=“welcome.wav“></audio>audio元素的属性包括:元素元素src说明Src 属性是向用户播放声音文件的url,注意可以是“://hostname/path/voicefile“://hostname/path/voicefile的形式,从指定的效劳器远程得到语音文件。caching Caching为true的话,则假设有一个声音文件的高速缓存拷贝且没有过期,则使用该拷贝。目前,VoiceServer系统尚不支持该属性。fetchtimeout 该属性用于设定供给声音文件的超时,假设平台在指定的超时时间内没有取得声音文件,则平台将发出一个出错大事。fetchtint 该属性用于确定平台是否应当在实际需要前提前提取声音文件。目前,VoiceServer系统尚不支持该属性。TTS混合输出VoiceServerTTS输出的混合使用。混合输出的例如如下:<prompt><audiosrc=“welcome.wav“></audio></prompt><prompt王国强先生</prompt>。值得留意的是,声音文件的格式和TTS输出的格式必需全都;可以参考系统配置手册的说明,TTS输出的格式。另一种混合输出的方式是,假设在声音文件没有找到或者超时的状况下,则播放TTS的输出。例如如下:<prompt><audiosrc=“welcome.wav“>欢送访问声软科技</audio></prompt>welcome.wavTTS引擎将”欢送访问声软科技”的状况下,用户也能得到正确的提示信息。由于VoiceServerTTS结果的缓存处理,TTS可以获得与预先录制语音文件几乎一样的性能。程序输入输入信息可以用两种方法来接收,一种是语音,一种是双音多频(DTMF)。输入信息既可以直接识别,也可以录音。直接识别的输入信息是通过语法来表述的,该语法设定了一组声音,用户可以发出这一组声音,也可以由用户按下DTMF按钮,以便要求进展某项操作,或将信息供给应应用程序。菜单输入<menu>元素和<form>VoiceXML中的两种对话框之一。依据定义,VoiceXML对话框用于描述应用程序向用户说出的提示信息,也用于定义和接收用户的应答,并且用于描述程序掌握的流程。菜单包含的prompt元素用于将应用程序的输出信息传递给用户,它也包含用于建立语choicechoice元素和大事。菜单的例如如下:<menuid=“QueryMenu“><prompt><audiosrc=“QueryMenu.wav“>120</audio></prompt><choicedtmf=“1“next=“#Product“/><choicedtmf=“2“next=“#Company“/><choicedtmf=“0“next=“#Transfer“/></menu>如上所示,平台在运行到该菜单时,向用户提示“查询产品信息请按1,了解公司信息请按2,转话务员请按0v的声音文件应事先录制好该语句,假设该文件不存在,则使用TTS〔2.2.3混合输出。dtmf=“1“dtmf=“2dtmf=“0“定义了用户可以按的键值,next定义了用户按了该键后,执行的下一个<form>或<menu>,其中#Product、#Company和#Transfer表示<form>或<menu>的名称,即<form>或<menu>id值。Menu元素的属性包括:元素元素idscopedtmf说明Id用于标识菜单。当使用goto、submit、next等元素从另一个对话框导航到该id值。scopechoicescope的值是它的默认值dialog,则菜单的语法只在对话框中有效。假设scope的值是document,VoiceXML文档中有效。dtmfdtmf值。Choice元素用于菜单语法。假设一个选项的语法被识别,那么该choicenext、event或exprnext、expr和event之一能够拥有用于每个choice元素的值。Choice元素的常用属性包括:元素元素说明dtmfdtmfnexteventexprDtmfDTMF按键值。Next用于指定执行的下一个对话框。假设被访问的对话框位于另一个文件中,对话框的名字必需使用以下格式:<URL>#<对话框名称>假设访问的对话框位于同一个文档,则可以简化为#<对话框名称>。Eventchoice元素语法被识别后产生的大事。Exprnextexpr是一个表达式,它的计算结果将作为下一个对话框的名字。下面再给出一个使用<choice>event属性的例如:<menuid=“QueryMenu“><prompt><audiosrc=“QueryMenu.wav“>120</audio></prompt><choicedtmf=“1“next=“#Product“/><choicedtmf=“2“event=“evtCompany“/><choicedtmf=“0“next=“#Transfer“/></menu><catchevent=“evtCompany“><prompt><audiosrc=“Company.wav“></audio></prompt><gotonext=“#QueryMenu“/></catch>和前面的例如一样,平台在运行到该菜单时,向用户提示“查询产品信息请按1,了解公司信息请按yevent=”evtCompany”>元素中定义了该大事处理程序,即播放一段公司介绍Company.wav,播放完毕QueryMenu。关于<catch>3.1的说明。字段输入field元素,该元素用于接收用户的自动语音识别信息或DTMF信息。<field>元素是接收用户输入信息最常用的元素。<field>元素的例如如下:<formid=“QueryProductCode“><fieldname=“productCode“type=“digits“><prompt><audiosrc=“InputProductCode.wav“>请输入产品代码</audio></prompt></field>……</form>如上所示,平台在执行到e对话框时,会向用户提示“请输入产品代码后用户就可以键入产品代码。Field元素的属性包括:元素元素nameexprcondtype说明Name用于存放来自用户输入信息的变量。Exprexprundefined。undefined之外的值,则封装在field元素中的指令将不予执行。Condtruefalsecond的计算值是truefieldcondfalse,则封装field中的指令将不被执行。Type指明白期望的用户输入类型。系统内置的类型包括:Date:年月日组成的有效日期,格式为yyyymmdd。Digits0-9组成的串。Currencydddddd*dd,*表示小数点。Number:currency。Phone:有数字构成的号码,*表示分机。例如:800861234*123表示800861234123。Timehhmm。Field元素还有以下影子(shadow)变量:Name$.confidence:0.0-1.0间的数字,表示返回结果的可信度,0.0最低,1.0最高。该变量ASR识别结果;Name$.utterance:是被识别时的精准词组,同样是用于ASR识别结果的;Name$.imputmodeASRDTMFASRDTMF明该次输入是用什么方式进展的。<filled>Filledfilled元素中的指令。filled元素完善前面的例如:<formid=“QueryProductCode“><fieldname=“productCode“type=“digits“><prompt><audiosrc=“InputProductCode.wav“>请输入产品代码</audio></prompt></field><filled><submit“://server/get.aspx%27“expr=://server/get.aspx”namelist=“productCode“/></filled></form>如上所示,假设用户输入了产品号码,则将输入的产品号码post到后台效劳器,取得信息后向submit3.5节。Filled元素的属性包括:元素元素namelistmode说明该属性包含filled元素等待被赐予一个值的全部字段变量。它的默认值是父窗体中的全部字段变量。allanyfillednamelist属性中的任何变量被赋值时,filled元素中的指令均被执行;假设是all,则当filled元素的namelist属性中的全部变量被赋值后,filled元素中的指令才被执行。modeall的应用例如:<formid=“Login“><fieldname=“name“type=“digits“><prompt><audiosrc=“InputLoginName.wav“>请输入用户代码</audio></prompt></field><fieldname=“password“type=“digits“><prompt><audiosrc=“InputPassword.wav“>请输入用户密码</audio></prompt></field><fillednamelist=”namepassword”mode=”all”><submit“://server/login.aspx%27“expr=://server/login.aspx”namelist=“namepassword“/></filled></form>如上所示,只有在用户输入了用户名和密码后,进入后台的验证程序。条件语句VoiceXML的条件语句承受<if>、<elseif>和<else>元素,其中<elseif>和<else>元素总是封装在一个<if>元素中。Ifelseifelse元素。<if>元素的例如程序如下,该程序示意了产品折扣处理:<formid=“UnitPrice”><fieldname=“Qty“type=“digits“><prompt><audiosrc=“InputQuantity.wav“>请输入购置数量</audio></prompt></field><filled><ifcond=”Qty>100”><assignname=”unitPrice”value=”60”/><elseifcond=“Qty>10”/><assignname=”unitPrice”value=”80”/><else/><assignname=”unitPrice”value=”100”/></if></filled></form><filled>100则单价为60,101008010100。这里需要留意的是,由于<、>是XML的保存字符,所以大于、小于符号都需要使用转义符。转义符表如下:保存字符转义符保存字符转移符<小于符号<‘单引号'>大于符号“引号>"&与符号&goto语句goto元素用于从一个对话框扫瞄到另一个对话框,也可以从一个窗体项转到另一个窗体项。Goto元素的例如如下:<formid=”welcome”><block>欢送访问声软科技<gotonext=“#QueryMenu”></block></form><menuid=“QueryMenu“><prompt><audiosrc=“QueryMenu.wav“>120</audio></prompt><choicedtmf=“1“next=“#Product“/><choicedtmf=“2“next=“#Company“/><choicedtmf=“0“next=“#Transfer“/></menu>如上所示,平台在播放了欢送词后,转到查询菜单,提示用户输入菜单项选择择。Goto元素的常用属性包括:元素元素Next说明Next<下一个文档的URL>#<对话框名称>。假设没有供给对话框名称,则执行VoiceXML文件的第一个对话ExprExprnextitemExpritem框。Exprnextexpr是一个表达式,其计算结果是一URL。当goto元素从窗体的一个工程导航到另一个工程,必需使用nextitemNextitemnextnextitem的名字不带前缀#符号。URL。留意,对于每个goto元素来说,next、expr、nextitem、expritem属性中只能有一个属性具有相应的值。VoiceXML高级编程大事在menu元素中已经接触过大事。大事即可以是预先定义的,也可以是由应用程序定义。大事可以是正常的,如用户恳求帮助,也可以是出错大事,如用户没有输入等。在VoiceXML的大事模式中,大事即可以由平台产生,也可以由应用程序产生。这些大事可以由应用程序猎取和处理,也可以由平台猎取和处理。平台预定义的大事如下表所示:大事大事CancelTelephone.disconnect.hangupExitHelpNoinputNomatchError.badfetchError.sematicError.noauthorizationError.unsupported.formatError.unsupported.element说明用户要求取消当前输出用户已经完毕呼叫用户要求退出用户要求帮助平台期望用户输入,但用户在超时发生前始终没有输入平台检测到用户输入,但和任何有效的语法均不符恳求访问资源失败执行文档遇到运行时错误用户要求对平台执行一项他没有被授权运行的操作用户要求访问的资源所用的格式平台不支持平台遇到一个它不支持的有效元素。应用程序猎取和处理大事承受<catch>的处理方法。Catch元素的例如如下:<catchevent=”noinput”><prompt><audioexpr=“PleaseInput.wav“>您始终没有输入,请重输入!</audio></prompt></catch>如上所示,一旦在平台期望用户输入而用户在超时前始终没有输入时,平台向用户提示“您始终没有输入,请重输入Catch元素的属性包括:元素元素EventCountCond说明Event属性指明猎取的一个或多个大事名称。Event可以是一个特定的大事,也event=”error”Count指发生大事的次数。Count1。count属性的应用例如:<catchevent=”nomatch”count=”1”><prompt><audioexpr=“InputError1.wav“>对不起,您的输入错误,请重输入!</audio></prompt></catch><catchevent=”nomatch”count=”2”><prompt><audioexpr=“InputError2.wav“>对不起,您的输入再次错误,请按12了解公司信息</audio></prompt></catch>应用程序可以利用count属性,在用户反复错误的状况下,给出进一步具体的提示信息,以供给更友好的用户界面。error、noinput、nomatch和help大事,VoiceXML语言供给的<eroro>、<noinput>、<nomatch>和<help>元素,其效果等价于<catchevent=”…”>。录音record元素用于录制用户的语音输入。录制的声音文件可以通过recordname属性中声明的变量来加以引用。Record元素的应用例如如下所示:<formid=“LeaveMessage”><recordname=“message”beep=“true”maxtime=”60s”finalsilence=”2s”dtmfterm=”true”><prompt>请在听得滴声后留言</prompt><filled><prompt>您的留言是<valueexpr=”message”></prompt></filled></record></form>户开头留言。用户留言完毕后,平台向用户确认“您的留言是”,并播放用户的留言内容。Record60秒,假设用户2秒没有声音或者用户按了任何按键则认为留言完毕。Record元素的属性包括:元素元素NameExprCondBeepMaxtimeFinalsilenceDmftermType说明undefinedrecord元素将不执行。Name变量的初始值。recordtrue执行,false则不执行。缺省值true。beeptrue,则平台在预备接收用户录音前播放提示音,beep的缺省值false。该值指定平台允许用户录音的最长时间。该值指定平台允许的静默时间。dtmftermtruedtmf键完毕录音。按键产生的声音将不是录音的局部。录制的声音文件的格式。该格式必需是平台支持的格式,假设不指定,则承受平台的默认格式。Record元素具有以下影子变量:name$.duration:以毫秒为单位的录音长度;name$.size:以字节为单位的文件大小;name$.termcharDTMFnull。呼叫转移呼叫转移承受transferTransfer元素的例如如下:<formid=”transfer”><transfername=“call”dest=“123456”bridge=“false”><prompt>您的正在被转接到话务员,请稍候…</prompt><filled><ifcond=“call==noanswer”><prompt>对不起,话务员无法接听您的,请稍后再试。感谢,再见!</prompt><disconnect/><exit/></if></filled></transfer></form>…123456123456请稍后再试。感谢,再见Transfer元素的属性包括:元素元素Name说明Transferundefinedtransfer元素被执行,否则transfertransfer失败后,该变量为以下值之一:busy:接收到忙音noansertimeout内没有收到答复network_busy:网忙,无法接通ExprExprCondDestDestexprBridgenear_end_disconnect:用户已挂断far_end_disconnect:呼叫方已挂断network_disconnet:呼叫被网切断Name属性变量的初始值转接的号码是一个表达式,其计算值作为转接的号码用于确定当转接后,转接呼叫完毕后是否返回应用程序。Transfername$.duration,表示以毫秒为单位的成功呼叫的时间长度。object元素object元素,VoiceXMLVoiceXML供给的特定平台的功能。由于有些对象是平台所特有的,因此使用一个对象会导致某个应用程序与特定的平台相关联。假设平台不error.unsupported.object大事。Object元素的例如如下:<objectclassid=“xml.windows.text2tiff“name=“TiffObj“><paramname=“text“value=“的内容“/><paramname=“tiff“value=“fax.tif“/></object>xml.windows.text2tiff就是VoiceServer平台特有的供给将文本保存为文件的object元素。Object元素的主要属性包括:元素元素NameExprCondClassidCodebaseCodetype说明Nameobject元素时,假设nameundefinedobject元素Exprname属性中声明对象的初始值Condobject元素是否被执行Classidurl,用于唯一标识一个对象类别url是对象的内容类型元素NameExprValueValuetypeType说明Name元素NameExprValueValuetypeType说明Name是参数的名称Expr是参数值的表达式参数值datarefdata。说明传递的值是值类型还是引用类型valuetypereftypemime类型submit元素submitVoiceXML文档转到效劳器端的脚本文件,如Perl、ASPASP.net等。Submit的例如如下所示:<formid=“QueryProductCode“><fieldname=“productCode“type=“digits“><prompt><audiosrc=“InputProductCode.wav“>请输入产品代码</audio></prompt></field><filled><submitnext=”“://server/get.aspx“://server/get.aspx”namelist=“productCode“/></filled></form>如上所示,如果用户输入产品号码“1234submit将发出“://server/get.aspx?productCode=1234“://server/get.aspx?productCode=1234的恳求。get.aspx中对此productID作处理,并返回下一页vxml文档。submit元素的主要属性包括:元素元素NextExprMethodNamelistEnctype说明Nexturl。url可以是当前文档确实定地址,也可以nextexpr就不能设置其他值Exprnextexprurl。假设exprnext属性Namelist是要提交到脚本文件的变量列表,假设namelist省略了,则作用域内的全部字段项均被提交Enctype是提交文档的mime类型,默认值是application/x-www-form-urlencoded类型ECMAScript使用scipt元素,ECMAScript代码既可以嵌入VoiceXML文档,也可以从外部文件调用。Script元素的例如如下:<scriptsrc=“common.js“/>common.jsjavascriptcommon.js中定义过的expr属性中使用。common.js中有如下定义:functiongetVoiceFile(index){if(index>=0&&index<10)return_fileName[index];elsereturn“”;}_fileName=newArray(10);_fileName[0]=“0.vox“;_fileName[1]=“

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论