Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go言語でLINE Botをつくろう!
Search
Walnuts
April 16, 2024
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go言語でLINE Botをつくろう!
Walnuts
April 16, 2024
More Decks by Walnuts
See All by Walnuts
パスキーでE2E暗号化 in Android Apps (PRF Extension)
walnuts1018
0
52
Cloud Native 技術をフル活用!壊して学ぶ自宅サーバーのバックアップ戦略!
walnuts1018
1
160
プログラミングサークルの新歓を支える技術
walnuts1018
1
620
ESP32と赤外線LEDを用いて エアコンを遠隔操作する
walnuts1018
0
480
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Chasing Engaging Ingredients in Design
codingconduct
0
290
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Ruling the World: When Life Gets Gamed
codingconduct
0
310
Mobile First: as difficult as doing things right
swwweet
225
10k
Designing for Timeless Needs
cassininazir
1
460
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
How to Ace a Technical Interview
jacobian
281
24k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
So, you think you're a good person
axbom
PRO
2
2.1k
Transcript
2024/04/15 KMC 46th Walnuts
名前: Walnuts 所属: KMC 46th / 京都大学 工学部 電気電子工学科 3回生
趣味: @walnuts1018 #walnuts-memo #kubernetes ・バイト ・睡眠 ・Kubernetes ・Go言語 ・Proxmox ・電子工作をしたりしなかったり 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• LINE Bot • 大学の授業の時間割を登録できる • LINEのAPIをGo言語 で操作します! 自己紹介 >
概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• LINE公式アカウントに登録 • 発言した内容をそのまま返すアプリを作る • 授業を登録できるように書き換え • 「カレンダー」と言ったら時間割が返信されるように書き換え • 完成
• アドバンス課題 • 毎朝今日の時間割を教えてくれるように改造 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• https://developers.line.biz/console/ にアクセス • パソコンからの方がやりやすい • 「LINEアカウントでログイン」をクリック 自己紹介 > 概要紹介
> LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 「QRコードでログイン」をクリック • スマホでLINEを開いて、QRコードを読み取る • 4桁の認証番号を入れる 自己紹介 > 概要紹介 >
LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• こんな画面が開けたらOK! • 「作成」をクリック 自己紹介 > 概要紹介 > LINE Dev登録
> Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• プロバイダー名を決める • なんでもOK! 自己紹介 > 概要紹介 > LINE Dev登録
> Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• ちゃんと作れたら、「プロバイダー◦◦が作成されました」と出てくるよ! • そうしたら「Messaging API」をクリック! 自己紹介 > 概要紹介 > LINE
Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 色々埋めるところが出てくるのでいい感じに埋めていきましょう! • 「チャネル名」はBotのアカウント名になるので「京大時間割アプリ」とかにしておくと よさそう • 業種は個人・学生を選ぼう • 「任意」のところは埋めなくてOK •
最後に「作成」ボタンを押すよ • 確認メッセージとか同意も押す 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 色々埋めるところが出てくるのでいい感じに埋めていきましょう! • 「チャネル名」はBotのアカウント名になるので「京大時間割アプリ」とかにしておくと よさそう • 業種は個人・学生を選ぼう • 「任意」のところは埋めなくてOK •
最後に「作成」ボタンを押すよ 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 作成出来たら早速友達追加してみよう • 「Messaging API設定」を押して、QRコードを表示させる • スマホのLINEアプリで読み取る • ようこそメッセージが見えたら OK!
自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 作成出来たら早速友達追加してみよう • 「Messaging API設定」を押して、QRコードを表示させる • スマホのLINEアプリで読み取る • ようこそメッセージが見えたら OK!
自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 「Messaging API設定」の「LINE公式アカウント機能」の「応答メッセージ 」をオフにします • メッセージが送られたとき、勝手に返信される機能です。 • 右側緑文字の「編集」をクリック、新しく開いたページで「応答メッセージ」のスイッチを オフにする 自己紹介
> 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• チャネルシークレットとチャネルアクセストークンを手に入れる • ほかの人に見せてはいけません • 前の画面に戻って、「チャネル基本設定」の下の方にチャネルシークレット、 「Messaging API設定」の下の方にチャネルアクセストークンがあります 自己紹介 >
概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 今回みなさんにLINE Botを開発してもらう環境を用意しています。 • 配布したURLにアクセスし、パスワードを入力してください。 自己紹介 > 概要紹介 > LINE
Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• ログイン出来たら、「Yes, I trust the authors」を押す • 左側に今回皆さんに編集してもらうプログラムのファイルがあります • まずは
ファイルに先ほど取得した シークレットとアクセストークンを保存 します。 .env 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 以下のようになっていればOKです! 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン
> Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• で「ターミナル」を起動します • 起動したら、 と入力し、Enterを押します • これでLINE Botが動きました • まだ今はメッセージを送っても反応しません
Ctrl + Shift + ` go run main.go 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録
> カレンダー機能追加 > 授業登録機能追加 > まとめ
• 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登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 「LINEにメッセージが送られたら俺に教えて!!!!」という設定です。 • 具体的には、メッセージが送られたとき、登録したURLにHTTP POSTが送られます LINE Bot メッセージを送信 「メッセージ送られたよ!」と教える 自己紹介
> 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• いよいよプログラムを変更していきます。 • 「カレンダー」と送ったら時間割を表示できるようにしてみます • 左側の、commonというフォルダのline.goを編集します 自己紹介 > 概要紹介 >
LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 165行目の を編集します func showCalendar 自己紹介 > 概要紹介 > LINE
Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• userIDを取得しよう • 時間割をユーザー(メッセージを送った人)ごとに別々のものにしておかないと、 全員の時間割が混ざっててんやわんやに • そうならないように、メッセージを送ってきた人を取得して、別々の時間割を表示さ せます • ヒント:
下の方に getUserID という関数があり、これはuserIDとerrorを返します 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• userID答え userID, err := getUserID(e) if err != nil
{ sendTextMessage(c, "ユーザーIDの取得に失敗しました", api, e) return } 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 保存されている授業一覧を取得しよう • ヒント: dbClientにGetSubjectsというメソッドがあります • 引数はuserIDです 自己紹介 > 概要紹介
> LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 科目取得答え • おわったら • ターミナルで、「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登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 「カレンダー」というメッセージの時に、showCalenderを呼び出すコードを追加しよう • 87行目に showCalendar(c, api, e, dbClient) を追加しよう •
できたら、「カレンダー」と送ってみよう! 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 109行目の を編集します • 95行目にaddSubjectを呼び出すコードを追加します func addSubject 自己紹介 > 概要紹介
> LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• userIDを取得しよう • 時間割をユーザー(メッセージを送った人)ごとに別々のものにしておかないと、 全員の時間割が混ざっててんやわんやに • そうならないように、メッセージを送ってきた人を取得して、別々の時間割を表示さ せます • ヒント:
下の方に getUserID という関数があり、これはuserIDとerrorを返します 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• userID答え userID, err := getUserID(e) if err != nil
{ sendTextMessage(c, "ユーザーIDの取得に失敗しました", api, e) return } 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 授業を保存しよう • ヒント: dbClientにAddSubjectsというメソッドがあります • 引数はsubject, userIDです 自己紹介 >
概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 授業保存答え err = dbClient.AddSubject(subject, userID) if err != nil
{ sendTextMessage(c, fmt.Sprintf("授業の保存に失敗しました: %v", err), api, e) return } 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• 「カレンダー」というメッセージ以外時に、addSubjectを呼び出すコードを追加しよう • 95行目に addSubject(c, message, api, e, dbClient) を追加しよう
• できたら「月1 test test」と送ってみよう! 自己紹介 > 概要紹介 > LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• もしも時間が余っていたら • 毎朝7時にカレンダーを送る処理を書いてみよう! • 教員の名前も追加できるようにしてみよう! 自己紹介 > 概要紹介 >
LINE Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ
• Go言語でLINE Botをつくるのはとっても簡単! • しばらくはこのBotを動かしておこうと思います! 自己紹介 > 概要紹介 > LINE
Dev登録 > Codeboxログイン > Webhook登録 > カレンダー機能追加 > 授業登録機能追加 > まとめ