LINEの友達追加イベントでUSERIDを取得するAPIの設定方法を教えて頂きたいです。

はじめまして、さきと申します。マーケティング畑で育ち、非エンジニア。bubble学習、開発し始めて3か月ほどになります。
BUBBLEのAPIコネクターの設定方法が分からず困っております・・・

【やりたいこと】
・店舗向けの顧客管理アプリを作成
・BUBBLE内でLINEの友達追加(フォローイベント時)
◎USERIDを取得
・BUBBLEのUSERデータに格納
・定期点検の案内などをBUBBLEのスケジュールワークフローを設定
・LINEメッセージで配信

【現状】
USERIDが判明しているユーザーに対して、lineメッセージを配信する機能は実装できています。
顧客管理の機能開発は大部分完了しています。
BUBBLEはプロプランです。
LINEの公式アカウントは認証済み状態です。

【できないこと】①
◎USERIDを取得 の部分で迷子になっています。

フォローイベント時にLINEからWebhookイベントオブジェクトがリクエストされるということは理解できたのですが、それをBUBBLEAPIでどのように入力すればよいのか分からずに困っています。

【できないこと】②
署名の検証の設定方法。
LINEドキュメントでは、
ーーーーーーーーーーーーーーーーーー

署名を検証する

リクエストがLINEプラットフォームから送られたことを確認するために、ボットサーバーでリクエストヘッダーの x-line-signature に含まれる署名を検証します。

  1. チャネルシークレットを秘密鍵として、HMAC-SHA256アルゴリズムを使用してリクエストボディのダイジェスト値を取得します。
  2. ダイジェスト値をBase64エンコードした値と、リクエストヘッダーの x-line-signature に含まれる署名が一致することを確認します。
    Messaging APIリファレンス | LINE Developers
    ーーーーーーーーーーーーーーーーーーーーーーー
    となっているのですが、どこをどうさわるのかが分かりません・・・・

ノーコードラボ様の作成されたLINEログインプラグインも考えたのですが、LINEログインのLINEログインを使用しない理由としては、ログインは個人情報を引き渡すことに抵抗がある人が一定数いると思うので、もっと気軽な友達追加だけにして、お客様のLINE友達登録人数を増やしたいと考えているからです。

どなたかLINE友達追加とUSERID格納について知識のある方教えて頂けると助かります。
APIについての知識が浅いため、API設定画面のキャプチャーで入力内容を教えて頂けると嬉しいです・・・・LINEのドキュメントやGASで作っている人の記事などをいろいろと見たのですが、それをBUBBLEで再現する方法が分かりませんでした。
よろしくお願いいたします。

さきさん、はじめまして、近藤と言います!どうぞよろしくお願いいたします。

まず、質問文が非常にまとまっており、本当に理解しやすいです:dizzy:ありがとうございます!

いくつかの質問に別れているので、個別で対応させて下さい:pray:
また、あってるかわからないので、ディスカッションしながら進めさせてください笑

まず、質問1のWebhookについてです。

LINE API の設定画面にて、WebhookURLを指定するところはできているでしょうか???
ここにbubbleの実行したい backend workflowを指定することでWebhookで呼び出すワークフローを設定できます。

試しにtestというワークフローを作成し、設定してみたものになります。

外部にbackend workflowを公開する際は、Settingsタブの"Enable Workflow API and backend workflows"にチェックを入れると、該当のURLが表示されます。このURLに /“workflow名” のパスを追加することで希望のワークフローを外部から実行することができます。

こちらが設定したワークフローになります。

ここまでは大丈夫でしょうか?

「いいね!」 3

@TaishoKondo 様、お忙しい中ご返信ありがとうございます。
提示して頂いた内容のwebhookURL、ワークフローの設定まで実施できていることを確認いたしました。

質問:Verifyボタンを押したときにエラー表示が出るのですが、Bubble側は開発URL 「https://shop.cyclestart.jp/version-test/api/1.1/wf/lineuerid」で問題無いでしょうか? LiveURLでなくても動作確認は可能? 200を返す設定をbubble側で書いていないので怒られているだけだとは思うのですが、念のため確認させて頂きます。

追加の情報として、現在BubbleAPIコネクターは以下のようになっています。
LINEのメッセージ送信用に設定している状態です。

引き続きよろしくお願いいたします。

「いいね!」 2

提示して頂いた内容のwebhookURL、ワークフローの設定まで実施できていることを確認いたしました。

良かったです!

200を返す設定をbubble側で書いていないので怒られているだけだとは思うのですが、念のため確認させて頂きます。

こちらについては、API workflowを外部から叩く際には、基本的に認証が必要になっていて、そこで弾かれているのが原因です。↓画像の"Expose as a public API workflow", "This workflow can be run without authentication"をチェックしていただいてから再度実行すると動くかと思います!

「いいね!」 3

次はuserIdを受け取っていきます。

この画像でのDetect Dataというボタンをクリックすると、

こういう画面になります。このURLにPOSTで送信を送ると、送られてきたデータを解釈してどのパラメータを受け取るのかを設定することができます!

「いいね!」 2

なので、この形のURLをwebhookに登録します。(先程のbubbleの画面はCANCELしないでください。)そしてVerifyボタンで確認すると、アクセスが成功するはずです。

そしてbubbleを確認するとこういう画面になるかと思われます。
受け取ってきたデータの中からどのパラメータを取得するのかを取捨選択することができるようになっています!

「いいね!」 1

ただ、上のVerifyでは、eventsの配列の中身がからなので、UserIDを含む情報が定義されておらず、そのパラメータを設定することができていません。

そのため、Verifyでパラメータを取得することができないので、ちょっと工夫して上げる必要があります。

先程のDetect Dataを押した待機画面に戻って下さい。そこでLINEからinitializeを叩くのではなく、自分で設定したデータでリクエストを送ります。

curl -X POST \
  '○ご自分のinitializeのURL○' \
  -H 'Accept: */*' \
  -H 'User-Agent: Thunder Client (https://www.thunderclient.io)' \
  -H 'X-Forwarded-For: hgoe' \
  -H 'Content-Type: application/json' \
  -d '{
  "destination": "xxxxxxxxxx",
  "events": [
    {
      "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
      "type": "follow",
      "mode": "active",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      }
    }
  ]
}'

コードが出てきてしまい申し訳ないのですが、このコードをコピーして、実行してあげると上手いこと行きます。

ここで質問なのですが、利用されているパソコンはMacでしょうか?それともWindows?

「いいね!」 3

@TaishoKondo 様、とても丁寧に分かりやすくありがとうございます。

私はWindows環境になります。

以下進捗です。
①This workflow can be run without authentication"をチェックしてSUCCESSになりました。
②Detect Dataで以下画面まで進めました。


③Detect Dataを押した待機画面に戻って下さい。そこでLINEからinitializeを叩くのではなく、自分で設定したデータでリクエストを送ります。の部分は、自分でリクエストを送る方法が分からず、つまづいています。BubbleのAPIコールから送るのでしょうか?
Manually enter API response を開いて試してみましたが、SAVEボタンが押せませんでした。

不勉強ですみませんが、よろしくお願いいたします。

「いいね!」 2

よかったです!!!

curlというのは、APIに対するリクエストを文字で送ることができるコマンドの名前になります。

こちらにwindowsでcurlを利用する方法が書かれており、さっと目を通せるものなのでこちらご確認いただきたいです!

読み終えた後は、curlコマンドを利用して

curl -X POST \
  '○ご自分のinitializeのURL○' \
  -H 'Accept: */*' \
  -H 'User-Agent: Thunder Client (https://www.thunderclient.io)' \
  -H 'X-Forwarded-For: hgoe' \
  -H 'Content-Type: application/json' \
  -d '{
  "destination": "xxxxxxxxxx",
  "events": [
    {
      "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
      "type": "follow",
      "mode": "active",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      }
    }
  ]
}'

こちらをコピペして(URLのところだけ変えていただいて)利用していただくことでinitializeに対してリクエストを送っていただきたいです!なにかわからないところがあればご気軽にご相談下さい:pray:

「いいね!」 1

最終的にはこのような形でデータフォーマットを指定できることがゴールになります

「いいね!」 2

@TaishoKondo 様、続きのご連絡ありがとうございます。
curlの資料に目を通しまして、やってみまして、上手くいかず、自力で何とかしようといろいろと調べて試してみたのですが、どうにもならないので、ご教授ください。どこまで説明すればよいかも分からないので、やってみたことを記述します。

windows10でcurlがインストールされていることは確認しました。

頂いたコードにURLを入れて、cmdで実行。
image
結果↓はエラーのようでした。

調べて、windows環境において、 ’ と " の問題があるというのを見たので、以下のダブルコーテーションに置き換えたコードに変えてみましたが、結果は同じでした。
image

セキュリティ的に遮断しているのかとも思い、普通にYAHOOのサイトをリクエストしてみたところ、正常に返ってきました。

改めて(落ち着いて・・・)頂いたURLの資料を見て、\が使われていなかったので、不要なのかと思い、削除した以下のコードを入力。
image

一番最初のURL部分だけはお許しを頂いたような感じになりました・・・が、残りはダメよと言われているようです。

ここまで来て、迷子から自力脱出できなくなりましたので、、、教えてもらってばかりですみませんが、アドバイスよろしくお願いいたします。

「いいね!」 2

教えてもらってばかりですみませんが、アドバイスよろしくお願いいたします。

全然だいじょうぶです!お疲れ様です:sweat_drops:

curlは結構難しいですね。。。

これからもAPI叩いて試したい場合は多いと思いますので耐えていただければ。。。

postmanというHTTPリクエストを送信するツールでリクエストを送るようにしてみましょうか。こちらも多くのbubblerが利用されているツールなので今後も使う機会は多いと思います。

こちらからDLしていただきます。

先程のcurlでやりたかったことをGUIを用いて設定していきます。

  1. methodをPOSTに設定
  2. initializeのURLを設定
  3. Bodyをraw, formatをJSONに設定
  4. 送る予定のJSONを入力
  5. 送信ボタンを押す

これでcurlと同じことができます!!!

こちらでやってみるといかがでしょうか?
お気軽にご連絡下さい:pray:

「いいね!」 4

@TaishoKondo 様、別の方法ありがとうございます。
無事行けました!

この公式ドキュメントも確認して、今自分がやっていることを何となく把握できております。

引き続きよろしくお願いいたします。

「いいね!」 2

良かったです!!!

次はリクエストの検証ですが、結論から言うとbubbleだけではかなりめんどくさく、仕様変更にも弱い形になりそうです。Zapierなどの外部サービスを使うとスマートにできそうです。

そもそもリクエストの検証というのは、ハッシュ値という値が一致しているのかどうかで確かめます。ハッシュ値というのは、算数でとても大きい数を割り算したときの余りのようなものです。X-line-signatureというのは、答えのハッシュ値のことです。

我々は、送られてきたデータが正しいかどうかを確かめるために、データと持っている鍵(secret)で割ります(超アバウトですが、、、)。その時の答えとx-line-signatureが一致しているかを検証しているんですね。

その際に、本来我々が割り算に使うデータというのは{"destination":"U20708ed35fea108503af7421a15ff1fb","events":[]}
パラメータごとに分割されていない生の文字列になります。
しかし、bubbleでは作業していただいたようにパラメータごとにしかデータを受け取ることができません。そのために、パラメータから元々の文字列データに変換しなければならないのですが、これがすごく大変です。

データが一文字でも違うと、答えの値が全く違ってしまうので、もし我々が取得していないパラメータがLINE側で追加されれば、その都度修正しなければならなかったり、配列に2つ以上データが入っていればその際の場合分けなど、様々な処理が発生します。

これはbubbleでなければ本来しなくてもいいことなので、ここに労力を割くのは不毛かなと思っています。

代替案としては、LINE→bubbleというリクエストの流れの中に、外部サービスを一つかませることです。Zapierや、https://pipedream.com/というサービスを利用し、
LINE→検証用サービス(検証だけを行う)→bubbleという流れにします。

検証用サービスでは非常に簡単なプログラミングコードをコピペするだけだと思うので、そんなに難しさは起きないかなと思います。

「いいね!」 1

その上で、今回このイベントのために外部サービスを使って検証をしなければならないものなのかは判断の余地があると思います。

不正アクセスで送られるのは、登録していないユーザーID位のものだと思うので、サービスを使っていない人にメッセージを送ってしまうというのがワーストケースだと思います。

どういうメッセージかは不明ですが、これはそんなにクリティカルではない(超主観です。。。)と思っているので、労力をかけるべきかはおまかせします。

今後の拡張で検証用の外部サービスを追加するという流れもできますね!

僕はこれくらいになります:pray:
他の方に聞くともっと良い解決策があるかもしれないので、もしほかの方の意見も聞いていただければと思います:pray:

「いいね!」 2

@TaishoKondo 様、ここまでご指導いただきありがとうございました!とても勉強になりました。
認証について、pipedream等のサービスを利用した方が良いことも承知しました。こちらについては、別途確認いたします。

①webhookからbubbleデータへの格納方法
その後の作業を進める中で、また壁にぶつかったので、教えて頂けないでしょうか。
workflow内のアクションにCreate new thingを配置して、webhookに送られたuseridなどを格納しようとしたのですが、LINEで友達追加をしても何も起きませんでした。正しい方法を教えて頂けますでしょうか。

②LINEのUSERIDとbubble内のUSERの紐づけ
根本的な所なのですが、LINEのuseridを取得しても、既存のbubble内のuserに紐づけて格納できないということに気が付きました、
Current Userとしてログインしている状態で、LINEの友達追加URLを押したBUBBLE USERをLINEのwebhookの情報として返すことは可能なのでしょうか?

長くお付き合い頂いて恐縮ですが、よろしくお願いいたします。

「いいね!」 1


webhookのパスに/initializeが入ってませんか?そのパスはオブジェクトを検知するためだけのパスなので動かないです。なので/initializeを抜かないとだめですね


なるほど。BUBBLE内でLINEの友達追加処理というのをどういうふうにしているのか、ワークフローと画面を見せてほしいです。

「いいね!」 2

こちら、他の方も回答しやすいように別質問として新しくトピック作っていただければと思います!
もう16件もやり取りしているので笑

「いいね!」 1

@TaishoKondo 様、ご返信ありがとうございます。
①は/initializeを抜いて解消しました。初歩的な知識が無くすみません。

②は別のトピックを立てます!

まずはここまで助言頂き、誠にありがとうございました。

「いいね!」 1

いえ、丁寧に状況を説明していただきこちらもすごくやりやすかったです!!!

またどうぞよろしくお願いいたします:pray:

「いいね!」 1