前提・実現したいこと
ボットから応答メッセージを行いたいのですが、メッセージを送信することができません。
https://developers.line.biz/ja/reference/messaging-api/#send-reply-message
Authorization
やreplyToken
が間違っていないことは確認しています。
使用パッケージ
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化は正しくできているのになぜこのようなエラーが発生するのでしょうか?
大変恐縮ですが、ご教授お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。