つまみログ

home
works
blog
HomeWorksBlogBalloonsEnvironmentStickersIconsAI Generated IconsLinksDownloadsIcon MakerWalking
高度な設定
HomeWorksBlogBalloonsEnvStickersIconsAI IconsDLCWalk
‌

‌
‌
‌

‌

‌
‌
‌

‌
‌

‌
‌
‌
‌
‌
‌
‌
‌

‌

‌
‌
‌
‌
‌
‌
‌
‌

© 2019-2025 つまみ
GitHubLegal

おうちMac+PythonでLINE botを作る

オウム返しするまでのメモ

投稿日
2021年
10月12日
読了予想時間
2 分
tag emoji技術
記事一覧ツイート訂正リクエスト
‌‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
tag emoji技術
thumbnail of line-bot

おうちMac+PythonでLINE botを作る

2021-10-12
2 min to read
記事一覧ツイート訂正リクエスト
タグ「技術」の新着記事
tag emoji技術
thumbnail of ai-icons

AIつまみアイコンを支える技術 (Webアプリ実装編)

2024-12-22
25 min to read
tag emoji技術
thumbnail of bun-bookmarklet

Bun + TypeScript でブックマークレットの開発体験を高める

2024-03-02
6 min to read
tag emoji技術
thumbnail of google-fonts-on-satori

Satori に Google Fonts を使う

2023-10-04
2 min to read
tag emoji技術
thumbnail of code-with-ai

コードはAIと書いた方が良い

2022-12-17
9 min to read
tag emoji技術
thumbnail of make-your-website

オタクのHPが見たすぎる

2022-03-08
10 min to read
tag emoji大学
tag emoji技術
thumbnail of otaku-channels

Disnake + GitHub Actions で作るオタク鯖晒しサイト

2021-12-16
7 min to read
もっと見る (さらに 4 件の記事)
もっと見る (さらに 7 件の記事)

導入までの覚え書き。オウム返しbotを作ることをゴールとします。(雑なので気が向いたら書き直すかもしれない)

LINE Developer に登録する

ここから頑張るとできる。

Messanging API のチャネルを作る

Providerを選んでMessanging API のチャネルを作る。できたら

  • チャネルシークレット
    • チャネル基本設定のタブにある
  • チャネルアクセストークン
    • Messaging API設定のタブにある

をメモしておく。あとで使う。

LINE Messaging API SDK for Python の導入

次にここのReadmeの通りに

Text
$ pip install line-bot-sdk

する。Flaskを入れてなかったら

Text
$ pip install flask

もする。

Readmeのサンプルコードをそのままもらって mylinebot.py として保存しておく。

このときさっきメモしたチャネルシークレットとチャネルアクセストークンをサンプルコードの対応する部分に貼り付ける。

Let's Encrypt で証明書の準備

LINEのAPIにはWebhookが必須、かつSSL対応のCallback URLが必要なのでこれをする必要がある。無理におうちでやる必要がないのならばHerokuでやった方が早いらしい。でもおうち環境で完結させたいので頑張る。SSL対応はLet's Encryptを使う。(オレオレ証明書だとLINEくんに弾かれるので)

ここで

  • おうちにつながるドメイン
    • ouchi.trpfrog.net みたいな
  • 80番のポート開放

が必要になるので準備しておく。したら次にcertbotを入れる。(Homebrewが必要)

Text
$ brew install certbot

次を実行。

Text
$ sudo certbot certonly --manual

いろいろ聞かれるので従う。最後に「.well_known/acme-challenge/XXXXXX」にYYYYYYを書いたファイルを用意してね、と言われるので準備する。その後、Webサーバを立ち上げて外部からそのファイルにアクセスできるようにする。つまり

Text
http://ouchi.trpfrog.net/.well_known/acme-challenge/XXXXXX

から指定された文字列 YYYYYY のテキストファイルが得られるようにすれば良い。

ここはFlaskを使ってやっても良いのだけれども、いまいち書き方がよくわからなかったので(え?) Dockerでnginx呼び出して殴ってしまった。

Text
$ docker run docker run -d -p 80:80 \
    -v $PWD:/usr/share/nginx/html \
    --name lets-tmp \
    nginx

Webサーバ立ち上げたらつながることを確認してcertbotを続行。うまくいくとどこかに

  • fullchain.pem
  • privkey.pem

ができるので、そのパスをメモしておく。

Webhookに使うサーバを起動

ここまでいったら起動する、がサンプルコードのままだと不都合なのでちょっと書き加える。

Text
app.run()

を

Text
app.run(host='自分のローカルIP', port=80, ssl_context=(
    'fullchain.pemへのパス', 
    'privkey.pemへのパス'
))

にする。これで実行する。ouchi.trpfrog.net にアクセスしてコンソールに反応があればOK。

Callback URLを登録

ここまでできたら、LINEのMessaging API設定からWebhookを登録する。

Text
https://ouchi.trpfrog.net/callback

みたいな感じで良い。検証をクリックしてうまくいけば成功。

やってみる

同じくMessaging API設定にQRコードがあるはずなので友達登録してみる。

なんか喋ってオウム返しされたら成功!お疲れ様でした。