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

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

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

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

API

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

Q&A

解決済

1回答

2226閲覧

[LINE Message API / Laravel] メッセージが送信できない。

RyoS_

総合スコア4

LINE Messaging API

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

API

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

0グッド

0クリップ

投稿2021/05/26 01:02

編集2021/05/27 01:38

前提・実現したいこと

ボットから応答メッセージを行いたいのですが、メッセージを送信することができません。

https://developers.line.biz/ja/reference/messaging-api/#send-reply-message

AuthorizationreplyTokenが間違っていないことは確認しています。

使用パッケージ

guzzle

エラー内容

**「リクエストボディがJSONとして解析できません」**というエラー内容が返ってきました。

local.ERROR: Client error: `POST https://api.line.me/v2/bot/message/reply` resulted in a `400 Bad Request` response: {"message":"The request body could not be parsed as JSON (line: 1, column: 12)"} {"exception":"[object] (GuzzleHttp\Exception\ClientException(code: 400): Client error: `POST https://api.line.me/v2/bot/message/reply` resulted in a `400 Bad Request` response: {\"message\":\"The request body could not be parsed as JSON (line: 1, column: 12)\"} at /laravel/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113) "}

コード

<?php // logs use Illuminate\Support\Facades\Log; // Guzzle use GuzzleHttp\Client; $messages = json_encode([ "type" => "flex", "altText" => "This is a Flex Message", "contents" => [ "type" => "bubble", "body" => [ "type" => "box", "layout" => "horizontal", "contents" => [ [ "type" => "text", "text" => "Hello," ], [ "type" => "text", "text" => "World!" ] ] ] ] ]); Log::info($messages); //guzzle $line_url = "https://api.line.me/v2/bot/message/reply"; $client = new Client(); $options = [ "headers" => [ "Content-Type" => "application/json", "Authorization" => "Bearer " . $channelAccessToken, ], "form_params" => [ "replyToken" => $replyToken, "messages" => $messages ] ]; Log::info($options); $client->request( "POST", $line_url, $options );

ログ

JSONになっているか確認するためログを使いました。

$messages

問題なくJSONになっていました。

{ "type": "flex", "altText": "This is a Flex Message", "contents": { "type": "bubble", "body": { "type": "box", "layout": "horizontal", "contents": [ { "type": "text", "text": "Hello," }, { "type": "text", "text": "World!" } ] } } }

イメージ説明

$options

array ( 'headers' => array ( 'Content-Type' => 'application/json', 'Authorization' => 'Bearer zTon3fKIG7m7dH1/AnyA/~~, ), 'form_params' => array ( 'replyToken' => '16bc990fb7ab46028cbceb00000000', 'messages' => '{"type":"flex","altText":"This is a Flex Message","contents":{"type":"bubble","body":{"type":"box","layout":"horizontal","contents":[{"type":"text","text":"Hello,"},{"type":"text","text":"World!"}]}}}', ), )

curlの場合

curlの場合、replyTokenが使えないため、応答メッセージではなくプッシュメッセージになりますがこちらでも試してみました。
https://developers.line.biz/ja/reference/messaging-api/#send-push-message

結果は正しく送信することができました。
コードは以下の通りです。

curl -v -X POST https://api.line.me/v2/bot/message/push \ -H "Content-Type: application/json" \ -H "Authorization: Bearer zTon3fKIG7m7dH1/AnyA/~~ \ -d '{ "to": "Udf9ab83bf44a25cd9a90f000000000", "messages":[ {"type":"flex","altText":"This is a Flex Message","contents":{"type":"bubble","body":{"type":"box","layout":"horizontal","contents":[{"type":"text","text":"Hello,"},{"type":"text","text":"World!"}]}}} ] }'

お聞きしたいこと

JSON化は正しくできているのになぜこのようなエラーが発生するのでしょうか?

大変恐縮ですが、ご教授お願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

guzzleを使うのをやめてcurlにしたところうまくいきました。

投稿2021/06/06 09:17

RyoS_

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問