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件の返信