Dialogflow и Twillio показывают разные результаты - PullRequest
0 голосов
/ 14 января 2020

Привет, мы создали бота, использующего диалоговый поток для управления естественным языком, и 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)
...