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

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

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

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

2362閲覧

GASでを使い、LINE Messaging API でスタンプに反応するためには

Yo_4040

総合スコア20

LINE Messaging API

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/06/22 11:50

#問題 LINE Messaging APIでスタンプに反応したい

私はGoogle Apps ScriptでLINEのbotを作っています。
キーワードに反応してテキストを返すなどは出来ています。
ですが、スタンプにも反応させたいです。

以下は私が使っているソースの一部を抜き取ったものです。
スタンプに反応させるにはどこを改善すれば宜しいのでしょうか?

###該当のソースコード

gs

1const access_token = 'botのアクセストークン'; 2 3function doPost(e) { 4 var events = JSON.parse(e.postData.contents).events; 5 var replyToken_ = e.replyToken; 6 events.forEach(function (event) { 7 switch (event.type) { 8 case 'message': 9 reply(event); 10 break; 11 default: 12 ; 13 break; 14 } 15 }); 16} 17 18function reply(e) { 19 var replyToken_ = e.replyToken; 20 var mess_type = e.message.type; 21 var pkg_id = e.message.packageId; 22 var sid = e.message.stickerId; 23 24 if(mess_type == "sticker"){ 25 var message = { 26 'replyToken': replyToken_, 27 'messages': [{ 28 "type": "text", 29 "text": "スタンプだよ" //返信が出来れば、packageIdとstickerIdも返信するようにするつもりです。 30}] 31 }; 32 } 33 34 var replyData = { 35 'method': 'post', 36 'headers': { 37 'Content-Type': 'application/json', 38 'Authorization': 'Bearer ' + access_token 39 }, 40 'payload': JSON.stringify(message) 41 }; 42 UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply', replyData); 43}

###以下のエラーが出ました。

ReferenceError: replyToken is not defined at reply(コード:132:21) at [unknown function](コード:12:9) at doPost(コード:6:10)ReferenceError: replyToken is not defined at reply(コード:132:21) at [unknown function](コード:12:9) at doPost(コード:6:10)

ここでつまずいてしまいました。
どなたかご指摘頂けないでしょうか?

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

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

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

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

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

guest

回答2

0

replyToken という変数ソースに出てこない(出てくるのは"replyToken_"と"e.replyToken"だけ)ので、このエラー自体発生しない気がします。
ウェブアプリケーションとして導入しているバージョンと最新のソースが一致していないとかないでですか?
改めて最新バージョン(New)をウェブアプリケーションとして導入して見てください。


(勘違いだったので取り消し)
それとは別にソースにもおかしなところがあります。
doPost ではメッセージタイプが "message" の場合だけ reply を呼び出していますが、reply ではメッセージタイプが "sticker" の場合だけ、メッセージオブジェクト作成しています。

投稿2020/06/22 15:43

編集2020/06/23 09:05
draq

総合スコア2573

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

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

Yo_4040

2020/06/23 07:30

LINEでは、messageの中にいくつかタイプがあり、その一つがstickerです。
draq

2020/06/23 09:05

すいません、回答の後半は勘違いでしたね。取り消します。
guest

0

ベストアンサー

doPost(e) の「var replyToken_ = e.replyToken;」は必要なんですかね。。
メッセージでオウム返しできてるのならば、確定ではないですが、エラー見る限りそのあたりですかね。。

投稿2020/06/22 12:39

MasakiTM

総合スコア115

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

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

Yo_4040

2020/06/23 07:27

無くしてみましたが変わりませんでした、、
MasakiTM

2020/06/23 23:03 編集

このコードでうまくいけました! これでやってたつもりですが、一時は私もなぜかうまくいかない症状に。。。 それでで、stickerをimageに変えて画像送信→うまくいけた またimageをstickerに変えて(履歴のスタンプばっかり送ってたので) リストから選択してスタンプを送っったら返ってきました。 //var url の最後はreply';です。表示ばぐってます var CHANNEL_ACCESS_TOKEN = "アクセストークン" var url = 'https://api.line.me/v2/bot/message/reply'; function doPost(e) { var event = JSON.parse(e.postData.contents).events[0]; var replyToken= event.replyToken; if (typeof replyToken === 'undefined') { return; } var userId = event.source.userId; if(event.message.type == 'sticker') { var replyMessage = "スタンプだよ"; UrlFetchApp.fetch(url, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify({ 'replyToken': replyToken, 'messages': [{ 'type': 'text', 'text': replyMessage, }], }), }); return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); } }
Yo_4040

2020/06/24 03:12

このソースをコピーしたらしっかりスタンプに反応しました!ありがとうございます!今、自分のソースに埋め込もうとしています。私のソースコードに入れる場合どのように入れれば良いかお分かりになりますか ?
MasakiTM

2020/06/24 03:52

元のソースが動かないと言われたので作り直したのですが。。 とりあえずスタンプに返信できればよかったんですよね。。 後は応用でやりたいことできませんか?
Yo_4040

2020/06/24 06:09

すみません、質問の仕方が悪かったようです... 「該当のソースコード」24行目の if(mess_type == "sticker")を if(mess_type == "text")と書き換えると、しっかりユーザーが送信したテキストに「スタンプだよ」と返信してくれるのですが、stickerにするとスタンプに返信してくれないんです。 そこで元のソースに何が足りないのかが知りたかったのですが、見当つきますか?
MasakiTM

2020/06/24 06:30

今、元のソースコピーして動作確認しましたがスタンプ返ってきましたよ。 もう一度やってみてください。 昨日書いた通り一回スタンプのリスト表示させるとかも関係あるんですかね。。 よくわかりません。
Yo_4040

2020/06/24 06:44 編集

スタンプのリスト表示というのは....? 元のソースでも動きました! 私、色々テキストに反応するようにさせているのですが、テキスト返信とスタンプ返信は干渉したりするのでしょうか?質問ばかりですみません<(_ _)>
MasakiTM

2020/06/24 06:48

昨日私も過去のスタンプ履歴から送って、返ってこないのが続いてたんです。 その後、あなたのソースでいうmess_typeに色々入れて(imageなど)返ってくることを確認。 その後、再度stickerに変えて、端末のスタンプをあれこれ選んで(スタンプリストから選んで)送信してたら急に返ってくるようになりました。 とりあえず動いたならよかったですね。 また作りこんで、問題起きたら教えてください。
Yo_4040

2020/06/24 06:51

そ、そうなんですね...???? 色々ありがとうございました! いっぱいスタンプ送ってみます????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問