#PowerAutomate と Forms で問い合わせ受付＋添付ファイル PPAP回避

2022年、1発目の記事です。新年あけましておめでとうございます。本年もよろしくお願いいたします。昨年 2021年12月23日に開催された [Power Platform Event from Microsoft Base Sendai #1](https://msbasesendai.connpass.com/event/233015/) で登壇した際に紹介した『Power Automate で SharePoint アクションを利用して OneDrive for Business のフォルダ共有を有効期限付きで実施する』（長いよｗ）について、ポイントだけでも記事にしておく次第です。全容は各々の状況や要件によって異なってくるかと考えていますので、現状はコト細かに説明する予定はありませんので予めご了承ください。

なお以降は SharePoint Online → SPO、OneDrive for Business → ODfB と略します。

# Power Platform Event from Microsoft Base Sendai #1 ってナニ？
イベントについて簡単に。

Microsoft Base の全容については [こちらの公式サイト](https://www.microsoft.com/ja-jp/events/azurebase/) をご確認ください。[Microsoft Base Sendai](https://www.microsoft.com/ja-jp/events/azurebase/places/sendai/) は、Base のなかの1拠点、ということですね。M県S市・・・もとい宮城県仙台市に爆誕した Power Platform を中心とした各種製品の情報発信をメインにする、というコトで Power なご縁でお声がけ賜り登壇する機会を頂戴したのです。

イベントのタイトルが Power Platform と銘打っておりますが、Power Apps、Power Automate、Power Automate for desktop がメインの話題でした。Power BI と Power Virtual Agents はまた今度ね、って流れだと認識しています。（全種やったら、きっと1日以上のコンテンツ詰めれちゃう汗）

イベント自体はオンライン配信となりました。当方含めた登壇者は Base Sendai へ集まって現地からお送りしました。登壇者だけでもリアルに集まる、ってのが2年ぶりぐらいで。非常に楽しい時間でした。お声がけ下さった運営の ASAHI Accounting Robot研究所さん、誠に感謝の極みです。

## やまさんの登壇概要
所属企業で実際に Power Platform を利用している例をいくつか紹介しました。途中で YouTube を流したのですが、後で配信結果を見直すと YouTube 動画が暴走してて拡大率がおかしいタイミングがありましたね。登壇中はまったく気づけませんでした。申し訳ない(汗

登壇中に紹介した動画はコチラ ↓ からご覧いただけます。
[【Microsoft 365 活用】フリーアドレス＆自動受付システムのご紹介](https://youtu.be/Uj2wEsrT9Hk)

ちなみに、途中で登場する顔認証システムは Power Platform ではなく Azure Cognitive Service を利用した独自開発ソリューションです。高速処理をするような工夫がされておるらしく Power Apps ＋ Automate でも同じようなモノは構築できるんですけどもレスポンスでかなわないんですよね。なお、製品に関するお問い合わせは公式窓口へお願いします。※当方の Qiita は個人でやっておりますゆえ。

当方の登壇資料は下記で公開しております。
<iframe src="//www.slideshare.net/slideshow/embed_code/key/83AFloU4UPK8Z2" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/TeruchikaYamada/power-appspower-automate" title="自社で実運用中！Power Apps・Power Automate 活用事例" target="_blank">自社で実運用中！Power Apps・Power Automate 活用事例</a> </strong> from <strong><a href="https://www.slideshare.net/TeruchikaYamada" target="_blank">Teruchika Yamada</a></strong> </div>

# 本題
前置きが長くなりました。当記事は、登壇スライドから「活用事例＃01」でお送りした”問い合わせの自動一覧化 ～PPAP 回避の案をそえて～” のポイントとなる箇所のみ案内します。全てを事細かに記事でお伝えする予定は現時点でございませんので予めご了承ください（重要なので2回目）。
アーキテクチャーが把握できていて、ハマりそうなポイントだけ回避できれば、外部 API などをプレミアムアクションで叩くなどしてないので作れるんじゃないかな、と思う次第です。

## Forms でよくある課題
Microsoft Forms でアンケートや問い合わせを受け付ける、という場面は多いと思います。例えば、サポートの受付窓口を Forms で一本化したい、みたいな場合を想像してください。問い合わせを受け付ける際、添付ファイルも一緒にもらえたら、便利になりますよね？エラー画面のスクリーンショットだったり、なんかのログファイルだったり、etc・・・。ほしいですよね。

残念ながら、2022年1月時点で Forms はテナント外のユーザーへファイルアップロードを許可することができません。
![Forms の限界.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/15b574c5-0fac-754d-76be-f78ea6bb4580.png)
じゃあ、メールで受付しますか？添付ファイルになりますよね？
PPAP じゃないと添付ファイルが送信できない相手、居ませんか？
ログファイルとか、再現手順の動画など、ファイルサイズ大きくなりませんか？

メールの文面を一覧に転記して（って、これも過去に Automate で対応する案を別のイベントで提案してますが割愛）、添付ファイルをダウンロードして、パスワード入れて解凍して・・・。考えただけでもテマですよね。できればヤリたくない！（むしろ、絶対に嫌だ！）

### PPAP とは？
念のため補足を。ちなみに、ペタだかピコだか太郎さんじゃないですよｗ
下記の頭文字をとって PPAP です。

- 「P」Password付きZIP暗号化ファイルを送ります
- 「P」Passwordを送ります
- 「A」Angoka（暗号化）します
- 「P」Protocol（プロトコル＝手順）

パスワード付き圧縮ファイルじゃないと、メールに添付しちゃダメですよっていう運用のコトです。ちなみに、コレがアレな件も本題ではないので割愛。

## 課題に対する 1 つの対応案
そんな課題に対応する案が登壇内容でもある Forms ＋ Automate で、ODfB フォルダ共有をつかったテクニックです。
![アーキテクチャー全容.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/5e3ad81d-a170-83c4-f06c-c4b8cced21e0.png)

Forms で問い合わせを受け取る時点では添付ファイルを期待しないのがポイントです。期待しない理由は前述どおりですね。回答結果を Power Automate で一覧登録などするのにあわせて、ODfB へアップロード用のフォルダを作成し、そこを局所的に共有をかけてメールで問い合わせした方へ「受付ましたよ。添付ファイルがあれば”このURL”へアップしてね」と案内する、です。

SPO の専用サイトなどで問い合わせ結果の一覧と関連する添付ファイルを一元管理したいために、ドキュメントライブラリにもフォルダを作成しています。ODfB は先方から”有効期限付き”でファイルを提供してもらう、という一時領域として割り切っています。これで、SPO を先方へ共有することなく、局所的な状況で PPAP よりも安全にファイルの授受が可能になるハズ。
メールなどの問い合わせで発生する「フォーマットを無視したフリーダムな文面」などの問題を Forms で回避しつつ、PPAP やメール送信が難しい大容量の情報なども柔軟に受け取ることが実現できます。

## フロー全容
スライドからフローの全容を抜粋。
![フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/6ccc45b3-f5be-eb91-207e-6205a65e6483.png)
上記で③の箇所について、要点だけを続けます。なぜ、ODfB を共有するのに SPO アクションを利用しているのか？というのがポイントです。

## ODfB 共有アクションの課題
Power Automate の ODfB アクションにあるフォルダーやファイルの共有アクションは、記事投稿時点で「共有リンクの有効期限」を設定できません。

[共有リンクをパスで作成する](https://docs.microsoft.com/ja-jp/connectors/onedriveforbusiness/?WT.mc_id=BA-MVP-5004053#%E5%85%B1%E6%9C%89%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E3%83%91%E3%82%B9%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
![ODfB-共有リンクをパスで作成する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/29b81c75-8242-9242-5d50-ca6b25346cc7.png)

[共有リンクを作成する](https://docs.microsoft.com/ja-jp/connectors/onedriveforbusiness/?WT.mc_id=BA-MVP-5004053#%E5%85%B1%E6%9C%89%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
![ODfB-共有リンクを作成する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/69a7c371-3ccb-0461-6351-a4ce167c8775.png)
ファイルをアップロードしてもらいたい、ということは、編集権限も与えることになります。テナント外の方に、無期限で利用可能な共有リンクを提供し続けるのもセキュリティなどが不安なので可能な対策は実施したいですよね。加えて、いつまでもファイルを投入されても困りますから、一定の期間だけ受け付ける仕組みが精神衛生上もよろしいかと。

## SPO 共有アクションを使う！
細かいコトは置いといて ODfB は SPO の親戚というか兄弟というか親類なんですよ。なので、Power Automate の SPO ドキュメントライブラリに関連するアクションが ODfB でも利用可能です。今回はフォルダーの共有を有効期限付きで実施したいので下記のアクションを利用します。

[ファイルまたはフォルダーの共有リンクを作成](https://docs.microsoft.com/ja-jp/connectors/sharepointonline/?WT.mc_id=BA-MVP-5004053#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%81%AE%E5%85%B1%E6%9C%89%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E4%BD%9C%E6%88%90)
![SPO-ファイルまたはフォルダーの共有リンクの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/804b570b-5922-0394-600a-470b1f0cf1ff.png)
最大のポイントは［サイトのアドレス］項目に、該当ユーザーの ODfB サイトURL を設定するコト！です。ODfB の サイトURL は下記のようなルールになっています。

> ユーザーのアカウントの URL は、通常OneDrive形式です https：//＜tenant name＞-my.sharepoint.com/personal/＜user principal name＞ 。 ユーザー プリンシパル名 (UPN) の場合、ピリオド、コンマ、スペース、アット記号 ("@") などの特殊文字はアンダースコア ("_") に変換されます。
> 
> 参考URL：[組織内のユーザーのOneDrive URL の一覧を表示する](https://docs.microsoft.com/ja-jp/onedrive/list-onedrive-urls?WT.mc_id=BA-MVP-5004053#about-onedrive-urls) より

該当ユーザーの ODfB をブラウザーで参照して URL をじっくり確認してみましょう。
![ODfBのURLmz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/4fb87f5f-69ef-55af-c72c-bc3d82982c20.png)
その ODfB の URL をアクションの［カスタム項目の追加］から直接指定してあげれば OK です。あとは、SPO と同様に必要な項目を設定していくだけです。
![SPO-カスタム値の入力.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/08865e94-d924-7dd2-8ad9-00e66da5f034.png)

これで有効期限を設定した状態で共有リンクを生成することが可能です。
なお、匿名リンクの作成可否や共有リンクの有効期間などはテナントの全体設定に依存します。事前に全体管理者でご確認のうえ適宜設定を実施してください。また、フローを組んだ後は必ず動作確認を実施してください。誤って上位階層を共有しちゃって丸見え（いや～ん）などは確実に回避しましょう。

ちなみに、2022年1月時点で Power Automate の紹介した標準アクションで「ユーザーを指定して共有」はできないようです。URLを知っている方が全てアクセス可能 or テナント内のみ、の2択になります。ここらへんの制約もあるので、リンクの有効期間を決めるなど、セキュリティ面は意識しておくべきかな、と個人的に考えてます。

# まとめ
PPAP はやめたいですよね（ていうか、やめようぜ）。でも、やめられないってトコがあるのも理解するので・・・。仕組みでカバーできれば双方ともに幸せになるかもしれないなぁ、と思って考えた仕組みです。ODfB から共有をかけるユーザーをシステム用と割り切ったアカウントにしておけば、何らかの問題が発生した場合も切り分けや対策がしやすいと思います。1ライセンス、人間に紐づかなくなっちゃいますが、運用効率や利便性を考えると安いモノかな、と当方は判断しています。

それでは、皆さま。素晴らしい Power Platform Life を！