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
следует заменить на информацию, которую вы действительно хотите вернуть).