Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go言語でLINE Botをつくろう!

Walnuts
April 16, 2024
500

Go言語でLINE Botをつくろう!

Walnuts

April 16, 2024
Tweet

Transcript

  1. 名前: Walnuts 所属: KMC 46th / 京都大学 工学部 電気電子工学科 3回生

    趣味: @walnuts1018 #walnuts-memo #kubernetes ・バイト ・睡眠 ・Kubernetes ・Go言語 ・Proxmox ・電子工作をしたりしなかったり 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  2. • LINE Bot • 大学の授業の時間割を登録できる • LINEのAPIをGo言語 で操作します! 自己紹介 >

    概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  3. • LINE公式アカウントに登録 • 発言した内容をそのまま返すアプリを作る • 授業を登録できるように書き換え • 「カレンダー」と言ったら時間割が返信されるように書き換え • 完成

    • アドバンス課題 • 毎朝今日の時間割を教えてくれるように改造 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  4. • 「QRコードでログイン」をクリック • スマホでLINEを開いて、QRコードを読み取る • 4桁の認証番号を入れる 自己紹介 > 概要紹介 >

    LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  5. • こんな画面が開けたらOK! • 「作成」をクリック 自己紹介 > 概要紹介 > LINE Dev登録

    > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  6. • プロバイダー名を決める • なんでもOK! 自己紹介 > 概要紹介 > LINE Dev登録

    > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  7. • 色々埋めるところが出てくるのでいい感じに埋めていきましょう! • 「チャネル名」はBotのアカウント名になるので「京大時間割アプリ」とかにしておくと よさそう • 業種は個人・学生を選ぼう • 「任意」のところは埋めなくてOK •

    最後に「作成」ボタンを押すよ • 確認メッセージとか同意も押す 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  8. • 作成出来たら早速友達追加してみよう • 「Messaging API設定」を押して、QRコードを表示させる • スマホのLINEアプリで読み取る • ようこそメッセージが見えたら OK!

    自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  9. • 作成出来たら早速友達追加してみよう • 「Messaging API設定」を押して、QRコードを表示させる • スマホのLINEアプリで読み取る • ようこそメッセージが見えたら OK!

    自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  10. • ログイン出来たら、「Yes, I trust the authors」を押す • 左側に今回皆さんに編集してもらうプログラムのファイルがあります • まずは

    ファイルに先ほど取得した シークレットとアクセストークンを保存 します。 .env 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  11. • 以下のようになっていればOKです! 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン

    > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  12. • で「ターミナル」を起動します • 起動したら、 と入力し、Enterを押します • これでLINE Botが動きました • まだ今はメッセージを送っても反応しません

    Ctrl + Shift + ` go run main.go 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  13. 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録

    > カレンダー機能追加 > 授業登録機能追加 > まとめ
  14. • https://developers.line.biz/console/ にアクセス • 「Messaging API設定」の「Webhook URL」を変更します • 「編集」を押して、 •

    自分のcodeboxのURL + にする • 例えば、codeboxのURLが の人は、 と入力 • 登録できたらLINEからメッセージを送ってみよう!! • 「hello」と帰ってきたらOK! /proxy/8080/callback https://codebox-line-dnplsz.walnuts.dev/ https://codebox-line-dnplsz.walnuts.dev/proxy/8080/callback 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  15. • 165行目の を編集します func showCalendar 自己紹介 > 概要紹介 > LINE

    Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  16. • userIDを取得しよう • 時間割をユーザー(メッセージを送った人)ごとに別々のものにしておかないと、 全員の時間割が混ざっててんやわんやに • そうならないように、メッセージを送ってきた人を取得して、別々の時間割を表示さ せます • ヒント:

    下の方に getUserID という関数があり、これはuserIDとerrorを返します 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  17. • userID答え userID, err := getUserID(e) if err != nil

    { sendTextMessage(c, "ユーザーIDの取得に失敗しました", api, e) return } 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  18. • 保存されている授業一覧を取得しよう • ヒント: dbClientにGetSubjectsというメソッドがあります • 引数はuserIDです 自己紹介 > 概要紹介

    > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  19. • 科目取得答え • おわったら • ターミナルで、「Ctrl + C」を押してサーバーを止めましょう • を実行して再起動

    • 「カレンダー」とLINEに送ってみましょう! subjects, err := dbClient.GetSubjects(userID) if err != nil { sendTextMessage(c, fmt.Sprintf("授業の取得に失敗しました: %v", err), api, e) return } go run main.go 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  20. • 「カレンダー」というメッセージの時に、showCalenderを呼び出すコードを追加しよう • 87行目に showCalendar(c, api, e, dbClient) を追加しよう •

    できたら、「カレンダー」と送ってみよう! 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  21. • 109行目の を編集します • 95行目にaddSubjectを呼び出すコードを追加します func addSubject 自己紹介 > 概要紹介

    > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  22. • userIDを取得しよう • 時間割をユーザー(メッセージを送った人)ごとに別々のものにしておかないと、 全員の時間割が混ざっててんやわんやに • そうならないように、メッセージを送ってきた人を取得して、別々の時間割を表示さ せます • ヒント:

    下の方に getUserID という関数があり、これはuserIDとerrorを返します 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  23. • userID答え userID, err := getUserID(e) if err != nil

    { sendTextMessage(c, "ユーザーIDの取得に失敗しました", api, e) return } 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  24. • 授業を保存しよう • ヒント: dbClientにAddSubjectsというメソッドがあります • 引数はsubject, userIDです 自己紹介 >

    概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  25. • 授業保存答え err = dbClient.AddSubject(subject, userID) if err != nil

    { sendTextMessage(c, fmt.Sprintf("授業の保存に失敗しました: %v", err), api, e) return } 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  26. • 「カレンダー」というメッセージ以外時に、addSubjectを呼び出すコードを追加しよう • 95行目に addSubject(c, message, api, e, dbClient) を追加しよう

    • できたら「月1 test test」と送ってみよう! 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
  27. • Go言語でLINE Botをつくるのはとっても簡単! • しばらくはこのBotを動かしておこうと思います! 自己紹介 > 概要紹介 > LINE

    Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ