Dialogflow(구:API.AI) 이벤트를 Cloud functions에서 받고 사용자에게 텍스트를 반환해 보세요. #dialogflow

API.AI 이벤트 받기



API.AI에서는 Webhook을 설정할 수 있습니다. 이렇게 하면 사용자가 보낸 요청을 외부 서버에서 처리할 수 있습니다. 이번에는 Cloud Functions에서 Actions on Google 이벤트를 받고 사용자에게 텍스트를 반환합니다.

이번에 사용할 서비스


  • 아피. 사랑
  • Actions on Google
  • CLOUD FUNCTIONS

  • API.AI 프로젝트 준비



    이번에는 Google I / O 2017 API.AI 세션의 베이글 주문을 일본식으로 사용해보십시오. 에서 만든 프로젝트를 그대로 사용하고 싶습니다.

    Actions on Google 사용



    Integrations의 Actions on Goole을 선택하고 활성화하고 Setting에서 프로젝트를 만듭니다. Add actions to your app에서 USE API.AI 또는 Use Actions SDK 중 하나를 선택하는 화면에 오면 USE API.AI를 선택하고 화면 내용을 확인한 후 OK로 돌아갑니다.
    ※일본어 비대응을 위한 시뮬레이터는 시험할 수 없습니다

    Cloud functions 준비


  • Node.JS 도입
  • 최신 Cloud SDK 도입

  • Google Developer console 에서 프로젝트 선택
  • 결제 사용

  • Cloud functions 사용

  • Cloud storage 버킷 준비
  • 버킷 이름을 기억하십시오
  • 이 버킷에 함수 코드를 업로드합니다.
  • 나는 "order-sushi"라는 버킷을 만들었습니다

  • 프로젝트에 대한 디렉토리 만들기
  • 프로젝트 디렉토리에서 gcloud init를 실행하여 GCP 프로젝트를 선택합니다.

    index.js와 package.json 준비



    프로젝트 디렉토리에 index.jspackage.json를 만듭니다.

    index.js
    'use strict';
    
    process.env.DEBUG = 'actions-on-google:*';
    const App = require('actions-on-google').ApiAiApp;
    
    //API.AI actions
    const ORDER_SUSHI = 'order.sushi';
    
    exports.ordersushi = (request, response) => {
      const app = new App({request, response});
      console.log('Request headers: ' + JSON.stringify(request.headers));
      console.log('Request body: ' + JSON.stringify(request.body));
    
      // Fulfill action business logic
      function orderSushiHandler (app) {
        // Complete your fulfillment logic and send a response
        console.log('Requested ' + ORDER_SUSHI);
        app.ask('Sushi requested!!');
      }
    
      const actionMap = new Map();
      actionMap.set(ORDER_SUSHI, orderSushiHandler);
    
      app.handleRequest(actionMap);
    };
    

    ORDER_SUSHI에는 Intents의 액션 이름이 포함됩니다.



    package.json
    {
      "name": "sushi-order-demo",
      "description": "This is your Action's webhook",
      "version": "0.0.1",
      "private": true,
      "license": "Apache Version 2.0",
      "author": "Google Inc.",
      "engines": {
        "node": "~6.0"
      },
      "scripts": {
        "lint": "semistandard --fix \"**/*.js\"",
        "start": "functions deploy ordersushi --trigger-http",
        "deploy": "gcloud beta functions deploy ordersushi --trigger-http --stage-bucket order-sushi"
      },
      "dependencies": {
        "actions-on-google": "^1.0.0"
      },
      "devDependencies": {
        "semistandard": "^9.1.0"
      }
    }
    

    프로젝트 업로드



    다음 명령을 사용하여 프로젝트를 Cloud Storage에 업로드합니다.

    terminal
    gcloud beta functions deploy ordersushi --trigger-http --stage-bucket order-sushi
    

    업로드가 끝나면 URL이 반환된다고 생각합니다. 그 URL을 삼가해 주십시오.
    httpsTrigger:
    url: https://us-central1-yourproject.cloudfunctions.net/ordersushi
    

    API.AI에 Webhook 설정



    Webhook 사용



    옆 메뉴에서 Fulfillment를 선택하여 Webhook을 활성화합니다.
    그리고 방금전의 URL을 넣습니다.



    Webhook 설정



    Intents의 Sushi Order에서 Use webhook을 선택하십시오.



    테스트해 보자.



    Actions on Goole로 테스트하고 싶은 곳입니다만, 아직 시뮬레이터가 일본어 비대응이므로 API.AI의 시뮬레이터로 테스트해 봅시다.

    Text Response 삭제



    테스트하기 전에 Text Response의 "헤이, 엉망이되었습니다!"를 삭제합니다. 대신 함수에서 "Sushi requested!!"를 반환합니다.

    실행



    오른쪽 시뮬레이터에서 실행합니다. "스시 먹고 싶다, 녹이 있고, 참치"를 입력하고 주문이 확정되면. . .



    제대로 「Sushi requested!!」가 반환되었습니다!

    로그 확인



    다음 명령으로 functions 로그 보기

    terminal
    gcloud beta functions logs read ordersushi
    

    Requested order.sushi가 확인되었습니다!

    terminal
    I ordersushi  xxxxxxxx  2017-05-29 23:15:38.465  Requested order.sushi
    
  • 좋은 웹페이지 즐겨찾기