0

api.ai を呼び出す Android アプリを作成しています。応答を解析してユーザーに表示したいと考えています。以前、以下のように 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) 応答を解析してユーザーに表示するにはどうすればよいですか?

前もって感謝します

4

2 に答える 2

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. async タスクを実行してリクエストを行います。

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

よろしく。ヌリア

于 2017-02-02T10:28:22.797 に答える
0

ここでAPI.AIの統合に関する公式ドキュメントを参照できます-

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

ハッピーコーディング。

于 2017-07-25T06:36:40.043 に答える