質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1320閲覧

【初心者】【30分でやる】Google Spread Sheetで管理するLINE BOTの作り方ができない

takano-

総合スコア9

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2020/03/26 13:26

前提・実現したいこと

こちらの記事を参考にチャットボットを作成しようと思っています。
https://qiita.com/WdknWdkn/items/b78ae572e7cb5c9dfdca

超初心者です。

発生している問題・エラーメッセージ

既読はつくが、返信が帰ってこない

該当のソースコード

// 利用しているシート var SHEET_ID = '(1nAQIaKcmXlwzZWMw6yCwFiu4Rt-PLzkRw7gztfSf2E0)'; // 利用しているSSのシート名(※変えるとみえなくなる) var SHEET_NAME = 'faq'; // 利用しているもしかしてSSのシート名(※変えるとみえなくなる) var SHEET_NAME_MAYBE = 'maybe'; // LINE Message API アクセストークン var ACCESS_TOKEN = '(UY6wdZ9Khtv/K8R8a6jIH7tO7dBEBP0rMWBkxERAgeenD+80BYZPE1kzDzatw9lNp3X82gziRZGO1Yiedzb5XWyLztNfWNwHqzlEB1Ji658xrmmLd8Fi6LcFEep4E3gXo9kb088PH63VY8C0w683yQdB04t89/1O/w1cDnyilFU=)'; // 通知URL var PUSH = "https://api.line.me/v2/bot/message/push"; // リプライ時URL var REPLY = "https://api.line.me/v2/bot/message/reply"; // プロフィール取得URL var PROFILE = "https://api.line.me/v2/profile"; /** * doPOST * POSTリクエストのハンドリング */ function doPost(e) { var json = JSON.parse(e.postData.contents); reply(json); } /** * doGet * GETリクエストのハンドリング */ function doGet(e) { return ContentService.createTextOutput("SUCCESS"); } /** * reply * ユーザからのアクションに返信する */ function reply(data) { // POST情報から必要データを抽出 var lineUserId = data.events[0].source.userId; var postMsg = data.events[0].message.text; var replyToken = data.events[0].replyToken; var action = data.events[0].message.action; // 記録用に検索語とuserIdを記録 // debug(postMsg, lineUserId); debug(action, lineUserId); // 検索語に対しての回答をSSから取得 var answers = findResponseArray(postMsg); // 回答メッセージを作成 var replyText = '「' + postMsg + '」ですね。かしこまりました。以下、回答です。'; // 回答の有無に応じて分岐 if (answers.length === 0) { // 「類似の検索キーワード」がないかチェック var mayBeWord = findMaybe(postMsg); if (typeof mayBeWord === "undefined") { // 回答がない場合の定型文 sendMessage(replyToken, '答えが見つかりませんでした。別のキーワードで質問してみてください。'); } else { sendMayBe(replyToken, mayBeWord); } } else { // 回答がある場合のメッセージ生成 answers.forEach(function(answer) { replyText = replyText + "\n\n=============\n\nQ:" + answer.key + "\n\nA:" + answer.value; }); // 1000文字を超える場合は途中で切る if (replyText.length > 1000) { replyText = replyText.slice(0,1000) + "……\n\n=============\n\n回答文字数オーバーです。詳細に検索キーワードを絞ってください。"; } // メッセージAPI送信 sendMessage(replyToken, replyText); } } // SSからデータを取得 function getData() { var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME); var data = sheet.getDataRange().getValues(); return data.map(function(row) { return {key: row[0], value: row[1], type: row[2]}; }); } // SSから「もしかして」データを取得 function getMayBeData() { var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME_MAYBE); var data = sheet.getDataRange().getValues(); return data.map(function(row) { return {key: row[0], value: row[1], type: row[2]}; }); } // 単語が一致したセルの回答を配列で返す function findResponseArray(word) { // スペース検索用のスペースを半角に統一 word = word.replace(' ',' '); // 単語ごとに配列に分割 var wordArray = word.split(' '); return getData().reduce(function(memo, row) { // 値が入っているか if (row.value) { // AND検索ですべての単語を含んでいるか var matchCnt = 0; wordArray.forEach(function(wordUnit) { // 単語を含んでいればtrue if (row.key.indexOf(wordUnit) > -1) { matchCnt = matchCnt + 1; } }); if (wordArray.length === matchCnt) { memo.push(row); } } return memo; }, []) || []; } // 単語が一致したセルの回答を「もしかして」を返す function findMaybe(word) { return getMayBeData().reduce(function(memo, row) { return memo || (row.key === word && row.value); }, false) || undefined; } // 画像形式でAPI送信 function sendMessageImage(replyToken, imageUrl) { // replyするメッセージの定義 var postData = { "replyToken" : replyToken, "messages" : [ { "type": "image", "originalContentUrl": imageUrl } ] }; return postMessage(postData); } // LINE messaging apiにJSON形式でデータをPOST function sendMessage(replyToken, replyText) { // replyするメッセージの定義 var postData = { "replyToken" : replyToken, "messages" : [ { "type" : "text", "text" : replyText } ] }; return postMessage(postData); } // LINE messaging apiにJSON形式で確認をPOST function sendMayBe(replyToken, mayBeWord) { // replyするメッセージの定義 var postData = { "replyToken" : replyToken, "messages" : [ { "type" : "template", "altText" : "もしかして検索キーワードは「" + mayBeWord + "」ですか?", "template": { "type": "confirm", "actions": [ { "type":"postback", "label":"はい", "data":"action=detail", }, { "type": "message", "label": "いいえ", "text": "いいえ、違います。" } ], "text": "答えが見つかりませんでした。もしかして検索キーワードは「" + mayBeWord + "」ですか?" } } ] }; return postMessage(postData); } // LINE messaging apiにJSON形式でデータをPOST function postMessage(postData) { // リクエストヘッダ var headers = { "Content-Type" : "application/json; charset=UTF-8", "Authorization" : "Bearer " + ACCESS_TOKEN }; // POSTオプション作成 var options = { "method" : "POST", "headers" : headers, "payload" : JSON.stringify(postData) }; return UrlFetchApp.fetch(REPLY, options); } /** ユーザーのアカウント名を取得 */ function getUserDisplayName(userId) { var url = 'https://api.line.me/v2/bot/profile/' + userId; var userProfile = UrlFetchApp.fetch(url,{ 'headers': { 'Authorization' : 'Bearer ' + ACCESS_TOKEN, }, }) return JSON.parse(userProfile).displayName; } // userIdシートに記載 function lineUserId(userId) { var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('userId'); sheet.appendRow([userId]); } // debugシートに値を記載 function debug(text, userId) { var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('debug'); var date = new Date(); var userName = getUserDisplayName(userId); sheet.appendRow([userId, userName, text, Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd HH:mm:ss')]); }

試したこと

・当たり前ですが、スプレッドシートのID入力/TOKEN入力はしています
・新規で作成
・Webhookの利用のON
・匿名含むを選択

補足情報(FW/ツールのバージョンなど)

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2020/03/26 14:05

debug シートに書き込みはありますか? id や token に () があるのですが、これは本当はないのですよね?
takano-

2020/03/26 14:07

夜分にありがとうございます。 debug書き込みはありません… え…()をつけておりました。
takano-

2020/03/26 22:57

初心者過ぎてお恥ずかしい限りです… ()をつけたら無事に返信が帰ってきました。 papinianusさん本当にありがとうございます!
papinianus

2020/03/26 23:27

お手数ですが、回答に、tokenに余分な文字があった旨記入し、自己解決としてください
takano-

2020/03/27 00:09

はい!承知しました!
guest

回答1

0

自己解決

papinianusさんにご指摘して頂きました。

tokenに余分な文字()が入っており、送信できなかった。

投稿2020/03/27 00:10

takano-

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問