Привет, мы создали бота, использующего диалоговый поток для управления естественным языком, и twillio обрабатывает текстовые сообщения в форме WhatsApps. В нашем выполнении диалогового потока есть следующий код
const {Firestore} = require('@google-cloud/firestore');
const functions = require('firebase-functions');
const {WebhookClient } = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
const admin = require('firebase-admin');
const {
dialogflow,
Image,
} = require('actions-on-google');
// Create an app instance
const app = dialogflow({
debug: true
});
app.intent('greeting', (conv) => {
console.log('hi');
//agent.add("My ID: " + conv.parameters.my_id.toString());
});
var name = null;
// initialise DB connection
var firebase = require("firebase-admin");
var firebaseConfig = {
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
function fallback(agent) {
agent.add(`I didn't understand`);
agent.add(`I'm sorry, can you try again?`);
}
function handleName(agent) {
let names = agent.parameters.person;
var temp = names;
// agent.add(agent.requestSource);
var name2 = agent.getContext('1_1_name');
name = name2;
var newData={
name:names.name
};
if((temp != null && temp.name.length < 256 && temp.name.length > 2)){
let myref = firebase.database().ref('Person');
let mGroupId = firebase.database().ref('Person').push().getKey();
return true;
}
else{
agent.add('Invalid name or surname. Please try again');
return false;
}
}
function handleWelcome(agent){
//agent.add(new Image('https://s3.amazonaws.com/botsociety.prod.us/e3d2e0b03f28399a62654d8f52bade457_welcomescreenpng.png'));
agent.add("How can we help you?\n1: Funeral cover family option\n2: Funeral cover nominated option\n3: Add beneficiaries to existing cover\n4: Claim\n5: Contact Details");
//agent.add(sessionId);
return true;
}
function done(agent) {
//agent.add(JSON.parse(agent.parameters).toString());
agent.add("Lol wut");
}
function handleID(agent) {
agent.add('I am a banana.');
const id = agent.parameters.my_id;
var tempID = id.toString();
var valid = true;
if (tempID.length == 13){
}else{
agent.add('Invalid RSA ID number. Please try again');
return false;
}
//Only numerical
for (let x = 0; x < tempID.length; x++){
const d = tempID.charCodeAt(x);
if (d < 48 || d > 57)
valid = false;
}
//Valid citizenship value
if (tempID[10] > 1)
valid = false;
//Odd
var uneven = 0;
for (var x = 0; x <= 10; x += 2){
uneven += parseInt(tempID[x]);
}
//Even
var temp = "";
for (x = 1; x <= 11; x += 2){
temp += tempID[x].toString();
}
var even = parseInt(temp) * 2;
temp = even.toString();
var finalEven = 0;
for (x = 0; x < temp.length; x++){
finalEven += parseInt(temp[x]);
}
//total
var total = finalEven + uneven;
var actualValue = 10 - (total % 10);
//final check
if ((actualValue.toString() !== tempID[12].toString()))
valid = false;
//decide what to do
if (valid){
let myref = firebase.database().ref('Person');
var newData = {
id: id
};
}
else{
agent.add('Invalid RSA ID number. Please try again');
return false;
}
}
let intentMap = new Map();
intentMap.set('Default Welcome Intent', welcome);
intentMap.set('Default Fallback Intent', fallback);
//Names
intentMap.set('1_1_name', handleName);
intentMap.set('1_1_spouse_name', handleName);
intentMap.set('2_1_name', handleName);
intentMap.set('2_beneficiary_name', handleName);
intentMap.set('3_3_name', handleName);
intentMap.set('beneficiary_name_intent', handleName);
intentMap.set('c_2_c_1_name', handleName);
intentMap.set('c_2_c_2_name', handleName);
intentMap.set('c_3_c_1_name', handleName);
intentMap.set('c_3_c_2_name', handleName);
intentMap.set('c_3_c_3_name', handleName);
intentMap.set('c_4_c_1_name', handleName);
intentMap.set('c_4_c_2_name', handleName);
intentMap.set('c_4_c_3_name', handleName);
intentMap.set('c_4_c_4_name', handleName);
intentMap.set('child_1_name_intent', handleName);
//IDs
intentMap.set('1_1_id', handleID);
intentMap.set('1_1_spouse_id', handleID);
intentMap.set('2_1_id', handleID);
intentMap.set('2_beneficiary_id', handleID);
intentMap.set('3_3_id', handleID);
intentMap.set('beneficiary_id_intent', handleID);
intentMap.set('c_2_c_1_id', handleID);
intentMap.set('c_2_c_2_id', handleID);
intentMap.set('c_3_c_1_id', handleID);
intentMap.set('c_3_c_2_id', handleID);
intentMap.set('c_3_c_3_id', handleID);
intentMap.set('c_4_c_1_id', handleID);
intentMap.set('c_4_c_2_id', handleID);
intentMap.set('c_4_c_3_id', handleID);
intentMap.set('c_4_c_4_id', handleID);
intentMap.set('child_1_id_intent', handleID);
intentMap.set('anything_else_no', done);
// intentMap.set('your intent name here', yourFunctionHandler);
// intentMap.set('your intent name here', googleAssistantHandler);
agent.handleRequest(intentMap);
}}
Теперь метод, который меня больше всего интересует, заключается в следующем.
function handleID(agent) {
agent.add('I am a banana.');
const id = agent.parameters.my_id;
var tempID = id.toString();
var valid = true;
if (tempID.length == 13){
}else{
agent.add('Invalid RSA ID number. Please try again');
return false;
}
//Only numerical
for (let x = 0; x < tempID.length; x++){
const d = tempID.charCodeAt(x);
if (d < 48 || d > 57)
valid = false;
}
//Valid citizenship value
if (tempID[10] > 1)
valid = false;
//Odd
var uneven = 0;
for (var x = 0; x <= 10; x += 2){
uneven += parseInt(tempID[x]);
}
//Even
var temp = "";
for (x = 1; x <= 11; x += 2){
temp += tempID[x].toString();
}
var even = parseInt(temp) * 2;
temp = even.toString();
var finalEven = 0;
for (x = 0; x < temp.length; x++){
finalEven += parseInt(temp[x]);
}
//total
var total = finalEven + uneven;
var actualValue = 10 - (total % 10);
//final check
if ((actualValue.toString() !== tempID[12].toString()))
valid = false;
//decide what to do
if (valid){
let myref = firebase.database().ref('Person');
var newData = {
id: id
};
}
else{
agent.add('Invalid RSA ID number. Please try again');
return false;
}
}
Эта функция предназначена для проверки идентификатора, который предоставляет нам пользователь и который отлично работает в системе тестирования в консоли тестирования диалогового потока. Он также связан с учетной записью twillio, и когда мы используем определенное количество, он действует аналогичным образом. Однако функция проверки идентификатора не работает в twillio. Он отлично работает при тестировании в консоли, но не работает, когда пользователь использует номер WhatsApp Twillio.
Какие-либо предложения относительно того, как это не работает с интеграцией Twillio? Большое спасибо.
Изменить при просмотре журналов Firebase я получаю следующее сообщение об ошибке
Error: No responses defined for platform: twilio
at WebhookClient.send_ (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:488:13)
at promise.then (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:306:38)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)