2

私はApache TomcatでホストされているJava Alexa Skills Kit SDKを使用してAlexa Skillsロジック(スピスレット)を実装しています。しかし、私はプロジェクトをApache Slingベースのサーバーに移動する必要があります。これはOSGiコンテナ(Apache Felix)に基づいています。私はSling DIメカニズムが非常に有用であることを発見しました。しかし、Java Alexa Skills Kit SDKはまったくそのような使用のために用意されていないようです。主な問題は、SDKサーブレットがプレーンなJavaサーブレットであり、Slingがそれをサポートしていないことです。さらに、SDKはOSGiのバンドルさえありません。スリングスタイルで使うのはいいですが、SDKをゼロから再現したくありません。スリングOSGiコンテナでAlexaスキルを実装する

誰もOSGiコンテナでスリングサービスとしてスキルを作成しましたか?私自身でSlingServletを作成する必要がありますか? Java Alexa Skills Kit SDKはSlingサービスと連携できますか?

答えて

1

Java Alexa Skills Kit SDKはOSGi対応ではなく、サーブレットはSlingでは動作しません。ただし、APIの残りの部分(サーブレットを除く)はプレーンなJavaオブジェクトで構成されているため、Slingで使用することは可能です。これは、Java Alexa Skills Kit SDKをSling機能にラップしてサービスとDIメカニズムを使用できるalexa-skills-slingライブラリを作成した理由です。

<dependency> 
    <groupId>eu.zacheusz.sling.alexa</groupId> 
    <artifactId>alexa-skills-sling</artifactId> 
    <version>1.2.1</version> 
</dependency> 

とOSGiバンドルとしてインストール:あなたは依存関係を追加する必要があり、それを使用するには

。例:

次に、単一のインテントロジックを実装するには、実装にスリング注釈を追加するだけで、ライブラリによってピックアップされます。テントロジックの実装とyou can find more examples in this project

@Component 
@Service(IntentHandler.class) 

Here is a very basic example

@Component 
@Service(IntentHandler.class) 
public class ExampleSimpleIntentHandlerService implements IntentHandler { 

    private static final String SLOT_NAME = "mySlot"; 
    private static final String INTENT_NAME = "myIntent"; 

    @Override 
    public boolean supportsIntent(String intentName) { 
     return INTENT_NAME.equals(intentName); 
    } 

    @Override 
    public SpeechletResponse handleIntent(final SpeechletRequestEnvelope<IntentRequest> requestEnvelope) { 

     final IntentRequest request = requestEnvelope.getRequest(); 
     final Intent intent = request.getIntent(); 
     final Slot slot = intent.getSlot(SLOT_NAME); 

     final String responseMessage; 
     if (slot == null) { 
      responseMessage = format(
        "I got your request, but there is no slot %", 
        SLOT_NAME); 
     } else { 
      responseMessage = format(
        "I got your request. Slot value is %s. Thanks!", 
        slot.getValue()); 
     } 
     return newTellResponse(responseMessage); 
    } 

    private SpeechletResponse newTellResponse(final String text) { 
     return SpeechletResponse.newTellResponse(newPlainTextOutputSpeech(text)); 
    } 

    private PlainTextOutputSpeech newPlainTextOutputSpeech(final String text) { 
     final PlainTextOutputSpeech speech = new PlainTextOutputSpeech(); 
     speech.setText(text); 
     return speech; 
    } 
} 
+1

おかげ - これは私がまさに必要であると私は探していました。誰もそれを以前にしたことは奇妙です。 – John

関連する問題