0

我一直在这里闲逛,并在我通过这个新工具的过程中得到了大部分答案,但我现在被困住了,需要一些直接的建议。

Studio 中的 Gather 函数不符合 PCI 标准,因此我必须将调用转移到函数并返回解析后的数据——我终于想出了如何做到这一点——但是,我发现我无法调用网络服务位于单个函数中,并且必须将 with event.Digits 发送到另一个函数,以使 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 的数据中。

4

2 回答 2

0

我认为这里的 philnash 答案已经过时了,即使它仍然有效。

现在,您应该必须使用 TwiML Redirect 节点调用第一个函数。

在第二个函数中,您应该必须将重定向添加到流添加的 webhook 中?FlowEvent=return&foo=barfoo=bar应该由您真正想要返回的信息更改)。

于 2020-12-04T07:30:45.987 回答
0

Twilio 开发人员布道者在这里。

现在 Studio 没有很好地设置为从 Twilio 函数中使用 TwiML,然后继续流程。在您的情况下,当您从第二个函数返回令牌时,Twilio 正在处理它,就像您刚刚将文本返回到常规 TwiML webhook 一样。发生这种情况时,Twilio 默认假设您的意思是<Say>并读出文本。

虽然团队致力于将呼叫重定向回 Studio 流程,但有一种解决方法。

不要在第二个函数中返回令牌,而是返回一些 TwiML,其中包含附加<Redirect>的 Studio 流的 webhook URL ?FlowEvent=audioComplete。您还需要在 Function 小部件之后添加一个虚拟的 Say/Play 小部件(它成为流程中可以触发“音频完成”消息的下一部分,因此存在收集该消息并发送到下一个小部件)。

我们在解决方法中唯一没有处理的是将令牌发送到流。我不相信我们可以通过这种重定向解决方法来做到这一点,因此我建议将令牌存储在您自己的数据库或类似Twilio Sync对象的东西中。这样您就可以在 Studio 之外随意使用它。如果您在 Studio 流程中需要它,则可以再创建一个以 JSON 形式返回令牌的函数,然后将其存储在流程变量中。

如果您更喜欢使用<Pay>,因为这会更容易,我还建议您请求您需要的支付连接器

于 2019-01-07T03:39:51.327 回答