kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

Voiceflow TIPS #30 LINEログインとアカウントリンクしてMessaging APIでメッセージを送る & スマートスピーカーミーティング #12でLTしてきた

Voiceflow夏休みAdvent Calendarの30日目、兼、スマートスピーカーミーティング#12でLTしてきた、のまとめエントリです。

昨日行われた、@gaomarさん主催のスマートスピーカーミーティング、今月も参加してきました!今回のテーマは「アカウントリンキング」ということで、Voiceflowを使ってLINEログインとアカウントリンクして、Messaging APIを使ってリンクしたアカウントにメッセージを送るという話をしてきました。

発表資料

動画(8:30〜23:00あたり)

いつもありがとうございます!>@gaomarさん、@diberidarshiさん

補足

ということで、LTの中では駆け足だったので、実際の設定内容とかを少し補足的に説明します。

LINEログインとMessaging APIの設定

画面イメージは資料をご覧ください。ここでは設定すべき内容を記載します。

LINEログイン

  1. 新規チャネル作成で「LINEログイン」を選択
  2. 以下の項目を設定して「入力内容を確認」
  3. アプリ名:(適当に)
  4. アプリ説明:(適当に)
  5. アプリタイプ:「WEBで使う」を選択
  6. メールアドレス:(お使いのメールアドレスを設定)
  7. 規約に同意して「作成」をクリック
  8. (重要)Channel IDとChannel Secretを控えておく

LINE Messaging API

  1. 新規チャネル作成で「Messaging API」を選択
  2. 以下の項目を設定して「入力内容を確認」
  3. アプリ名:(適当に)
  4. アプリ説明:(適当に)
  5. 大業種:(適当に)
  6. 小業種:(適当に)
  7. メールアドレス:(お使いのメールアドレスを設定)
  8. 規約に同意して「作成」をクリック
  9. チャネル基本設定で以下を設定
  10. アクセストークンを「再発行」、執行までの時間はとりあえず「0」でOK。(重要)表示されるアクセストークンを控えておく。
  11. ※資料では「Webhook送信」を利用するにしてますがこれは必要ないです
  12. QRコードを読み込んで友だちになっておく。

Voiceflow

  1. スキルの設定画面の「Advanced」から以下を設定
  2. URL Authentication: "https://access.line.me/oauth2/v2.1/authorize"
  3. Access Token URL: "https://api.line.me/oauth2/v2.1/token"
  4. Clientタブ
    • Client ID: LINEログインのChannel IDを貼り付ける
    • Client Secret: LINEログインのChannel Secretを貼り付ける
  5. Scopeタブ
    • Scopes: profile を入力
  6. その他はデフォルトでOK
  7. この状態で一旦Alexa開発者コンソールにアップロード
  8. Alexa開発者コンソールで、

Alexa開発者コンソール

  1. 該当スキルの「ビルド」画面の左下の「アカウントリンク」を開く
  2. (重要)一番下にある「Alexaのリダイレクト先URL」をすべて控えておく

LINEログイン(再度)

  1. アプリ設定のCallbackURLに、Alexa開発者コンソールで取得したURLをすべて貼り付ける。

Voiceflow

前準備が非常に長かったですね・・・気を取り直していよいよフローを作っていきます。

変数の作成

以下の変数を作成します。

f:id:kun432:20190831012621p:plain

上記の変数の意味は以下です。

変数名 用途
options LINEログインAPIからレスポンスを取得して一時的に入れておきます
userid 上記のレスポンスからユーザIDに当たる部分を抽出して、一時的に入れておきます
mesgres LINE Messaging APIからのレスポンスを入れておくための変数です。特に大した情報は帰ってこないので別にいらないといえばいらないですが、一応。
MsgApiToken LINE Messaging APIで取得したチャネルアクセストークンを設定します。

なお、以下についてはデフォルトで用意されており、作成する必要はありませんが、アカウントリンクで使用します。

変数名 用途
access_token アカウントリンクが完了するとここにアクセストークンが保存されます

アカウントリンクの確認

この部分では、起動後に初期化を行った後、アカウントリンク済かどうかをチェックします。

Speak Blockで起動時の発話を行います。

f:id:kun432:20190831015319p:plain

Set BlockでMessaging APIのチャネルアクセストークンをセットします。

f:id:kun432:20190831015324p:plain

User Infoブロックでアカウントリンク済みがどうかをチェックします。アカウントリンクが終わっていればaccess_tokenに値がLINEログインのアクセストークンがセットされます。値がない・取れない場合はアカウントリンクされていないと判断して、failパスに流れてアカウントリンクを促す処理を行います。

f:id:kun432:20190831015330p:plain

Permissionブロックでアカウントリンク用のカードをAlexaアプリに送信します。アカウントリンクの設定は最初に終わっているので、こ子では特に設定することはありません。

f:id:kun432:20190831015335p:plain

Speak Blockでアカウントリンクを行うことをユーザに促します。

f:id:kun432:20190831015341p:plain

LINEログインAPIからユーザIDを取得する

この部分では、あとの処理でメッセージを送信するために必要なユーザIDをLINEログインAPIから取得します。

Integration BlockでLINEログインAPIに対してGETでユーザ情報を取得します。Authorizationヘッダでアクセストークンを渡すことで認証を行います。

f:id:kun432:20190831020249p:plain

結果をoptionsに入れます。

f:id:kun432:20190831020255p:plain

ここはAPI実行に失敗した場合です

f:id:kun432:20190831020244p:plain

次に結果としてかえってきたユーザ情報のうち、ユーザIDだけを抽出します。ここは前のIntegration Blockの中でやってしまってもいいですね、デバッグしてたときの名残で残ってます。

f:id:kun432:20190831020240p:plain

Code Blockで失敗した場合の処理です。ここもCode BlockをIntegration に組み込んでしまえば不要ですね。

f:id:kun432:20190831020232p:plain

Messaging APIへのメッセージ送信

最後の部分では、この前で取得したユーザIDに対してメッセージを贈ります。

Integration BlockでLINE Messaging APIにPOSTでリクエストを送ります。Authorizationヘッダで認証するのはログインAPIと同じですが、こっちはチャネルアクセストークンで認証する点に注意してください。また、Content-Typeの設定も必要です。

f:id:kun432:20190831021622p:plain

今回は送信するメッセージはオブジェクトを作って送信しますので、リクエストボディをrawで設定します。toに{userid}が指定されているのがわかりますか?ログインAPIで取得したユーザIDをここで指定することで、対象のユーザにメッセージを送れるというわけです。

f:id:kun432:20190831021606p:plain

使わないですが、一応結果も取得しておきます。

f:id:kun432:20190831021603p:plain

見にくいと思うので、Expandした状態もここに貼っときます。

f:id:kun432:20190831021558p:plainf:id:kun432:20190831021551p:plain

最後に成功時と失敗時の発話も用意しておきます。

f:id:kun432:20190831021616p:plainf:id:kun432:20190831021612p:plain

実際の実行結果の詳細は資料の方をご覧いただければと思いますが、こんな感じです。

f:id:kun432:20190831024439p:plainf:id:kun432:20190831024443p:plain

まとめと注意点

いかがでしたでしょうか?アカウントリンク、いつかやりたいとずっと思っていたので、できた時はちょっと飛び上がって喜んでしまいました。基本的な考え方は同じなので、TwitterFacebook等もそれぞれのAPIにあわせて少し変更すればできるのではないかと思います。

最後にいくつか注意点を。

  • アカウントリンクするとユーザ情報へアクセスができるようになります。このユーザ情報、言ってしまうと場合によっては個人情報にアクセスできることになってしまいます。したがって取り扱いには十分ご注意ください。無駄に多く取らずに、本当に必要な情報だけに制限したほうがいいと思います。
  • また、それらの情報をスキル内に保存する場合もよく考えてください。できる限り、フロー変数を使って、必要なときに取得するようにして、あくまでも一時的な利用に留めるほうが安全です。
  • また、Messaging APIは無料枠がありますが、それを超えると有料となりますので、ご注意ください。詳細はLINEの公式サイトからご確認ください。
  • 実際にスキルを審査・公開するにあたっては、上記以外にAlexa/LINE共にいろいろ準備が必要になると思いますのでご注意ください。

このあたりに注意して、スキル開発の幅を広げていただければと思います!