何をしたか
定期的にサッカーニュースを配信

Talk APIを使って日常会話

どのように実現したか
LINE Messaging APIを使用
Messaging APIを使って、ボットサーバーとLINEプラットフォームの間でデータを交換できます。リクエストは、JSON形式でHTTPSを使って送信されます。
1.ユーザーが、LINE公式アカウントにメッセージを送信します。
2.LINEプラットフォームからボットサーバーのWebhook URLに、Webhookイベントが送信されます。
3.Webhookイベントに応じて、ボットサーバーからユーザーにLINEプラットフォームを介して応答します。
Webhook先としてGAS(Google Apps Script)を使用
GASはGoogleが提供しているjavascriptをベースとした言語
GASはGoogleが用意する「スクリプトエディタ」上に記述することになるため、面倒な環境構築は不要
スクリプトエディタに書いたスクリプトはGoogleのサーバー上で動くため、自前のサーバーも不要
ただしconst, letなどは使えないらしい
サッカーニュース配信
取得機能
取得元はゲキサカのrss
// サッカーニュースの取得
function getSoccerNews() {
var options =
{
"contentType" : "text/xml;charset=utf-8",
"method" : "get",
};
var response = UrlFetchApp.fetch("https://web.gekisaka.jp/feed", options);
var xmlDoc = XmlService.parse(response.getContentText());
var rootDoc = xmlDoc.getRootElement();
var item = parser.getElementsByTagName(rootDoc, 'item')
//最新記事のタイトルとリンク取得
var title = parser.getElementsByTagName(item[0],'title');
var link = parser.getElementsByTagName(item[0], 'link');
var msgSoccerNews = [title[0].getValue(), link[0].getValue()];
return msgSoccerNews
}
配信機能
// 通知機能
function push_soccer_message() {
var msgSoccerNews = getSoccerNews();
var postData = {
"to": USER_ID, //lineのユーザーID
"messages": [
{
"type": "text",
"text": msgSoccerNews[0] + msgSoccerNews[1]
}
]}
var headers = {
"Content-Type": "application/json",
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, //lineのアクセストークン
};
var options = {
"method": "post",
"headers": headers,
"payload": JSON.stringify(postData)
};
var response = UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", options);
}
GASには定期実行の機能があるので、4時間ごとにpush_soccer_message
を実行
完成!
会話BOT
APIはリクルートが提供するTalk APIを使用
//ポストで送られてくるので、送られてきたJSONをパース
function doPost(e) {
var json = JSON.parse(e.postData.contents);
//返信するためのトークン取得
var reply_token= json.events[0].replyToken;
if (typeof reply_token === 'undefined') {
return;
}
//送られたメッセージ内容を取得
var message = json.events[0].message.text;
//talk apiに送信するデータ
var postData = {
"apikey": api_key, //取得したapikey
"query": message
}
//api通信
var response = UrlFetchApp.fetch("https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk", {
"method": "POST",
"payload": postData,
})
//返信文言
var reply = JSON.parse(response).results[0].reply;
var options = {
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: reply,
}],
}),
}
// メッセージを返信
UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply',options);
}
完成!
学んだこと
APIっていう便利なやつ・・・自分で外部のAPIにつなぐのが初めてだったのでいい勉強になった。ほかのAPIも使ってみたい!
GASっていう便利なやつ・・・サーバーレスで実装できるので実装のハードルが下がる
Webhook・・・サービス側のpostリクエスト先を指定できるやつ
fetch api・・・リクエストを送信できる
パーサ・・・構文解析を行う