Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Fukuhara
Product and Topic Expert
Product and Topic Expert
533
SAP Cloud SDK for JavaWebhookResponseWrapperを使ってSAP Conversational AIへWebhook Responseを返してみます。

今回のプログラムはGitHubに置いています(今回以外の内容もあるので注意)。

開発環境


以下の環境で実行しています。

  • OS: Windows10 64-bit

  • openJDK: 1.8.0_242

  • Chocolatey: 0.10.15

  • maven: 3.6.3

  • IDE: IntelliJ IDEA Community Edition 2019.3.3

  • CF cli: 6.37.0+a40009753.2018-05-25

  • SAP Cloud SDK for Java: 3.15.1


手順


0. 前提



1. POM.xml調整


<project-root>/application/POM.xmlのdependenciesパス配下にServices Recast AI (Beta)を追加します。

※ベータ版のサービスなので利用にはご注意ください。
        <!-- https://mvnrepository.com/artifact/com.sap.cloud.sdk.services/recast-ai -->
<!-- for recast-ai -->
<dependency>
<groupId>com.sap.cloud.sdk.services</groupId>
<artifactId>recast-ai</artifactId>
<version>3.15.1</version>
</dependency>

2. サーブレット作成


<project-root>/application/src/main/java/com/sap/cloud/sdkにChatServlet のJava Classを作成します。
package com.sap.cloud.sdk;

import com.google.gson.Gson;
import com.sap.cloud.sdk.services.recastai.RecastWebhookResponseWrapper;
import com.sap.cloud.sdk.services.recastai.botresponses.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/chat")
public class ChatServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(ChatServlet.class);

@Override
protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
throws IOException {

logger.info("Start get method: " + request.getRequestURI());
String parameter = request.getParameter("name");
logger.info("Get parameter 'name': " + parameter);

TextResponse textResponse = new TextResponse("入力:" + parameter);

List<CardContent> cardContents = new ArrayList<>();
List<Button> buttons = new ArrayList<>(); //Dummy

CardContent cardContent = new CardContent();
cardContent.setTitle("タイトル");
cardContent.setSubtitle("サブタイトル");
cardContent.setButtons(buttons);
cardContents.add(cardContent);

ListContent listContent = new ListContent();
listContent.setElements(cardContents);
ListResponse listResponse = new ListResponse(listContent);

RecastWebhookResponseWrapper webhookResponse = new RecastWebhookResponseWrapper(textResponse, listResponse);

response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(webhookResponse.getResponse());
}
}

3. CFにデプロイ


SAP Cloud Platform の Cloud Foundry にデプロイします。

※省略しますが"mvn clean package && mvn tomee:run"でローカル起動して http://localhost:8080/chat?name=test をブラウザで開いて試しています。
cf login
cf push

デプロイ先(https://<route><domain>/chat?name=test)をブラウザで開くと以下のようなJSONが返ってきます。
{
"replies": [
{
"type": "text",
"content": "入力:test"
},
{
"type": "list",
"content": {
"elements": [
{
"title": "タイトル",
"subtitle": "サブタイトル",
"buttons": [

]
}
]
}
}
]
}

4. CAI作成

SAP Conversational AIでbotを作ります。

今回は通信だけが目的なのでfallbackスキルでActionにWebhookコールを設定します。

メモリのtestに「あああ」と設定してWebhookにその値をURLパラメータとして設定しています。



試すと、こんな感じで返ってきます。



 

参考情報


CAIのフォーマット


Send rich messagesを見てどのようにフォーマットを組み立てるか確認。

JSONテスト


JSONテストにmyjsonを使うと手っ取り早くJSONのRESTを作れます。myjsonのエンドポイントをCAIで呼び出して、意図しているフォーマットになっているかを確認。

SAP Cloud SDK for Java関連記事