API.AIにおける独自webサービスとの連携(その1.メール通知)

API.AIで日本語でもトレーニング機能が機能するようになっています。天野研ではLINE/Facebook messengerでAPI.AIを利用したボットを運用しています。そこで、未知の対応できないメッセージがあったときにメールで通知を受け取ることを考えてみました。

API.AIにはfulfillmentという項目で外部サービスと連携(webhook)する機能があります。ここではgoogle apps scriptによる簡易サーバーでこのwebhookを受け取り、メールで通知することとします。

 

google apps script側の設定

google apps scriptはいろいろな形式で利用できますが、ここではgdrive/spreadsheetから利用することとします。せっかくなのでspreadsheetに履歴を記録しながら動作させます。

gdrive上の適当なフォルダーにspreadsheetを作成してください。そこから「ツール」→「スクリプトエディタ」を実行します。ここに以下のようなコードを記入します。

function doPost(e) {
  var now = new Date();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var sheetLog = ss.getSheets()[0];
  
  try {
    var json = JSON.stringify(e);
    var values = JSON.parse(json);
    var contents = JSON.parse(values.postData.contents);
    sheetLog.appendRow([ now, json, contents.result.metadata.intentName ]);
    
    if (contents.result.metadata.intentName = "Default Fallback Intent") {
      // 対応できないメッセージがあった
      var subject = "api.ai : check training data";
      var body = "" + now + "\n";
      body += "about : \n";
      body += "  " + contents.result.resolvedQuery + "\n";
      MailApp.sendEmail("!!! YOUR MAIL ADDRESS !!!", null, subject, body);
    }
  } catch (err) {
    sheetLog.appendRow([ now, err ]);
  }
}

API.AIからはPOST形式で通信がやってきますので、ここではdoPostというメソッドで受信します。そしてspreadsheetの末尾にデータを追記しつつ、「Default Fallback Intent」だった場合にメールを送信しています。

スクリプトエディタで「公開」→「Webアプリケーションとして導入」します。ここで以下のようにします。

  • プロジェクトバージョン:新規作成
  • 次のユーザーとしてアプリケーションを実行:自分
  • アプリケーションにアクセスできるユーザー:全員(匿名ユーザーを含む)

上の操作はソースコード修正時にも常に必要です。これを行わないと修正した内容が反映されいません。

上の後、URLが表示されます。これを次のAPI.AIの設定で利用します。

 

API.AI側の設定

API.AI側では2カ所の設定が必要です。

まず全体設定です。左上のメニューから「Fulfillment」を選んでください。

  • Webhook : ENABLED(と表示されるようにクリック)
  • URL : 上で得たURLをCopy & Paste
  • DOMAINS : Enable webhook for all domains

上のようにして「Save」します。これでFulfillmentが有効になりますが、呼び出しは個々のIntentごとに設定が必要で、デフォルトではどのIntentからも呼び出されません。

 

このため、次に個々のIntentごとの設定です。webhookさせたいIntentを選んでください。ここでは「Default Fallback Intent」とします。

ページ加担に「Fulfillment」がありますので、ここで「Use webhook」をonにします。

 

上の二つの設定を行うことで、google apps scriptがコールされるようになります。

この実装例では毎回メール通知していますが、多数のアクセスがある場合にはspreadsheetに記録だけして、定期的にメール送信するといった工夫が必要でしょう。

 

 

“API.AIにおける独自webサービスとの連携(その1.メール通知)” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です