Q&A

LINE Message APIを使ってPushメッセージが送る事ができない

LINE Message APIを使ってPushメッセージを送りたいのですが実装できません。

実際はPHPで送信するスクリプトを作って見たのですが送信できず、そもそもPUSHメッセージの送信自体が出来るのか確認するためにコマンドで実行を試みています。

PHPでの検証内容については、別サイトで恐縮ですがTeratailに記載しています。 (上記と重複しますが単純に送信する事が出来ないので、原因究明をしている状態です。) https://teratail.com/questions/187726

環境について

PCはMacを使用しています。 メッセージを送信する元のチャンネルのプランは「For Developer」ですので、プッシュメッセージは送れると思われます。

試した事

ターミナルから下記のコマンドを実行しました。

$ curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type:application/json' \
-H 'Authorization: Bearer チャンネルのアクセストークン
' \
-d '{
    "to": "ユーザーID",
    "messages":{
        {
            "type": "text",
            "text": "Hello, world1"
        }
    }
}'

結果

下記の様なエラーが返ってきます。 "Could not read the request body"と言うエラーから、リクエストの内容が読み込めない問題が怒っています。

* upload completely sent off: 240 out of 240 bytes
< HTTP/1.1 400 Bad Request
< Server: nginx
< Date: Sun, 05 May 2019 15:45:54 GMT
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< x-line-request-id: ***
< x-content-type-options: nosniff
< x-xss-protection: 1; mode=block
< cache-control: no-cache, no-store, max-age=0, must-revalidate
< pragma: no-cache
< expires: 0
< x-frame-options: DENY
<
* Connection #0 to host api.line.me left intact
{"message":"Could not read the request body"}

以上です。 API以前の話かもしれませんが、記述自体に誤りを見つけられず解決方法が見つからない状態です。 何が原因だと思われますでしょうか? 開発環境でインストールしていない物がある可能性がありますでしょうか?

改行を取り除いた場合

比企宏之様より、ご指摘いただいた事を踏まえて改行を取りぞのいて送信してみました。 しかし、メッセージが送信できませんでした。

チャンネルを作り直してアクセストークンを新しいものに変えてみましたが変わりませんでした。

コマンド

$ curl -v -X POST https://api.line.me/v2/bot/message/push -H 'Content-Type:application/json' -H 'Authorization: Bearer アクセストークン' -d '{"to": "ユーザーID","messages":{{"type": "text","text": "Hello, world1"}}}'

出力結果

エラー結果が変わって、次のようなエラーが出るようになりました。

The property, 'messages', in the request body is invalid

messagesの形式が異なると返ってきました。 配列の形式に何か間違いがあるのでしょうか?

Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 203.104.153.64...
* TCP_NODELAY set
* Connected to api.line.me (203.104.153.64) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=*.line.me
*  start date: Aug  6 00:00:00 2018 GMT
*  expire date: Aug  5 12:00:00 2020 GMT
*  subjectAltName: host "api.line.me" matched cert's "*.line.me"
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=GeoTrust RSA CA 2018
*  SSL certificate verify ok.
> POST /v2/bot/message/push HTTP/1.1
> Host: api.line.me
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type:application/json
> Authorization: Bearer チャンネルのアクセストークン
> Content-Length: 97
>
* upload completely sent off: 97 out of 97 bytes
< HTTP/1.1 400 Bad Request
< Server: nginx
< Date: Thu, 09 May 2019 15:58:00 GMT
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< x-line-request-id: xxx
< x-content-type-options: nosniff
< x-xss-protection: 1; mode=block
< cache-control: no-cache, no-store, max-age=0, must-revalidate
< pragma: no-cache
< expires: 0
< x-frame-options: DENY
<
* Connection #0 to host api.line.me left intact
{"message":"The property, 'messages', in the request body is invalid (line: 1, column: 55)"}
  • 0
  • 3
  • 5512
  • twitter facebook

messagesは配列ではないでしょうか?

% curl -v -X POST https://api.line.me/v2/bot/message/push -H 'Content-Type:application/json' -H 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' -d '{"to": YOUR_USER_ID_HERE","messages":[{"type": "text","text": "Hello, world1"}]}'
  • 0

比企宏之様

ご指摘ありがとうございます。 改行した事で何か不要な要素が入ったのかもしれません。

ただ、試してみたのですが送信ができません。 送信の仕方自体あまり難しい事をしていないはずなので、改行以外で何か初歩的な所を見落としているかもしれません。

  • 0

-H 'Authorization: Bearer チャンネルのアクセストークン '
を -H 'Authorization: Bearer チャンネルのアクセストークン'
として、 -dの部分を -d '{"to": "ユーザーID","messages":{{"type": "text","text": "Hello, world1"}}}' のように一度一行で書いてみてはいかがでしょうか?

  • 0
本当によろしいですか? question.vm