从Android调用api.ai

时间:2016-12-03 16:56:39

标签: android api uri dialogflow

我正在构建一个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)如果我收到错误401,怎么能打电话给Api.ai?有人可以告诉我如何使用Node.js代码准确调用Api.ai吗?

(ii)如何解析响应并将其显示给用户?

提前致谢

2 个答案:

答案 0 :(得分:4)

我正在从Android应用程序连接api.ai。

要做的步骤如下

<强> 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); 

// 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();

的问候。 纽丽

答案 1 :(得分:0)

您可以参考这里集成API.AI的官方文档 -

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

快乐的编码。