- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我可以录制用户输入,将录制 URL 传递给所需的函数,并在本地下载音频文件。我试图对音频文件做的是获取它的缓冲区以发送给 Lex 或将其转换为 Lex 需要的格式。
根据 AWS 文档,输入流参数值接受以下值:
var params = {
botAlias: 'STRING_VALUE', /* required */
botName: 'STRING_VALUE', /* required */
contentType: 'STRING_VALUE', /* required */
inputStream: new Buffer('...') || 'STRING_VALUE' || streamObject, /*required */
userId: 'STRING_VALUE', /* required */
accept: 'STRING_VALUE',
requestAttributes: any /* This value will be JSON encoded on your behalf with JSON.stringify() */,
sessionAttributes: any /* This value will be JSON encoded on your behalf with JSON.stringify() */
};
lexruntime.postContent(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
根据 twilio 文档,音频文件看起来非常灵活...
A request to the RecordingUrl will return a recording in binary WAV audio format by default. To request the recording in MP3 format, append ".mp3" to the RecordingUrl.
我需要做什么才能以适合 Lex 的正确格式获取 twilio 录制的音频?仅仅是构建正确的 Lex 参数集的问题,还是我需要事先进行一些音频转换?如果有帮助,我正在用 node js 编写这个应用程序,如果有帮助,我可以添加更多代码。
最佳答案
我能够通过从 Twilio 下载文件作为 PCM 并稍微更改我的参数来解决这个问题。此外,由于 Twilio 处理记录动词的方式,我需要在等待 recordingStatusCallback 发布时将调用转移到保持状态。我还向来电者发送了一条文本,其中包含来自 Lex 的最终状态。
我用来下载文件的代码:
app.post('/processRecording', (request, response) => {
var https = require('https');
var fs = require('fs');
let callSID = request.body.CallSid;
let url = request.body.RecordingUrl;
var saveFile = new Promise(function(resolve, reject) {
let fileName = callSID+ ".pcm";
var file = fs.createWriteStream(fileName);
var request = https.get(url, function(response) {
response.pipe(file);
resolve();
});
});
});
const accountSid = 'YOUR ACCOUNT SID';
const authToken = 'YOUR AUTH TOKEN';
const client = require('twilio')(accountSid, authToken);
//Once the file is downloaded, I then fetch the call from the hold state using this code:
saveFile.then(function(){
client.calls(callSID)
.update({method: 'POST', url: '/updateCall'})
.then(call => console.log(call.to))
.done();
});
我的 updateCall 端点如下所示:
app.post('/updateCall', (request, response) => {
let lexruntime = new AWS.LexRuntime();
let recordedFileName = request.body.CallSid + '.pcm';
let toNumber = request.body.To;
let fromNumber = request.body.From;
let twiml = new Twilio.twiml.VoiceResponse();
let lexFileStream = fs.createReadStream(recordedFileName);
let sid = request.body.CallSid;
var params = {
botAlias: 'prod', /* required */
botName: 'OrderFlowers', /* required */
contentType: 'audio/lpcm; sample-rate=8000; sample-size-bits=16; channel-count=1; is-big-endian=false',
accept: 'text/plain; charset=utf-8',
userId: sid /* required */
};
params.inputStream = lexFileStream;
lexruntime.postContent(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
if (data.dialogState == "ElicitSlot" || data.dialogState == "ConfirmIntent" || data.dialogState == "ElicitIntent" ){
twiml.say(data.message);
twiml.redirect({
method: 'POST'
}, '/recordVoice');
response.type('text/xml');
response.send(twiml.toString());
}
else if (data.dialogState == "Fulfilled" ){
twiml.say(data.message);
response.type('text/xml');
response.send(twiml.toString());
client.messages.create({
to: toNumber,
from: fromNumber,
body: data.message
}).then(msg => {
}).catch(err => console.log(err));
}
else{
twiml.say(data.message);
response.type('text/xml');
response.send(twiml.toString());
}
});
});
recordVoice 端点实际上是一个 Twilio 无服务器函数,但我认为这就是它作为 express 端点的样子:
app.post('/recordVoice', (request, response) => {
let twiml = new Twilio.twiml.VoiceResponse();
twiml.record({
action: '/deadAir',
recordingStatusCallback: '/processRecording',
trim: true,
maxLength: 10,
finishOnKey: '*'
});
twiml.say('I did not receive a recording');
response.type('text/xml');
response.send(twiml.toString());
});
/deadAir 端点也是一个 Twilio 无服务器函数,但它应该是这样的:
app.post('/deadAir', (request, response) => {
let twiml = new Twilio.twiml.VoiceResponse();
twiml.pause({
length: 60
});
response.type('text/xml');
response.send(twiml.toString());
});
关于twilio - 将录制的 Twilio 音频发送给 Lex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51898951/
我正在创建一个使用twilio的网络应用程序,但我似乎遇到了问题。 该系统由3个参与者组成: 实际客户 物理服务器 我们的网络应用程序 每当客户通过表单创建新的“作业”时,所有作业详细信息都将以文本形
有a good pitch from Twilio here . 我只是不明白他们如何通过网站做到这一点。如何使用网络浏览器控制固定电话? 最佳答案 简短的回答:神奇的蝴蝶。 更长的答案:Twilio
我一直在与 Twilio 合作 program SMS functionality在我的应用程序上,似乎 Twilio 对美国号码效果最好,而对国际号码效果不佳。我做了一些研究,并了解到 8 月 16
我需要将用户添加为出站调用者 ID。通过使用以下代码 const accountSid = 'ACeae3abf5038c91052c27aa2a04969457'; const authToken
在 Twilio - 飞行模式同时响铃中断。 由于连接的第一个调用将取消所有其他尝试,如果有线路处于飞行模式,它将立即接听并将用户带到语音信箱。 解决方法是仅在调用成功连接而不是 PICKED-UP
我有一个用于发送短信的 twilio 帐户。但是,我需要有关如何通过调用其 API 查看我的帐户电话号码列表的指导。我试图浏览 API 中的不同菜单,但我没有看到任何选项来获取我的帐户电话号码列表。预
我正在尝试使用 Twilio Video,我需要从我的应用服务器获取访问 token (jwt)。 下面是生成访问 token 的 NodeJS 应用服务器代码。在下面的凭证中,API_KEY_SEC
创建 Twilio 功能 token 是否需要向 Twilio 服务器发出请求? 如果我理解正确的话,创建 Twilio 功能 token 涉及某种仅在我自己的服务器上发生的加密过程。当我调用库来创建
我最近一直在阅读 Twilio 文档,对“Twilio Client”和“Twilio Video”感到困惑。 我注意到“Twilio Client”的教程涉及注册电话号码,而测试版“Twilio V
我找不到任何关于在主讲人发生变化时更改构图布局的文档。我想要做的是在视频的更大区域中拥有比非主导演讲者更大的主导演讲者,并且该演讲者可以/将在某个时间间隔发生变化。这可能使用 Compositions
设置 我已经使用两个基于美国的号码(+1 国家代码)成功测试了我的 Twilio 应用程序一段时间。验证 token 已通过 SMS 成功发送,验证检查状态返回“已批准”。生活很好! 😎 问题 今天
有什么方法可以在我的两个用户之间进行通话?我的意思是......我有一个带有注册号码的 twilio 帐户,我必须调用我的客户“Bill”,所以当他回答时,电话应该被重定向到 Bill 选择的另一个客
我想要一个流程,我可以在其中给用户发短信,并且该用户可以发回短信以触发事件。我可以在任何时候向用户发送多条未完成的消息 - 无论如何,在收到短信时,我是否可以弄清楚它正在回复哪条消息,而无需在短信正文
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
无论如何,我可以关闭默认的 twilio 哔声以开始录制。我想使用我们自己的客户提示音。 基本上我们希望在 MP3 播放完毕时发出一声哔哔声。之后我们想要 20 秒空白,一旦 20 秒完成,我们会发出
我是 Twilio 的新手,在设计出站拨号器当前预览拨号时遇到了一个问题。如果工作人员拒绝一项任务,则不应再次向该工作人员提供相同的任务。 我如何处理这个案子? 最佳答案 通常,如果工作人员拒绝任务,
我正在使用 Twilio PHP 库,但问题实际上与语言无关。我尝试执行以下操作: $client = new Services_Twilio('MyAccountSID', 'My auth tok
我们已经构建了一个网络应用程序。该应用程序的核心是在网络上安排 session / session 。因此,用户 A( session 协调员)将安排 session / session ,所有其
我正在使用 JavaScript SDK 创建一个 Twilio 应用程序。 我想实现调用保持功能,但我在实现它时遇到了麻烦。 当调用由软电话发起时,保持调用的过程是什么? 还有,软电话接听的过程是怎
三月份,我开设了一个网站,为人们提供用于接收短信验证等的临时号码。 我刚刚登录到该帐户并意识到我收到了大量的出站短信费用。 每当我的任何号码收到短信时,它们似乎都是默认的自动响应。 我没有启用此功能(
我是一名优秀的程序员,十分优秀!