実現したいこと
LINEbotでアンケートを作成しました。アンケートのA、B、C、Dとありどれかを選択したらそれぞれ別の文字のtextとemojisが送られます。
A、B、Cを選択した場合のみ、textとemojisと一緒に作成したflexmessageも送られるようにしたい。
GAS
1function handlePostback(e) { 2 const postbackData = e.postback.data; 3 if (postbackData === "A") { 4 replyToLine(e.replyToken, { 5 type: "text", 6 type: "text", 7 text: "$ ご回答ありがとうございます。$すべての種別で登録しました。$これから###に関わるすべての情報を配信しますね$####会員限定、下記特別チケット画像をクリックしクーポンを1階又は2階フロントでご提示ください$特別チケット1枚と交換いたします$", 8 emojis: [ 9 { index: 0, productId: "5ac1bfd5040ab15980c9b435", emojiId: "191" }, 10 { index: 16, productId: "5ac1bfd5040ab15980c9b435", emojiId: "193" }, 11 { index: 31, productId: "5ac1bfd5040ab15980c9b435", emojiId: "195" }, 12 { index: 56, productId: "5ac1bfd5040ab15980c9b435", emojiId: "196" }, 13 { index: 105, productId: "5ac1bfd5040ab15980c9b435", emojiId: "192" }, 14 { index: 122, productId: "5ac1bfd5040ab15980c9b435", emojiId: "194" } 15 16 ] 17 }); 18 } else if (postbackData === "B") { 19 replyToLine(e.replyToken, { 20 type: "text", 21 type: "text", 22 text: "$ ご回答ありがとうございます。$#####&#######で登録しました$これから########の###################に空きが出た場合にお知らせを配信しますね$", 23 emojis: [ 24 { index: 0, productId: "5ac1bfd5040ab15980c9b435", emojiId: "088" }, 25 { index: 16, productId: "5ac1bfd5040ab15980c9b435", emojiId: "089" }, 26 { index: 37, productId: "5ac1bfd5040ab15980c9b435", emojiId: "093" }, 27 { index: 87, productId: "5ac1bfd5040ab15980c9b435", emojiId: "094" } 28 ] 29 }); 30 } else if (postbackData === "C") { 31 replyToLine(e.replyToken, { 32 type: "text", 33 type: "text", 34 text: "$ ご回答ありがとうございます。$すべての種別で登録しました。$これから###に関わるすべての情報を配信しますね$####会員限定、下記特別チケット画像をクリックしクーポンを1階又は2階フロントでご提示ください$特別チケット1枚と交換いたします$", 35 emojis: [ 36 { index: 0, productId: "5ac1bfd5040ab15980c9b435", emojiId: "077" }, 37 { index: 16, productId: "5ac1bfd5040ab15980c9b435", emojiId: "080" }, 38 { index: 37, productId: "5ac1bfd5040ab15980c9b435", emojiId: "082" }, 39 { index: 66, productId: "5ac1bfd5040ab15980c9b435", emojiId: "085" }, 40 { index: 115, productId: "5ac1bfd5040ab15980c9b435", emojiId: "076" }, 41 { index: 132, productId: "5ac1bfd5040ab15980c9b435", emojiId: "080" } 42 ] 43 }); 44 } else if (postbackData === "D") { 45 replyToLine(e.replyToken, { 46 type: "text", 47 type: "text", 48 text: "$ ご回答ありがとうございます。$#############で登録しました$############に空きが出た場合にお知らせを配信しますね$", 49 emojis: [ 50 { index: 0, productId: "5ac1bfd5040ab15980c9b435", emojiId: "066" }, 51 { index: 16, productId: "5ac1bfd5040ab15980c9b435", emojiId: "068" }, 52 { index: 37, productId: "5ac1bfd5040ab15980c9b435", emojiId: "073" }, 53 { index: 70, productId: "5ac1bfd5040ab15980c9b435", emojiId: "074" } 54 ] 55 }); 56 57 if (["A", "B", "C"].includes(postbackData)) { 58 messages.push(flex_message); 59 } 60 61 if (messages.length > 0) { 62 replyToLine(e.replyToken, messages); 63 } 64} 65
const flex_message = { "type": "bubble", "hero": { "type": "image", "url": "#############", "size": "full", "aspectRatio": "15:15", "aspectMode": "cover", "margin": "none" }, "body": { "type": "box", "layout": "vertical", "spacing": "md", "action": { "type": "uri", "uri": "######" }, "contents": [ { "type": "text", "text": "チケット", "size": "lg", "weight": "bold", "offsetTop": "none", "align": "center" }, { "type": "text", "text": "お一人様一回までのご利用になります", "wrap": true, "color": "#808080", "size": "xxs", "align": "center", "margin": "xs" } ] }, "footer": { "type": "box", "layout": "vertical", "contents": [ { "type": "button", "style": "primary", "color": "#191970", "margin": "none", "action": { "type": "uri", "label": "クーポンはこちら", "uri": "######" } } ] } };
発生している問題・分からないこと
GAS
1if (["A", "B", "C"].includes(postbackData)) { 2 messages.push(flex_message); 3 } 4 5 if (messages.length > 0) { 6 replyToLine(e.replyToken, messages); 7 }
上記のcodeが間違ってると思うのですがわかりません.
if (["A", "B", "C"].includes(postbackData)) {
messages.push(JSON.parse(JSON.stringify(flex_message)));
}
if (messages.length > 0) {
replyToLine(e.replyToken, messages);
}
こちらに書き換えてもても出ませんでした。
該当のソースコード
1if (["A", "B", "C"].includes(postbackData)) { 2 messages.push(flex_message); 3 }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
上記codeを入れた場合、flex messageは出ませんでした。ただtextとemojisは出ます。
補足
特になし
} else if (postbackData === "D") {
このif文が
if (["A", "B", "C"].includes(postbackData)) {
の前で閉じられていないのではないですか?
コメントありがとうございます。修正しました。
}if (["全部", "メンバー&スクール", "メンバー会員"].includes(postbackData)) {
messages.push(flex_message);
}
if (messages.length > 0) {
replyToLine(e.replyToken, messages);
}
こういう意味でしょうか?
少し違います
提示されているコードは下記のようになっていました。
if ( A?) {
} else if (B?) {
} else if (C?) {
} else if (D?) {
if (A?B?C?) {
}
}
これを
if ( A?) {
} else if (B?) {
} else if (C?) {
} else if (D?) {
}
if (A?B?C?) {
}
こうなのではないかということです。
提示されたコードは少し修正されているみたいですし、その部分が変わってないか元のコードとも比較してみてください。
これだけではないですが、ログを出力するなどして値がどうなっているのか、どこの部分が実行されているのかなどを確認してみましょう。
またメッセージはまずは無条件で送信したい物を送信して構築したメッセージが正しいのかを確認してから組み込むほうがいいです。
そうしないとロジックが悪くてその箇所を通らないのか通るけどメッセージが正しくないので送信されないのか切り分けしやすいです。

回答1件
あなたの回答
tips
プレビュー