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

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

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

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

API

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

Q&A

解決済

1回答

160閲覧

LINE にflexmessageを返信したい

Tsubanishi

総合スコア45

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

API

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

0グッド

0クリップ

投稿2025/03/03 15:39

編集2025/03/04 17:01

実現したいこと

LINEに”お友だち登録ありがとうございます!”の文字を入力した場合にGASが発動し、LINEへflexmessageが出る。flexmessageのアンケートに答えると選択したものによって返答を変えたい
・できている事
AでもBでもどれを選択してもご回答ありがとうございます。登録しましたと出る

GAS

1function handlePostback(e) { 2 const postbackData = e.postback.data; 3 if (["A", "B", "C", "D", "E", "全部"].includes(postbackData)) { 4 const cells = sheet.createTextFinder(e.source.userId).findAll(); 5 if (cells.length == 0) { 6 sheet.appendRow([e.source.userId, postbackData]); 7 } else { 8 cells[0].offset(0, 1).setValue(postbackData); 9 } 10 replyToLine(e.replyToken, { type: "text", text: "ご回答ありがとうございます。登録しました。" }); 11 } 12}

・できていない事
Aを選択したときは、Aに対する回答、Bを選択した際はBに関する回答にしたい

発生している問題・分からないこと

分岐のcodeがわからない

該当のソースコード

Bを選択の時は違う回答をするcodeを記入した

GAS

1function handlePostback(e) { 2 const postbackData = e.postback.data; 3 if (postbackData === "B") { 4 replyToLine(e.replyToken, { 5 type: "text", 6 text: "ご回答ありがとうございます。\n Bで登録しました。\nこれからBのお知らせを配信しますね。", 7 emojis: [ 8 { index: 15, productId: "5ac1bfd5040ab15980c9b435", emojiId: "038" }, 9 { index: 27, productId: "5ac1bfd5040ab15980c9b435", emojiId: "044" }, 10 { index: 46, productId: "5ac1bfd5040ab15980c9b435", emojiId: "047" }, 11 { index: 58, productId: "5ac1bfd5040ab15980c9b435", emojiId: "056" } 12 ] 13 }); 14 } else if (["A", "C", "D", "E", "全部"].includes(postbackData)) { 15 const cells = sheet.createTextFinder(e.source.userId).findAll(); 16 if (cells.length == 0) { 17 sheet.appendRow([e.source.userId, postbackData]); 18 } else { 19 cells[0].offset(0, 1).setValue(postbackData); 20 } 21 replyToLine(e.replyToken, { type: "text", text: "ご回答ありがとうございます。登録しました。" }); 22 } 23}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

codeをBを選択した場合のみ違う回答が出るcodeを組んだが、結果Bを選択した場合のみ回答が出なくなった他、AやCを選択した場合は従来通りのご回答ありがとうございます。登録しました。の文字が出る

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

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

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

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

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

YAmaGNZ

2025/03/04 22:10 編集

emojis部分をなくして文字列だけにしたらどうなりますか?
Tsubanishi

2025/03/05 05:51

コメントありがとうございます。 emojis: [ { index: 15, productId: "5ac1bfd5040ab15980c9b435", emojiId: "038" }, { index: 27, productId: "5ac1bfd5040ab15980c9b435", emojiId: "044" }, { index: 46, productId: "5ac1bfd5040ab15980c9b435", emojiId: "047" }, { index: 58, productId: "5ac1bfd5040ab15980c9b435", emojiId: "056" } ] 上記code消したら、文字のみ出ました。 絵文字は入らないのでしょうか?
guest

回答1

0

ベストアンサー

LINE絵文字ですがAPIのテキストメッセージの説明にあるように

JSON

1 "emojis": [ 2 { 3 "index": 0, 4 "productId": "5ac1bfd5040ab15980c9b435", 5 "emojiId": "001" 6 } 7 ]

にあるindexに指定するものは

emojis.index Number
テキストの先頭を0とした、textプロパティ内の$(LINE絵文字のプレースホルダ)の位置。詳しくは、「テキストメッセージの例」を参照してください。

とあるように"text": "$ 絵文字テスト $"といった感じで絵文字を表示する場所に$を指定します。
そしてその$の場所をemojisのindexで指定する形になります。

上記の例でしたら

JSON

1{ 2 "type": "text", 3 "text": "$ 絵文字テスト $", 4 "emojis": [ 5 { 6 "index": 0, 7 "productId": "5ac1bfd5040ab15980c9b435", 8 "emojiId": "001" 9 }, 10 { 11 "index": 9, 12 "productId": "5ac1bfd5040ab15980c9b435", 13 "emojiId": "002" 14 } 15 ] 16}

といった形になります。
もしこの$とのマッチングがされていないと

ここで指定した位置と、$の位置が一致しない場合は、400 Bad requestが返されます。

とリファレンスに書いてあります。

提示されているコードですと

text: "ご回答ありがとうございます。\n Bで登録しました。\nこれからBのお知らせを配信しますね。"

$が指定されていないのでエラーになっていると思われます。
\nも1文字としてカウントされるので注意してください。

追記

javascript

1 var postData = { 2 "replyToken" : replyToken, 3 "messages" : [ 4 { 5 type: "text", 6 text: "$ ご回答ありがとうございます。$Bで登録しました。$これからBのお知らせを配信しますね。$", 7 emojis: [ 8 { index: 0, productId: "5ac1bfd5040ab15980c9b435", emojiId: "038" }, 9 { index: 16, productId: "5ac1bfd5040ab15980c9b435", emojiId: "044" }, 10 { index: 26, productId: "5ac1bfd5040ab15980c9b435", emojiId: "047" }, 11 { index: 45, productId: "5ac1bfd5040ab15980c9b435", emojiId: "056" } 12 ] 13 } 14 ] 15 };

といったコード(textやemojis部分は質問者さんのコードから手を加えていませんし実際のリプライ送信部分は省いています)で実際にリプライを送信してみましたが
イメージ説明
上記のように絵文字を含んだ正しい内容がリプライされました。

投稿2025/03/05 06:20

編集2025/03/05 12:14
YAmaGNZ

総合スコア10536

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

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

Tsubanishi

2025/03/05 11:50

回答ありがとうございます。試してみましたが解決できませんでした。 function handlePostback(e) { const postbackData = e.postback.data; let responseText = "ご回答ありがとうございます。登録しました。"; if (postbackData === "B") { response = { type: "text", text: "$ ご回答ありがとうございます。$Bで登録しました。$これからBのお知らせを配信しますね。$", emojis: [ { index: 0, productId: "5ac1bfd5040ab15980c9b435", emojiId: "038" }, { index: 16, productId: "5ac1bfd5040ab15980c9b435", emojiId: "044" }, { index: 26, productId: "5ac1bfd5040ab15980c9b435", emojiId: "047" }, { index: 45, productId: "5ac1bfd5040ab15980c9b435", emojiId: "056" } ] }; 上記codeにするとBを回答しても ご回答ありがとうございます。登録しました。としかで この場合どの辺りに原因がありそうでしょうか?
YAmaGNZ

2025/03/05 12:08

emojisの指定に関しては上記のコードであっているのではないかと思います。 実際にリプライを "messages" : [ { type: "text", text: "$ ご回答ありがとうございます。$Bで登録しました。$これからBのお知らせを配信しますね。$", emojis: [ { index: 0, productId: "5ac1bfd5040ab15980c9b435", emojiId: "038" }, { index: 16, productId: "5ac1bfd5040ab15980c9b435", emojiId: "044" }, { index: 26, productId: "5ac1bfd5040ab15980c9b435", emojiId: "047" }, { index: 45, productId: "5ac1bfd5040ab15980c9b435", emojiId: "056" } ] } ] と指定して送信してみましたが絵文字を含んだメッセージが正常に送信されました。 上記コードだけでは実際にリプライを送信する為のreplyToLine関数が呼ばれているのか確認できません。 質問に書かれているコードとも異なるロジックになっているようですし判断ができません。 ログを取るなどしてif内部が実行されているのか、実行された結果リプライが送信されているのかを確認してみてはどうでしょうか。
Tsubanishi

2025/03/05 13:27

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問