Как сохранить входные данные чата от пользователя с помощью Dialogflow в Firebase (Android Studio) - PullRequest
0 голосов
/ 26 октября 2018

Я хочу отправить деньги между различными PaypalCustomerAccount, транзакция каждого пользователя будет записана в таблицу UserTransaction.Пример на фото, PaypalCustomerAccount user_id rmMe7a68kOXIvblu4aah1ZHc7Qx2.Когда она совершает транзакцию, она будет сохранена в таблице UserTransaction с ее user_id с новым идентификатором транзакции -LOvXSpmHnjmN2sWkhap. введите описание изображения здесь

Я хочу использовать чат-бота из DialogFlow, встроенного в Android Studio, для отправки денег между PaypalCustomerAccount.

На скриншоте показано, как на Android-приложение выглядит чат-бот, когда пользователь хочет отправить «свист» (цифровая проверка), разговор идет:

  • отправить свист Конечно1010 *
  • кто хотел бы отправить его на

введите описание изображения здесь

  • отправить его Susie
  • Могу ли я узнать дату отправки чека

введите описание изображения здесь

  • отправьте его tmr
  • Хорошо, Айвотправил свист в Сьюзи, он будет обработан к 2018-10-17

введите описание изображения здесь

Теперь, после того как пользователь сделает запрос, я хочусохранить запрос новой транзакции в моей базе данных.От PayPalCustomerAccount rmMe7a68kOXIvblu4aah1ZHc7Qx2 до a2u4aqw3Hc7Qx2 .Это означает, что в поле UserTransaction появится новая запись транзакции:

  1. для a2u4aqw3Hc7Qx2 , и статус будет получен.
  2. для rmMe7a68kOXIvblu4aah1ZHc7Qx2 * 10 10 will *быть отправленным.

Ниже приведен код index.js на странице выполнения для диалогового потока. Я не знаю, как написать коды для того, чтобы вышеописанное произошло (имеется в виду, что новая запись транзакции появится в UserTransaction) Пишу ли я коды в диалоговом потоке или в моей андроид студии (бэкэнддля чата), чтобы это случилось?

'use strict';

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

// initialise DB connection
const admin = require('firebase-admin');
admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: 'ws://whooshapplication.firebaseio.com/',
});


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 SendWhoosh(agent) 
  {
     const nameParam = agent.parameters.name;
     const context = agent.getContext('send_a_whoosh');
      const name = nameParam || context.parameters.name;


   // push input into db 

  }

  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
}

  // // Uncomment and edit to make your own intent handler
  // // uncomment `intentMap.set('your intent name here', yourFunctionHandler);`
  // // below to get this function to be run when a Dialogflow intent is matched
  // function yourFunctionHandler(agent) {
  //   agent.add(`This message is from Dialogflow's Cloud Functions for Firebase editor!`);
  //   agent.add(new Card({
  //       title: `Title: this is a card title`,
  //       imageUrl: 'https://developers.google.com/actions/images/badges/XPM_BADGING_GoogleAssistant_VER.png',
  //       text: `This is the body text of a card.  You can even use line\n  breaks and emoji! ?`,
  //       buttonText: 'This is a button',
  //       buttonUrl: 'https://assistant.google.com/'
  //     })
  //   );
  //   agent.add(new Suggestion(`Quick Reply`));
  //   agent.add(new Suggestion(`Suggestion`));
  //   agent.setContext({ name: 'weather', lifespan: 2, parameters: { city: 'Rome' }});
  // }

  // // Uncomment and edit to make your own Google Assistant intent handler
  // // uncomment `intentMap.set('your intent name here', googleAssistantHandler);`
  // // below to get this function to be run when a Dialogflow intent is matched
  // function googleAssistantHandler(agent) {
  //   let conv = agent.conv(); // Get Actions on Google library conv instance
  //   conv.ask('Hello from the Actions on Google client library!') // Use Actions on Google library
  //   agent.add(conv); // Add Actions on Google library responses to your agent's response
  // }
  // // See https://github.com/dialogflow/dialogflow-fulfillment-nodejs/tree/master/samples/actions-on-google
  // // for a complete Dialogflow fulfillment library Actions on Google client library v2 integration sample

  // Run the proper function handler based on the matched Dialogflow intent name
[enter image description here][1]  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Default Fallback Intent', fallback);
  // intentMap.set('your intent name here', yourFunctionHandler);
  // intentMap.set('your intent name here', googleAssistantHandler);
  agent.handleRequest(intentMap);
});

введите описание изображения здесь

Это моя Android-студия ChatBot.java коды для работы чата

public class ChatBot extends AppCompatActivity implements AIListener
{
    public Bot bot;
    public static Chat chat;

    private ListView mListView;
    private Button mButtonSend;
    private EditText mEditTextMessage;
    private Button mImageView;
    private ChatMessageAdapter mAdapter;

    AIService aiService;

    private static final String TAG = "ChatBot";

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat_bot);

        mListView = (ListView) findViewById(R.id.listView);
        mImageView = (Button)findViewById(R.id.voice_record);
        mButtonSend = (Button) findViewById(R.id.btn_send);
        mEditTextMessage = (EditText) findViewById(R.id.et_message);
        mAdapter = new ChatMessageAdapter(this, new ArrayList<ChatMessage>());
        mListView.setAdapter(mAdapter);

        int permission = ContextCompat.checkSelfPermission(this,
                Manifest.permission.RECORD_AUDIO);

        if (permission != PackageManager.PERMISSION_GRANTED)
        {
            Log.i(TAG, "Permission to record denied");
            makeRequest();
        }

        final AIConfiguration config = new AIConfiguration("c43d5450b1a54959a44158fb897f1dcb",
                AIConfiguration.SupportedLanguages.English,
                AIConfiguration.RecognitionEngine.System);

        aiService = AIService.getService(this, config);
        aiService.setListener(this);



        mButtonSend.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                String message = mEditTextMessage.getText().toString();
                //bot
                String response = chat.multisentenceRespond(mEditTextMessage.getText().toString());
                if (TextUtils.isEmpty(message))
                {
                    return;
                }
                sendMessage(message);
                mimicOtherMessage(response);
                mEditTextMessage.setText("");
                mListView.setSelection(mAdapter.getCount() - 1);
            }
        });

        mImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                aiService.startListening();
            }
        });

        // *************************************

        //checking SD card availablility
        boolean a = isSDCARDAvailable();
        //receiving the assets from the app directory
        AssetManager assets = getResources().getAssets();
        File jayDir = new File(Environment.getExternalStorageDirectory().toString() + "/cheque/bots/whoosh");
        boolean b = jayDir.mkdirs();
        if (jayDir.exists())
        {
            //Reading the file
            try {
                for (String dir : assets.list("whoosh")) {
                    File subdir = new File(jayDir.getPath() + "/" + dir);
                    boolean subdir_check = subdir.mkdirs();
                    for (String file : assets.list("whoosh/" + dir)) {
                        File f = new File(jayDir.getPath() + "/" + dir + "/" + file);
                        if (f.exists())
                        {
                            continue;
                        }
                        InputStream in = null;
                        OutputStream out = null;
                        in = assets.open("whoosh/" + dir + "/" + file);
                        out = new FileOutputStream(jayDir.getPath() + "/" + dir + "/" + file);
                        //copy file from assets to the mobile's SD card or any secondary memory
                        copyFile(in, out);
                        in.close();
                        in = null;
                        out.flush();
                        out.close();
                        out = null;
                    }
                }
            } catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        //get the working directory
        MagicStrings.root_path = Environment.getExternalStorageDirectory().toString() + "/cheque";
        System.out.println("Working Directory = " + MagicStrings.root_path);
        AIMLProcessor.extension =  new PCAIMLProcessorExtension();
        //Assign the AIML files to bot for processing
        bot = new Bot("whoosh", MagicStrings.root_path, "chat");
        chat = new Chat(bot);
        String[] args = null;
        mainFunction(args);

        // *************************************

    } // onCreate

    protected void makeRequest()
    {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.RECORD_AUDIO},
                101);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
    {
        switch (requestCode)
        {
            case 101:
            {
                if (grantResults.length == 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED)
                {
                    Log.i(TAG, "Permission has been denied by user");
                }
                else
                {
                    Log.i(TAG, "Permission has been granted by user");
                }
                return;
            }
        }
    }

    public void voiceclick(View view)
    {
        aiService.startListening();
    }

    //check SD card availability
    public static boolean isSDCARDAvailable()
    {
        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)? true :false;
    }

    //copying the file
    private void copyFile(InputStream in, OutputStream out) throws IOException
    {
        byte[] buffer = new byte[1024];
        int read;
        while((read = in.read(buffer)) != -1)
        {
            out.write(buffer, 0, read);
        }
    } //copyFile

    //Request and response of user and the bot
    public static void mainFunction (String[] args)
    {
        MagicBooleans.trace_mode = false;
        System.out.println("trace mode = " + MagicBooleans.trace_mode);
        Graphmaster.enableShortCuts = true;
        Timer timer = new Timer();
        String request = "Hello.";
        String response = chat.multisentenceRespond(request);

        System.out.println("Human: "+request);
        System.out.println("Robot: " + response);
    } //mainFunction

    private void sendMessage(String message)
    {
        ChatMessage chatMessage = new ChatMessage(message, true, false);
        mAdapter.add(chatMessage);
        //respond as Helloworld
        mimicOtherMessage("HelloWorld");
    } //sendMessage

    private void mimicOtherMessage(String message)
    {
        ChatMessage chatMessage = new ChatMessage(message, false, false);
        mAdapter.add(chatMessage);
    }

    private void sendMessage()
    {
        ChatMessage chatMessage = new ChatMessage(null, true, true);
        mAdapter.add(chatMessage);

        mimicOtherMessage();
    }

    private void mimicOtherMessage()
    {
        ChatMessage chatMessage = new ChatMessage(null, false, true);
        mAdapter.add(chatMessage);
    }

    @Override
    public void onResult(AIResponse result)
    {
        Log.d("anu",result.toString());
        Result result1 = result.getResult();
        mEditTextMessage.setText("Query" + result1.getResolvedQuery() + " action: " + result1.getAction());

    }

    @Override
    public void onError(AIError error) {

    }

    @Override
    public void onAudioLevel(float level) {

    }

    @Override
    public void onListeningStarted() {

    }

    @Override
    public void onListeningCanceled() {

    }

    @Override
    public void onListeningFinished() {

    }
}

введите описание изображения здесь

Вот также скриншот моего намерения в диалоговом потоке

Пожалуйста, помогите мне!и заранее спасибо

1 Ответ

0 голосов
/ 05 ноября 2018

Прежде всего, Awesome Project, над которым вы работаете, реализующий управление транзакциями в чате в реальном времени.Я просмотрел каждый вложенный файл и заданный вами вопрос правильно.Я хочу выделить несколько важных шагов, которые вы можете выполнить для реализации запрошенной вещи:

  1. Оформить заказ и внедрить Paypal SDK в приложении для Android: https://github.com/paypal/PayPal-Android-SDK
  2. Затем, используя методы и объекты, вы можете просто поместить возвращенные значения любой транзакции из Paypal на свой Androidприложение и, таким образом, вы можете передать его в базу данных реального времени в Firebase.
  3. Код Chatbot в порядке, просто вы должны инициировать действие при конкретном намеренном вызове, когда пользователь говорит отправить кому-то деньги,серверная часть приложения для Android, где будет запускаться код Paypal в файле класса Android.

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

Всего наилучшего для вашей будущей реализации!

...