オンラインイベントが増えてきて、イベントでの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便利ですねー