GoogleAppsScript
docomoAPI
chatbot
LINEmessagingAPI

chat bot をサーバレスで作ってみた LINE Messaging API × Google Apps Script × DOCOMO API

はじめに

初めましてちーずです。これから少しずつ投稿しようと思います。

今回はchatbotについてです。
会社で今後chatbotの案件が出てきそうなので予習がてら作ってみることにしました。

参考にさせていただいた記事です。というよりここに書いてあることができるように真似てみただけです。
https://qiita.com/ponjopi/items/913ae7f5b1117cee4860

こんな感じになります。あんまり会話成り立ってないですね。
image.png

使ったもの

  • Google Apps Script(GAS)
  • LINE Messaging API
  • DOCOMO 雑談対話 API

手順 サマリ

  1. Google Apps Script を準備する
  2. LINE Messaging API の申請をする
  3. DOCOMO 雑談対話 API の申請をする
  4. Google Apps Script でLINEとDOCOMOのAPIを叩く

手順 詳細

Google Apps Script を準備する

驚くほど手間がかからなかった。
1. Googleアカウントを取得する
1. chromeにGoogle Apps Scriptを入れる
1. Google ドライブから「新規」->「その他」->「アプリを追加」でGASを選択

LINE Messaging API の申請をする

申請はここからします。この時、LINEのアカウントが必要になります。私は普段自分が使っている個人アカウントを使用しました。開発用のアカウントを用意したかったのですが電話番号を複数持っていないので致し方なしです。(facebook連携とかすれば電話番号なくてもLINEアカウントを作れるらしいです)
https://developers.line.me/ja/index.html

image.png

image.png

image.png

DOCOMO 雑談対話 API の申請をする

ここから申請します。
https://dev.smt.docomo.ne.jp/?p=index
(スクショを撮り忘れてて、取ろうと思ったらメンテナンス中で撮れませんでした。気が向いたら追記します。)

Google Apps Script でLINEとDOCOMOのAPIを叩く

doPostでpostを受け取ります。
そしてdoPost関数の中でUrlFetchApp.fetchでLINE Messaging APIを呼び出します。
fetchで指定しているURLがLINE Messaging APIのURLです。https://api.line.me/v2/bot/message/reply
返信の文言はgetDialogueMessageで雑談APIを叩いて、返ってきた内容をresponse_messageに詰めています。
これでLINEのトークで会話できるようになります。

var CHANNEL_ACCESS_TOKEN = 'LINE DEVELOPERで作成されたアクセストークン';
var DOCOMO_DIALOGUE_APIKEY = 'DOCOMO雑談APIのAPIKEY';

function doPost(e){
  var reply_token = JSON.parse(e.postData.contents).events[0].replyToken;
  if(typeof reply_token === 'undefined'){
    return;
  }
  var user_message = JSON.parse(e.postData.contents).events[0].message.text;
  var response_message = getDialogueMessage(user_message);
  var url = 'https://api.line.me/v2/bot/message/reply';
  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
      'method': 'post',
      'payload': JSON.stringify({
        'replyToken': reply_token,
        'messages': [{
          'type': 'text',
          'text': response_message,
        }],
      }),
    });
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

function getDialogueMessage(mes) {
  var dialogueUrl = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=' + DOCOMO_DIALOGUE_APIKEY;
  var dialogue_options = {
    't': 20,
    'utt': mes
  };
  var options = {
    'method': 'POST',
    'contentType': 'text/json',
    'payload': JSON.stringify(dialogue_options)
  };
  var response = UrlFetchApp.fetch(dialogueUrl, options);
  var content = JSON.parse(response.getContentText());
  return content.utt;
}