はじめに
個人用でLINEのBotを作成し、CURLコマンドでメッセージを送付する流れは以下の記事で実践しましたが
本記事では作成したLINE公式アカウントにてCURLコマンドでメッセージを送付する流れを実践しました。
コマンド実行環境
$ curl --version curl 7.52.1 (x86_64-pc-linux-gnu) libcurl/7.52.1 OpenSSL/1.0.2u zlib/1.2.8 libidn2/0.16 libpsl/0.17.0 (+libidn2/0.16) libssh2/1.7.0 nghttp2/1.18.1 librtmp/2.3
LINE公式アカウントを作成する
以下のサイトから公式アカウントをフリープランで用意しました。
フリープランは無料で利用できる代わりに一か月あたりに送れるメッセージ数に制限がありますが、一日数通しか想定していないので問題ありません。
アカウントを用意後は以下の設定画面から「Messaging APIを利用」を行い、アカウント名、プロバイダー名を設定してChannelIDを用意しました。
MessagingAPIが利用でき以下のようにChannel ID と Channnel secretがブラウザ上で確認できます。
ステータス : 利用中
Channel ID : xxx
Channel secret : xxx
Line Developerでアクセストークンを発行する
以下にアクセスし
先ほどのチャネルIDを入力すると
https://developers.line.biz/console/channel/xxx
以下のような画面で「MessagingAPI」の設定が行えそこで以下のようにアクセストークンを「Issue」できます。
Channel access token
Issueボタンを押下すると文字列が表示されます。
アクセストークンを利用してメッセージを行う
以下をCURLコマンドで発行すれば
$ curl -X POST https://api.line.me/v2/bot/message/broadcast -H 'Content-Type: application/json' -H 'Authorization: Bearer <ACCESSTOKEN>' -d '{"messages":[{"type":"text","text":"Hello, world"}]}'
返り値が以下のようになり
{}
作成した公式アカウントに
Hello, world
と表示されます。
ちなみにv
オプションで詳細を確認すると以下のようになっていました。
Note: Unnecessary use of -X or --request, POST is already inferred. * Trying xx... * TCP_NODELAY set * Connected to api.line.me (xx) 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/certs/ca-certificates.crt CApath: /etc/ssl/certs * TLSv1.2 (OUT), TLS header, Certificate Status (22): * 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 accepted to use http/1.1 * Server certificate: * subject: C=JP; ST=Tokyo; L=Shinjuku-ku; O=LINE Corporation; CN=w.line.me * start date: ... * expire date: ... * subjectAltName: host "api.line.me" matched cert's "api.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/broadcast HTTP/1.1 > Host: api.line.me > User-Agent: curl/7.52.1 > Accept: */* > Content-Type: application/json > Authorization: Bearer ... > Content-Length: 53 > * upload completely sent off: 53 out of 53 bytes < HTTP/1.1 200 OK < Server: nginx < Content-Type: application/json < x-line-request-id: ... < x-content-type-options: nosniff < x-xss-protection: 1; mode=block < x-frame-options: DENY < Content-Length: 2 < Expires: .. < Cache-Control: max-age=0, no-cache, no-store < Pragma: no-cache < Date: .. < Connection: keep-alive < * Curl_http_done: called premature == 0 * Connection #0 to host api.line.me left intact
終わりに
LINE公式アカウントはブラウザ上から予約投稿も可能ですが、API経由であればより柔軟なメッセージを全体に送付できます。
本記事が同様な作業を実施する方の参考になれば幸いです。