✒️

Notion × LINE で瞬時にメモできるbotを作りました

2022/10/12に公開

はじめに

スマホから瞬時にメモをしてNotionでも確認できるbotを作りました。参考にしたサイト、記事なども部分的に紹介できればと思います。

完成したもの

できることはシンプルで2つだけです。

1. LINEのトークルームで入力した内容をNotionテーブルにも記録する。

2. webページもコメント付きで記録できる。

https://lin.ee/1qKzREu

作った背景

主にこちらの3つですが、自分が使い続けられるものをテーマにしました。

  • スマホからNotionへメモする速度を上げてストレスを減らしたい。
  • メモした履歴も見返したい。
  • 新たにアプリはインストールしたくない。

構成

Ruby
MySQL
Notion API
LINE API
Lambda

仕組み

特に複雑なことはしておらず、LINEトークルームで入力された情報をNotion APIを用いて登録しています。

Notion APIの下準備

利用者はNotionとの紐付けで以下の情報を事前に用意しておく必要があります。

  1. インテグレーショントークンの生成
  2. 紐付けを行うデータベースの作成
  3. データベースのあるページに先ほど生成したインテグレーションを許可(コネクトの追加)

紐付けるデータベースには"Name"プロパティを必須としており、投稿されたテキストが保存されていきます。
データベースの作成例↓

Notion APIを使って情報を送信

notion-ruby-clientの説明とPostmanで試したのが分かりやすかったです。
https://github.com/orbit-love/notion-ruby-client
https://www.postman.com/notionhq/workspace/notion-s-api-workspace/overview

# ユーザごとにクライアントを設定
notion = Notion::Client.new(token: user.notion_secret_token)

# ページの追加
notion.create_page(parent: { database_id: user.database_id}, properties: page_properties)
					
# ページの詳細も一緒に作成
notion.create_page(parent: { database_id: user.database_id}, properties: page_properties, children: page_children)

# ページの削除
notion.update_page(page_id: data[:page_id], archived: true)

LINE API

https://github.com/line/line-bot-sdk-ruby

今回使っている機能としては以下になります↓

  • Messaging API
    • Reply Message(テキスト入力された時の応答)
    • Flex Message(挨拶メッセージ、応答メッセージで使用)
  • LIFF
    • sendMessage(liffからトークルームにメッセージ送信)
line_bot_function.rb
require 'line/bot'
require_relative '../modules/reply.rb'

def client
  @client ||= Line::Bot::Client.new { |config|
    config.channel_secret = ENV['LINE_CHANNEL_SECRET']
    config.channel_token = ENV['LINE_CHANNEL_TOKEN']
  }
end

def webhook(event:, context:)
  unless client.validate_signature(event['body'], event['headers']['x-line-signature'])
    error 400 do 'Bad Request' end
  end

  client.parse_events_from(body).each do |event|
    case event
    when Line::Bot::Event::Message
      # トークルームでメモが投稿された時、ページの追加
     client.reply_message(event['replyToken'], Reply.format(event))
    when Line::Bot::Event::Postback
     # 削除ボタンを押された時
    when Line::Bot::Event::Follow
     # フォローされた時
    end
  end

    # 省略

  # Don't forget to return a successful response
  "OK"
end

こだわりポイント

ログイン不要

友達追加してすぐに利用開始できるメリットがあるためLINEbotにしました。またLINE APIとの連携ですでにログインなどの手間を省略できるのも今回の「瞬時にメモ」に合うのではと思いました。

メモの詳細も記録

スマホからNotionデータベースにメモする際に、タイトル以外に詳細もまとめて記録できたら良いと思ったので今回の機能を加えることにしました。

最後に

データベースを切り替えて目的別にメモ、画像のメモもできたら良いかなと思ってますが少しずつ改善していくつもりです。
よかったら覗いてみてください→ https://lin.ee/1qKzREu

初回設定方法についてはこちら

Discussion