オンラインイベントが増えてきて、イベントでのQ&Aを収集するために、アンケートサービスを利用することも増えてきたと思います。
イベントの振り返りや、こたえきれなかったQ&Aに、あとから回答してExcelで配布したりすることもありますね。
今回はアンケートサービスSのQ&Aを、Power Automateを利用してデータとして取り出す方法を紹介します。
なお、今回のフローでは、PremiumになったHTTPアクションをふんだんに利用しますので、ご了承ください。また、 非公式のAPIを利用しているので、動作についての保証はありません。
全体像と結果
まずは実際にどのような形でデータとして取り出されるのかをご覧ください。 今回は保存先としてSharePoint Onlineのカスタムリストを採用しています。
※イベントのIDを列にいれていますが、イベントコードとは別物の、内部のIDです。
フローのほうは以下のような手続きをしています。
以下では各ブロックの詳細を記載していきますが、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 | 作成アクションの結果 |
これで結果が得られます。
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']
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が返ってきます。
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が得られました!
活用方法など
たとえば、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便利ですねー