Skip to Content
Technical Articles
Author's profile photo Yohei Fukuhara

SAP Cloud SDK for JavaでCAIのWebhookを返す

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関連記事

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.