MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

アンケートサービスのQ&Aをボタン一つでSharePointに格納する

オンラインイベントが増えてきて、イベントでのQ&Aを収集するために、アンケートサービスを利用することも増えてきたと思います。

イベントの振り返りや、こたえきれなかったQ&Aに、あとから回答してExcelで配布したりすることもありますね。

今回はアンケートサービスSのQ&Aを、Power Automateを利用してデータとして取り出す方法を紹介します。

なお、今回のフローでは、PremiumになったHTTPアクションをふんだんに利用しますので、ご了承ください。また、 非公式のAPIを利用しているので、動作についての保証はありません。

全体像と結果

まずは実際にどのような形でデータとして取り出されるのかをご覧ください。 今回は保存先としてSharePoint Onlineのカスタムリストを採用しています。

f:id:mofumofu_dance:20200531144905p:plain

※イベントのIDを列にいれていますが、イベントコードとは別物の、内部のIDです。

フローのほうは以下のような手続きをしています。

f:id:mofumofu_dance:20200531160323p:plain
フローの全体像

以下では各ブロックの詳細を記載していきますが、URLをhogehogeと置き換えています。

STEP1 : イベントコードでの検索~イベントハッシュの抜き出しまで

まずはイベントコードから、イベントURLを取得します。詳細情報を取得する場合に、URLの一部であるイベントハッシュが必要になるためです。

  • フローボタンの入力はテキスト型で、実行時にはこれにイベントコードを入力します。

  • 次のアクションは「作成」です。ここでは検索用のBodyを作成しています。以下のコードをコピペしてください。

{"autocomplete":true,"code":"@{triggerBody()['text']}","ts":"@{div(sub(ticks(utcNow()),ticks('1970-01-01')), 10000)}"}

※div(sub(...部分は現在時刻からタイムスタンプをミリ秒で生成しています。詳細は過去の投稿を参照してください。

  • 検索のためにHTTPアクションを実行します。
パラメータ 内容
メソッド POST
URL https://hogehoge/api/v0.5/events/code-search
Body 作成アクションの結果

f:id:mofumofu_dance:20200531151223p:plain
STEP1:イベント検索

これで結果が得られます。

STEP2 : イベント詳細の取得

イベント詳細を取得すると、イベント名とUUIDが得られます。Q&Aを取得するためにはUUIDだけでよいのですが、データとして保存するときにわかりやすいように、イベント名も後で使います。

  • イベント検索で得られたURLからイベントハッシュを取得します。これには文字列の分割を利用します。(「作成」アクション)
split(first(body('Search_Event'))?['url']?['app'],'event/')?[1]

※イベント検索なので、複数件返ってきます。1件目をとるために first() をしています。

  • イベント詳細取得。HTTPリクエストで詳細が得られます。
パラメータ 内容
メソッド GET
URL https://hogehoge/api/v0.5/events?hash=@{outputs('Event_Hash')}

hash=xxxxx になっている部分が、一つ前の作成アクションの結果です。

  • イベント詳細リクエストの結果から、UUIDを取得しておきます。これで、あとから再利用するときに便利。(「作成」アクションです)
body('Get_Event_UUID')?[0]?['uuid']

f:id:mofumofu_dance:20200531152235p:plain
STEP2 : イベント詳細の取得

STEP3 : Token取得

あとちょっと。 Q&A取得のためにBearerトークンが必要なので、HTTPリクエストで取得します。(これ探すのにめっちゃ時間かかった!)

パラメータ 内容
メソッド POST
URL https://hogehoge/api/v0.5/events/@{outputs('Event_UUID')}/auth

ヘッダー

{
  "accept": "application/json, text/plain",
  "content-length": "195",
  "content-Type": "application/json"
}

ボディ

{
  "granted_consents": [
    "StoreEssentialCookies",
    "StoreUnessentialCookies",
    "StoreAnalyticalCookies",
    "StoreAdvertisingCookies"
  ],
  "attrs": {
    "referralMedium": "search",
    "initialAppViewer": "browser--other"
  }
}

これでレスポンスにaccess_tokenが返ってきます。

f:id:mofumofu_dance:20200531153345p:plain
STEP3 : Token取得

STEP4 : Q&A取得

最後はQ&A取得です。クエリの中にSectionIdというのがあるのですが、これもUUIDからとります。

  • 一個目のHTTPアクションは以下の通り
パラメータ 内容
メソッド GET
URL https://hogehoge/api/v0.5/events/@{outputs('Event_UUID')}

ヘッダー

{
  "authorization": "@{concat('Bearer ',body('Get_Token')?['access_token'])}"
}
  • 二個目がいよいよQ&A取得です。メソッドはGETで、URL、ヘッダーは以下の通り。

URL

https://hogehoge/api/v0.5/events/@{outputs('Event_UUID')}/questions?path=%2Fquestions&eventSectionId=@{body('Get_SectionID')?['sections']?[0]?['event_section_id']}&sort=top&highlighted_first=true&limit=100 |

ヘッダー

{
  "authorization": "@{concat('Bearer ',body('Get_Token')?['access_token'])}"
}

これでOK! 無事イベントのコードから完全自動でQ&Aが得られました!

f:id:mofumofu_dance:20200531155811p:plain
STEP4 : Q&A取得

活用方法など

たとえば、Power BIのStreaming datasetに対して、得られたQ&Aデータを定期的にプッシュして、Power Platform側でBIしてみたり、あるいはアーカイブ目的であれば、SharePointにデータを登録しておいたりと、いろいろ考えれば活用できそうです。

念のためですが、 非公式のAPIを利用しているので、動作についての保証はありません。

イベント運営の作業効率化に寄与できたら幸いです。

おまけ

SharePointへのデータ登録部分は以下のようにしています。

列名 内容
Title @{items('Apply_to_each')?['text']}
Author @{if(empty(items('Apply_to_each')?['author']?['name']),'Anonymous',items('Apply_to_each')?['author']?['name'])}
Lang @{items('Apply_to_each')?['attrs']?['language']}
Sentiment @{items('Apply_to_each')?['attrs']?['sentiment']}
EventID @{items('Apply_to_each')?['event_id']}
EventName @{body('Get_Event_UUID')?[0]?['name']}
Score @{items('Apply_to_each')?['score']}
DateCreated @{addHours(items('Apply_to_each')?['date_created'],9)}

※Scoreはいいねの数、DateCreatedはJST

Slido便利ですねー