Twilio PCI-совместимый <Gather>в виджете функций со Studio - PullRequest
0 голосов
/ 28 декабря 2018

Я слонялся здесь и получил большинство своих ответов, когда пробираюсь через этот новый инструмент, но сейчас я застрял и нуждаюсь в каком-то прямом совете.

Функция Gather в Studio не совместима с PCI, поэтому мне нужно переключить свой вызов на функцию и вернуть проанализированные данные - я наконец-то понял, как это сделать - однако я обнаружил, чточто я не могу вызвать веб-службу, находящуюся в одной функции, и мне пришлось отправить with event.Digits другой функции, чтобы вызвать веб-службу моему провайдеру токенов.Это работает, однако это привело к странному результату: мой токен считывается как 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.

1 Ответ

0 голосов
/ 07 января 2019

Разработчик Twilio здесь.

В данный момент Studio недостаточно хорошо настроена для использования TwiML из функции Twilio и продолжения процесса.В вашем случае, когда вы возвращаете токен из вашей второй функции, Twilio работает с ним, как если бы вы только что вернули текст обычному веб-крюку TwiML.Когда это происходит, по умолчанию Twilio предполагает, что вы имели в виду <Say> и считывает текст.

Пока команда работает над перенаправлением вызовов обратно в потоки Studio, существует обходной путь.

Вместо возврататокен во второй функции, верните некоторый TwiML, который включает <Redirect> в URL веб-потока вашего Studio с добавлением ?FlowEvent=audioComplete.Вам также нужно добавить фиктивный виджет «Скажи / играй» после своего виджета «Функция» (он становится следующей частью в потоке, которая может вызвать сообщение «аудио завершено», поэтому существует для его сбора и отправки на следующий виджет).

Единственное, что мы не обработали в этом обходном пути, - это отправка токена в поток.Я не верю, что мы можем сделать это с помощью этого обходного пути перенаправления, поэтому вместо этого я бы рекомендовал хранить токен в вашей собственной базе данных или что-то вроде объекта Twilio Sync .Таким образом, вы можете использовать его за пределами студии, как вам нравится.Если вам это нужно в потоке Studio, вы можете создать еще одну функцию, которая возвращает токен в виде JSON и затем будет храниться в переменных потока.

Если вы предпочитаете использовать <Pay>, так как это было бы намного проще, я также рекомендую запросить нужный вам платный соединитель .

...