我一直在这里徘徊,在使用这个新工具的过程中,我得到了大多数答案,但是我现在陷入困境,需要一些直接建议。
Studio中的Gather函数不兼容PCI,因此我不得不将调用转移到Function并返回已解析的数据-我终于想出了该怎么做的方法-但是,我发现我无法调用包含在单个函数中的Web服务,并且必须将with事件发送给另一个函数,以将Web服务调用给我的令牌提供者。这项工作有效,但是却导致了一个奇怪的结果:我的令牌被读为TTS,然后挂断了电话。我没有进行TTS动作。以下是我的代码集:
从Studio调用的初始函数:
const got = require('got');
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse();
twiml.gather({
input: 'dtmf',
finishOnKey: '#',
timeout: 10,
action: 'paymenttest',
method: 'GET'
}).say('Enter CC');
console.log(twiml);
callback(null, twiml);
};
这将使用输入的数字成功调用我的函数:
const got = require('got');
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.MessagingResponse();
const url ='my payment gateway' + event.Digits + '&EXPDATE=1220&CARDTYPE=VI';
got.get(url, {
headers: {
'content-Type': 'application/x-www-form-urlencoded'
}
}).then(function(response) {
// Check the response and ask your second question here
event.callback(null, response.body);
}).catch(function(error) {
// Boo, there was an error.
callback(error)
});
};
这成功返回了令牌。...但是如前所述...它被读回给我,而不是包含在返回Studio的数据中。
答案 0 :(得分:0)
这里是Twilio开发人员的传播者。
目前,Studio不能很好地设置为使用来自Twilio Function的TwiML,然后继续该流程。在您的情况下,当您从第二个功能返回令牌时,Twilio正在处理它,就好像您刚刚将文本返回到常规TwiML webhook一样。发生这种情况时,Twilio默认假定您的意思是0
并读出文本。
当团队将呼叫重定向回Studio流程时,有一种解决方法。
不是在第二个函数中返回令牌,而是将一些包含<Redirect>
的TwiML返回到Studio流的Webhook URL并附加<Say>
。您还需要在Function小部件之后添加一个虚拟的Say / Play小部件(它成为流程中可以触发“音频完成”消息的下一部分,因此存在以进行收集并发送到下一个小部件)。 / p>
在解决方法中,我们唯一未处理的就是将令牌发送到流程。我不相信我们可以通过这种重定向解决方法来做到这一点,因此我建议您将令牌存储在您自己的数据库或Twilio Sync对象之类的数据库中。这样,您可以根据需要在Studio之外使用它。如果需要在Studio流程中使用它,则可以再创建一个函数,以将该令牌作为JSON返回,然后将其存储在流程变量中。
如果您更喜欢使用<Pay>
,因为这样会容易得多,我还建议使用requesting the pay connector you need。
答案 1 :(得分:0)
我认为这里的philnash答案已经过时了,即使它仍然有效。
现在,您必须使用TwiML Redirect节点调用第一个函数。
在第二个函数中,您必须添加到流的Webhook的重定向,并添加?FlowEvent=return&foo=bar
(其中foo=bar
应该由您真正想要返回的信息进行更改)。