(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【LINE公式アカウント】API経由でBotメッセージを送付する

スポンサーリンク

はじめに

個人用で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公式アカウントを作成する

以下のサイトから公式アカウントをフリープランで用意しました。

フリープランは無料で利用できる代わりに一か月あたりに送れるメッセージ数に制限がありますが、一日数通しか想定していないので問題ありません。

アカウントを用意後は以下の設定画面から

f:id:mtiit:20200321220543p:plain
LineOfficialAccountManager>設定>MessagingAPI
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」の設定が行え

f:id:mtiit:20200321223411p:plain
LINEDeveloper>MessagingAPISetting
そこで以下のようにアクセストークンを「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経由であればより柔軟なメッセージを全体に送付できます。
本記事が同様な作業を実施する方の参考になれば幸いです。