1

C# 中的 Microsoft.Rtc.Collaboration.AudioVideo.VoiceXml.Browser 对象有一个 RunAsync 方法,该方法采用要运行的 Vxml 页面的 URI 和一个 CookieCollection,理论上,它应该允许您传入可在脚本。我已经尝试了所有我能想到的从 Vxml 获取 cookie 的方法,并且似乎没有任何附加到文档中。关于如何从 Vxml 访问传入的 cookie 的任何想法?

简单来说,这就是我所拥有的 vxml:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE vxml PUBLIC "-//BeVocal Inc//VoiceXML 2.0//EN" "http://cafe.bevocal.com/libraries/dtd/vxml2-0-bevocal.dtd">
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" xml:lang="en-US" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml21/vxml.xsd" >
  <form id="QueueForm">
  <script> 
   <![CDATA[
      function GetCookie(name)
      {         
         var cookies = document.cookie;
         return cookies;
      }
   ]]>
  </script>
  <var name="cookie" expr="GetCookie('')" />
    <field name="QueueField">
      <prompt>
        <value expr="cookie" />
        were cookies
      </prompt>
      <grammar mode="dtmf" root="Dtmf">
        <rule id="Dtmf">
          <one-of>
            <item> 1 </item>
          </one-of>
        </rule>
      </grammar>
      <filled>
        <exit namelist="cookie"/>
      </filled>
    </field>
  </form>
</vxml>

这在调用代码中

_browser.SetAudioVideoCall(_call);
System.Net.CookieContainer cookies = new System.Net.CookieContainer(1);
cookies.Add(new System.Net.Cookie("data", "grapefruit", "/", "localhost"));
_browser.Run(_startPage, cookies);

...这导致口语“是 cookie”。在我尝试的所有情况下。

我尝试在 cookie 对象上设置不同的域和路径,调用不同的 Javascript 对象以不同的方式获取 cookie 以及我能想到的任何其他方法,但无法访问 cookie。Vxml 的 Microsoft 示例项目也不包含访问 cookie 的示例。我确信有一种方法可以访问传入的项目,但我无法弄清楚如何;有什么想法吗?

4

1 回答 1

1

我是 UCMA 3.0 附带的 VoiceXML 浏览器 API 的 PM。我联系了一位致力于实现它的开发人员,并要求她调查这个问题。这是她的回应。

VXML 浏览器允许您在 Run() 和 RunAsync() 方法中将 CookieContainer 发送到浏览器。在其运行过程中,浏览器将向服务器发出 http 请求以获取 vxml 内容。此 cookie 容器作为 http 请求的一部分发送,服务器发送的任何 cookie 也最终在此容器中。这是每个设计。

这使您能够编写动态服务器,这些服务器可能会根据发送的 cookie 提供不同的 vxml。您还可以在会话完成后查看服务器 cookie 值。例如,黄金客户帐户可能是一个特殊的对话框,服务器可能会向您发送 cookie,帮助您确定在浏览器完成后将呼叫发送到哪个队列。

但是,cookie 不会传递到 vxml 应用程序本身——也就是说,它们无法在 vxml 文档内部的 javascript 级别访问。我同意这会很方便,当然,习惯于处理可以访问“document.cookie”的 html 浏览器的工程师可能会期望这一点。但是 w3c vxml 规范没有在这方面提出标准行为,Microsoft 浏览器也没有提供这个功能。

如果需要这样的功能,一种工程解决方案是让您的服务器读取 cookie 并动态生成 vxml,并将 cookie 值设置为一些 javascript 变量。

于 2012-02-22T19:06:49.280 回答