Вызов api.ai с Android

Я создаю приложение для Android, в котором я вызываю api.ai. Я хочу разобрать ответ и отобразить его пользователям. Ранее я написал код в node.js, который выглядит следующим образом:

    function sendMessageToApiAi(options,botcontext) {
        var message = options.message; // Mandatory
        var sessionId = options.sessionId || ""; // optinal
        var callback = options.callback;
        if (!(callback && typeof callback == 'function')) {
           return botcontext.sendResponse("ERROR : type of options.callback should be function and its Mandatory");
        }
        var nlpToken = options.nlpToken;

        if (!nlpToken) {
           if (!botcontext.simpledb.botleveldata.config || !botcontext.simpledb.botleveldata.config.nlpToken) {
               return botcontext.sendResponse("ERROR : token not set. Please set Api.ai Token to options.nlpToken or context.simpledb.botleveldata.config.nlpToken");
           } else {
               nlpToken = botcontext.simpledb.botleveldata.config.nlpToken;
           }
        }
        var query = '?v=20150910&query='+ encodeURIComponent(message) +'&sessionId='+context.simpledb.roomleveldata.c1+'&timezone=Asia/Calcutta&lang=en    '
        var apiurl = "https://api.api.ai/api/query"+query;
        var headers = { "Authorization": "Bearer " + nlpToken};
        botcontext.simplehttp.makeGet(apiurl, headers, function(context, event) {
           if (event.getresp) {
               callback(event.getresp);
           } else {
               callback({})
           }
        });
    }

Мой код Android выглядит следующим образом:

package com.example.pramod.apidev;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity{
    private Button listenButton;
    private TextView resultTextView;
    private EditText inputText;
    private static String API_URL = "https://api.api.ai/api/query";
    private static String API_KEY = "d05b02dfe52f4b5f969ba1257cffac37";
    private static String query;
    private static String s;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listenButton = (Button) findViewById(R.id.listenButton);

        resultTextView = (TextView) findViewById(R.id.resultTextView);
        inputText = (EditText)findViewById(R.id.inputText);

        s = inputText.getText().toString();


        query = "?v=20150910&query=hi" +"&sessionId=1480181847573api&timezone=Asia/Calcutta&lang=en";
        listenButton.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                try {


                    URL url = new URL(API_URL + query + "&apiKey=" + API_KEY);
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                }
                catch(Exception e) {
                    Log.e("ERROR", e.getMessage(), e);

                }


            }
        });

        }
    }

Мне нужна помощь в следующем:

(i) Как вызвать Api.ai, если я получаю сообщение об ошибке 401? Может ли кто-нибудь сказать, как точно вызвать Api.ai, используя код Node.js?

(ii) Как можно проанализировать ответ и отобразить его пользователям?

заранее спасибо


person AITea    schedule 03.12.2016    source источник


Ответы (2)


Я подключаюсь к api.ai из приложения для Android.

Шаги, которые нужно сделать, следующие

<сильный>1. Добавьте зависимости:

    compile 'ai.api:libai:1.2.2'
    compile 'ai.api:sdk:2.0.1@aar'

<сильный>2. Создайте действие, реализующее AIListener.

<сильный>3. Объявите AIService и AIDataService:

    private AIService aiService;
    private AIDataService aiDataService;

<сильный>4. Инициализируйте конфигурацию, сервисы и добавьте прослушиватель:

    final ai.api.android.AIConfiguration config = new       ai.api.android.AIConfiguration("API_KEY",
        ai.api.android.AIConfiguration.SupportedLanguages.Spanish,
        ai.api.android.AIConfiguration.RecognitionEngine.System);

    // Use with text search
    aiDataService = new AIDataService(this, config);

    // Use with Voice input
    aiService = AIService.getService(this, config);

    aiService.setListener(this);

<сильный>5. Выполните асинхронную задачу, чтобы сделать запрос:

    AIRequest aiRequest = new AIRequest();

    aiRequest.setQuery(request); 

//запрос -- любая строка, которую вы хотите отправить чат-боту, чтобы получить соответствующий ответ.

    if(aiRequest==null) {
        throw new IllegalArgumentException("aiRequest must be not null");
    }

    final AsyncTask<AIRequest, Integer, AIResponse> task =
        new AsyncTask<AIRequest, Integer, AIResponse>() {
                    private AIError aiError;

    @Override
    protected AIResponse doInBackground(final AIRequest... params) {
        final AIRequest request = params[0];
            try {
                final AIResponse response =    aiDataService.request(request);
                // Return response 
                return response;
            } catch (final AIServiceException e) {
                aiError = new AIError(e);
                return null;
            }
        }

    @Override
    protected void onPostExecute(final AIResponse response) {
        if (response != null) {
            onResult(response);
        } else {
            onError(aiError);
        }
    }
};
task.execute(aiRequest);

<сильный>6. метод onResult

Result result = response.getResult();

Если результатом является строка, строка с ответом будет в:

String speech = result.getFulfillment().getSpeech();

С Уважением. Нурия

person Nuria Ruiz    schedule 02.02.2017
comment
что такое request в aiRequest.setQuery(request); и где вы это определили в ответе? - person Hammad Nasir; 02.08.2017

Вы можете обратиться к официальной документации по интеграции API.AI здесь -

https://github.com/api-ai/apiai-android-client

Удачного кодирования.

person Venkatesh Suvarna    schedule 25.07.2017
comment
Пожалуйста, убедитесь, что ваш ответ решает проблему без ссылки. Вы должны добавить краткое резюме на случай, если ссылка не работает. - person Noel Widmer; 25.07.2017