Twilio PCI-совместимый <Gather> в виджете функций со Studio

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

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

Twilio разработчик евангелист здесь.

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

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

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

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

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

Я думаю, что ответ Филнаша здесь устарел, даже когда он все еще работает.

Прямо сейчас вам нужно вызвать первую функцию с помощью узла TwiML Redirect.

Во второй функции вам нужно будет добавить перенаправление на веб-перехватчик добавления потока?FlowEvent=return&foo=bar (где foo=bar следует заменить на информацию, которую вы действительно хотите вернуть).

Другие вопросы по тегам