Studio中的功能小部件中符合Twilio PCI的<gather>

时间:2018-12-28 05:23:01

标签: twilio twilio-functions twilio-studio

我一直在这里徘徊,在使用这个新工具的过程中,我得到了大多数答案,但是我现在陷入困境,需要一些直接建议。

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的数据中。

2 个答案:

答案 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应该由您真正想要返回的信息进行更改)。