工作的程序员

与我聊天:云环境中的语音和短信

.Java

Ted Neward今年 10 月份发现我做一些与 GiveCamp 在西雅图的慈善工作。(不知道 GiveCamp 是什么?采取第二,看一看:givecamp.org。)在那里,我碰到了一组,有兴趣做一些 SMS 消息作为成员想要生成的应用程序的一部分。我们到浅,和交互式语音应用程序的主题上来。他们这样做,对感兴趣 (具体而言,设置一些自动化致谢呼吁捐助者),但想你不得不运行您自己的呼叫中心和安装您自己的 PBX 软件和硬件,以使它工作。

Au contraire、 mes 非盟特派团

不幸得很,在费城新兴技术活动 (也称为费城增安型) 去年年初,遇见了 Voxeo,一个企业级的 PBX 系统,从一些人,他们把我介绍给对流层,其云主持的声音 SMS (除其他外) 解决方案。任何相关电话服务,伙计们,这是值得一看。

对流层:Testamonial

从根本上说,对流层并不是所有的不同的一些其他语音短信服务可用,但它已经有了其他人看过的一个明显的优势:在开发周期中,没有钱转手。建立在开发过程中使用此服务的应用程序是微不足道 — — 只是游荡对流层 Web 站点来 (tropo.com) 和注册,和全套服务可用,并在你的指尖,只要你想要。

当然,也有其他的语音短信服务和总是值得考虑其它选择。但这篇文章 (以及其继任者),我要去使用对流层的服务。买者自负。

开始使用

如与任何其他的云计算服务,入门对流层要求在其服务器上创建帐户和电子邮件验证响应。一旦完成,重新登录到对流层将显示帐户的仪表板,并且在这里是乐趣开始。

只是为了展示多少有趣,这样做可以,现在试一试。拿起电话和拨号 530-206-0504。

Hello, World!

这本杂志的大多数读者也知道,传统与两个要求任何新的语言或平台中的第一个应用程序是计算机科学神的"你好,世界 !"应用程序。到目前为止我会腾跃传统 (至少,当它留有了它,反正我的目的),所以在这里的第一步是创建一个新的对流层应用程序并使用它创建简单的语音问候语。但我们变得太远的之前,让我们确保我们在这里的体系结构上明确。

像大多数云托管服务,对流层拥有并维护电话硬件运行的服务器和与大多数云托管应用程序一样,这意味着应用程序开发人员不需要任何硬件 — — 祝福以及在大多数情况下的诅咒。在此情况下,不过,大部分的云的"诅咒"结束沦陷,因为我们不会问对流层我们主办的任何数据。事实上,对流层甚至没有主机的脚本,驱动器应用­阳离子。它可以和会很乐意,但如果是关注的问题,然后脚本可以从任何任意 URL 抽取和对流层的服务器上执行。为这块,我们会使用对流层主办的文件,只是因为这似乎开始变得更加容易。

一旦到了电子邮件和验证是照顾,重新登录到对流层应显示仪表板。

单击"创建一个应用程序,",将带你去图 1

Creating an Application in Tropo
图 1 在对流层中创建应用程序

选择"对流层脚本",然后给它一个名称 ; 对于此示例,我用"HelloMSDN"。最后,单击"托管文件"的链接,然后选择"创建一个新的承载此应用程序文件"; 一个简单的文本编辑器在此时将会弹出。您可能已经猜,您正在构建一个小脚本文件 (的脚本语言,您选择 — — JavaScript,PHP,红宝石、 Groovy 或 Python),会被解雇,当对流层以"执行"此脚本中,这种情况将会当有人拨打对流层会给你的电话号码告诉。(更多不久后这。)

调用文件"HelloMSDNScript.js"(扩展名为.js 重要,告诉对流层这是一个 JavaScript 脚本),并在文件的正文中,把下列:

say("Greetings, MSDN fans!")

完成后,它应该看起来像图 2

Creating a Script in Tropo
图 2 在对流层中创建脚本

如果一切都很好,请单击"创建文件",然后"创建应用程序"。一旦完成,对流层将返回到应用程序的仪表板,将会略有不同现在看,你可以看到在图 3

The Tropo Application Dashboard
图 3 对流层中应用仪表板

这仪表板特别重要,因为这是你要去进行某些控制的渠道向哪个对流层正在侦听。在许多方面,从非技术性的人生成最内脏反应的一个电话演示,所以让对流层将电话号码分配给应用程序。这是通过单击"添加一个电话号码",然后选择将会生成该号码的区号。当然,美国免费电话号码 (1-800),还支持但的成本问题,因为这需要设置了一个付费的计划。一旦选择了一个区号,对流层需要调配数,几分钟,然后你可以拨打的号码,被精细的合成的语音的方式迎接。(是的现在做一次)。

嗨,亲爱 !你还爱我吗?

但这是远远不够。是如何情人节的季节即将来临,和假日季节只是过去,和你可能扮演了太多的 Xbox 360,圣诞节,和你拥有你的另一半都生气,你给他/她不注意 (是的我的妻子仍带来这起在晚餐),您可能想要确保你所爱的一个 (女朋友/男朋友/配偶/不管) 是仍在爱着你。所以让我们翻转位周围的代码,并确保。编辑运行的应用程序是相当容易的:返回到应用程序控制板 (这仍应了,假设你已经关闭文本编辑器窗口 ; 如果你没有,别担心,只是呆在那里),只需再次单击"托管文件"的链接,然后选择备份带来文本编辑器中的"编辑此宿主的文件"选项。这一次,用以下内容替换说代码 (用,当然,你的爱我的妻子的位置的名称):

say("I love you, Charlotte!");
var results = ask("Do you love me too?
Yes or no?", {
  choices: "yes, no"
);
log("results.value: " + results.value)
if (results.value == "yes") {
  say("Yay!
That makes me happy.");
}
else {
  say("Oh.
Now I'm a sad panda.");
}

Ask 例程是阻断的调用,玩的提示,然后等待语音应答 (最多为可配置的超时秒数)。 这将是一个 JavaScript 的 API,我们可以通过在询问电话,在此情况下包含"抉择"字符串,这是可以接受的语音响应的逗号分隔列表的末尾 JSON 结构中的可选参数的多。 对流层包含一些语音文本翻译人员,并将尝试解析从调用方的口语的响应 — — 作为最佳它可以,反正。 (当对流层其解析时,其如此需求口语的答复中可以配置与"信心"的因素,指示如何强烈,它认为它正确,分析和信心的水平。 默认情况下它是.3,这是相当可以增进松散,但通常足够用于口语响应,当提示可以接受的结果时,作为在前面的"Yes 或 no"提示。)

但等待 ! 默认语音是女性的声音,并将它发送到我的妻子时,这可能听有点怪异。 所以让我们随更改,更像是我自己的东西的声音。 这是通过传递 JSON 参数在可选的"语音"字段中,都说,问:

say("I love you, Charlotte!", { voice:"victor"});
var results = ask("Do you love me too?
Yes or no?", {
  voice: "victor",
  choices: "yes, no"
});
log("results.value: " + results.value)
if (results.value == "yes") {
  say("Yay!
That makes me happy.", { voice:"victor"});
}
else {
  say("Oh.
Now I'm a sad panda.", { voice:"victor"});
}

一旦完成编辑,保存文件 ; 对流层将更新的文件在的地方,和作出的下一个电话呼叫将玩新的声音。 请注意"维克多"只是其中的一个可能的声音,包括各种不同的重音符号。 确保你不接一个听起来比你自己的自然声音,性感,或选择心爱的人可能更喜欢电话着你,并且可能会很糟糕。

当然,最好如果是你自己的声音,并通过一点点的准备,你可以做到。 都说问支持播放 MP3 或 WAV 文件而不是做文本到语音转换选项当前正在使用,所以,拿起麦克风可信赖的计算机,记录提示和响应,和上传到您最喜爱的 Web 服务器。 然后,提供分析和综合的文本,而不是为预先录制的文件 (而你会把记录并存储在 HTTP 访问服务器上) 提供 Url 播放 ; 为此代码将读取 (URL 是您录制的文件):

say('http://www.tedneward.com/howdy.wav');

下一主题:人工智能

我已经只抓了抓的您可以用对流层表面 — — 事实上,我有更多的探索与对流层与主题完之前 — — 但要完全了解我想去与这个特定的例子,我们将不得不考虑一侧旅行到精彩的人工智慧,然后再次重温对流层。

.Java 是 Neudesic LLC 的建筑顾问。他写了一百多篇,是 C# MVP 和 INETA 的演讲者和创作并合著十几本书,包括最近发表"专业 F # 2.0"(Wrox)。他咨询、 定期指导。他到达 ted@tedneward.com,如果你有兴趣于将他来和你的团队工作或阅读他的博客,在 blogs.tedneward.com

多亏了以下的技术专家审查这篇文章: Adam Kalsey