2016-12-03 2 views
0

Ich baue eine Android-App, in der ich api.ai aufrufen. Ich möchte die Antwort analysieren und den Benutzern anzeigen. Früher hatte ich in node.js geschriebenen Code, die als unten:Aufruf api.ai von Android

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

Meine Android-Code ist wie folgt:

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

       } 


      } 
     }); 

     } 
    } 

Ich brauche Hilfe in folgenden:

(i) Wie kann ruf den Api.ai, da ich einen Fehler 401 bekomme? Kann jemand sagen, wie man Api.ai unter Verwendung des Node.js-Codes genau nennt?

(ii) Wie kann die Antwort analysiert und den Benutzern angezeigt werden?

Vielen Dank im Voraus

Antwort

3

ich mit api.ai von android app bin zu verbinden.

Die Schritte zu tun, sind die folgenden

1. die Abhängigkeiten hinzufügen:

compile 'ai.api:libai:1.2.2' 
    compile 'ai.api:sdk:[email protected]' 

2. eine Aktivität erstellen Umsetzung AIListener.

3. Declare AIService und AIDataService:

private AIService aiService; 
    private AIDataService aiDataService; 

4. initialisieren Config, Dienste und fügen Zuhörer:

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. Führen Sie async Aufgabe Antrag zu stellen :

AIRequest aiRequest = new AIRequest(); 

    aiRequest.setQuery(request); 

// request - eine beliebige Zeichenfolge, die Sie an den Chat-Bot senden möchten, um dort eine entsprechende Antwort zu erhalten.

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. Verfahren onResult

Result result = response.getResult(); 

Wenn das Ergebnis ein String ist, wird die Zeichenfolge mit der Antwort in sein:

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

Grüßen. Nuria

+0

Was ist 'Anfrage' in' aiRequest.setQuery (Anfrage); 'und wo hast du es in der Antwort definiert? –

0

Sie können die offizielle Dokumentation API.AI hier zu integrieren -

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

Glücklich Codierung.

+1

Bitte stellen Sie sicher, dass Ihre Antwort das Problem ohne den Link löst.Sie sollten eine kurze Zusammenfassung hinzufügen, falls die Verbindung unterbrochen wird. –