メール送信をSharePointからやってみたお話

メールを一斉送信したい場面ってありますよね

こんな場合、私はまずExcelのテーブルかSharePointリストを用意して、PowerAutomateで送信!ってのを好んで使っていました。

 

当然ですが、添付ファイルを付けたい場合もよくあります。

この場合もフローに添付ファイルのファイルコンテンツやファイルメタデータを取得してメール送信の添付ファイルに添付しておりました。

 

ただですね、この場合一つ難点があります。

送信先や添付するファイルがすべて揃わないと実行出来ないという点です。

まあ、自動化なんだから全部揃えてからっていうのも一理あるんですが

実務ではなかなかそうはいかない場面もあります。

 

こんなツイートを見かけました

知見としては元々あるようですが、正直私は知らなかったので、ここはチャレンジです。

DAIさんありがとうございます。

 

さて、まずはSharePointリストで

リストだと複数添付ファイルが送信出来そうですね、これはナイスです!

リストはこんな感じ

対象者はユーザー列にしてます、ステータスは1行テキストで(笑)

ボタンをJSONで作ってみました(初チャレンジです)

{"$schema":"https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json","elmType":"div","style":{"width":"100%","height":"100%","position":"absolute","margin":"auto"},"children":[{"elmType":"button","customRowAction":{"action":"executeFlow","actionParams":"{\"id\":   \"<フローのID>\"}"},"style":{"border":"solid 1px #ffffff","border-radius":"55px","display":"flex","justify-content":"center","align-items":"center","padding":"6px 15px","margin":"0 auto"},"attributes":{"class":"ms-bgColor-communicationPrimary ms-bgColor-communicationShade20--hover ms-fontColor-white"},"children":[{"elmType":"span","style":{"margin-right":"10px"},"attributes":{"iconName":"Copy"}},{"elmType":"span","txtContent":"ボタン"}]}]}

まあ、どこぞでコピペしてきましたね

 

さてフローです

素人なので、ここ考慮してないよというツッコミはなしでお願いします

ポイントは添付ファイルが複数あるので配列変数に格納するところでしょうか

ここに格納してしまえばメールへの添付はこうなります

最後にリストアイテムの更新をします

ステータス列を更新します。

 

さて、送信してみよう!

おーちゃんと送れましたね!!

 

リストは出来た、ならばドキュメントライブラリからも!

まずはこんなふうに用意

 

次にフローはこんな感じですかね

 

さてやってみましょう

無事届きましたね

 

まとめ

デジタル化が進んでくるとクラウド上にファイルを保存する場面が増えてきます。

そのファイルを送信したり、あるいはリンクを送信する場面が増えてくると思います。

有識者の方々ですと今回のようなことは既知の内容かもしれませんが、私にとってはとても有意義な内容でした。

わざわざアプリ化しなくとも保存したところから即座に何かを、そんなことも出来ることがわかりました。

拙い内容ですが、備忘のためにまとめてみました。

AI-Builderに捧げた夏

この夏をAI-Builderに捧げました

7月3日に私はとあるコミュニティに参加します(おうじゃさんといっしょ)

oujasan-to-issho.connpass.com

そこですごいものを目撃します

それはAI-Builderです

というかカスタムプロンプトというべきでしょうか

とにかくその衝撃を忘れることは出来ません

がしかし、この日、私は寝落ちしてちゃんと内容を理解していません()

 

7月10日、再度コミュニティに参加します

どうしてもやってみたくなった私は教えを乞います

ライセンスが足りてなかったのでその場で課金()

PowerAutomateプレミアムライセンスを購入します

いや、でも、そのくらいやってみたい内容なんです

 

​やってみたかったこと、それは

 それはAIプロンプトのJSON出力です

これがなぜすごいかというと、AI-OCRでスキャンしたテキストをGPTに投げるだけで構造化してくれるというのです

つまり手書き帳票を読み取って構造化可能ということです

 

そんな私にさらなる嬉しい知らせが!

そんな私にさらなる衝撃が走ったのが717日!!

まあなんと素敵なUdemyのコースをギークフジワラさんが出しました

www.udemy.com

もはや即ポチっとして早速学習を開始しました。

いやーこれがですね、わかりやすいのなんのって

まずはモデル駆動型アプリを初めて本格的に触ることに

モデル駆動型の基本から何が出来るのかが網羅されていた

AI-Builderの使い方も実に様々なパターンが用意されていた

9時間越えのコースであったが、そこは必死に見た()

 

​しかもコミュニティイベントまで企画?

私、ヨウセイさんと共に奇想天外ビリビリ☆Power Apps同好会なるコミュニティを主催しております。

ヨウセイさんから、ギークさん呼んでイベントやることになりました・・・と連絡

私の心はすでにここで有頂天に!!

もはや完コピするしかない!という気持ちで学習を進める

 

途中でやはり悪いクセが出てきます(笑)

途中でやっぱり何か作りたくなるんですよねえ

ということでオリジナルを作成開始!!

 

まずは

日本百名山の登山計画を作成するアプリ

プロンプトはこんな感じです

 

さて次は

旅行計画アプリ

プロンプトはこんな感じ、実にシンプルですね(笑)

 

さて、ここから少し捻り始めます

TextRecognizerで読み取った内容をカスタムプロンプトでJSON

それをギャラリー表示させて、手入力を大幅削減させるイメージ

 

実はTextRecognizer普通に追加しようとするとありません・・・

今回は他のアプリからコピりました()

 

さて、やはりAIといえばコレ!

試合結果からJSONで勝者を抽出

ついでに新聞記事も(笑)

 

さらに

競馬ファンにとって出馬表のテーブル化は少々めんどい()意味あるのか?

出馬表を自動で作成して、そこから予想という名の妄想文を作成する

いつかはこれで大穴を当ててみたい!!

HTTP要求でGPT-4oに画像を読み取りさせて、出馬表を読み取る。そしてレース展開を予想。​

 

やってみて

まず、JSON出力を教えていただいたおうじゃさんに感謝です。​

そして、素晴らしい内容のUdemyを出していただいたギークさんに感謝です。​

個人的にはモデル駆動型も初めて、dataverseもほぼ初めてという​

極めてプレミアムライセンスで出来ることが理解出来たのがありがたかった。​

そして何よりAIの利用がこんなにお手軽なことが素晴らしい!!​

この夏、AI-Builderに夢中になりました。

本当にありがとうございました。






 

 

PowerAutomateで楽天カード明細を抽出してみる(明細登録編)

前回までは

アプリによる単品のPDFファイルを想定して明細抽出をしてみました。

今回は同じことをPowerAutomateを使用して、Sharepointリスト登録までを自動化してみようという試みです。

つまりアプリで読み込んで、目視して確認して登録、という工程を

先に全部自動で登録して、あとでアプリから目視して修正、確定という流れです

こうすることにより、ドキュメントライブラリにファイルを放り込むだけで、登録が暫定ですが自動的に登録されるということになります。

 

肝心のフローにいきます

今回はAI-Builderをふんだんに使っていきます

まずはドキュメントライブラリにファイルを用意します

用意したファイルは前回と同じ楽天カード明細のPDFファイルです

こんな感じですね

 

フロー作っていきましょうか

まずはこんな感じで手動トリガーでファイルの取得(プロパティのみ)を行います

 

次に処理の中身です

順に見ていきます

ファイルコンテンツの取得では、指定したドキュメントライブラリを指定します

ファイル識別子は識別子にしてあげます

 

次にAI-Builderの画像やドキュメントのテキストを認識するでテキストを抽出します

ここではファイルコンテンツの取得の本文を選択します

ここでテキストデータが取得できますので、次に作成アクションで

@{outputs('画像や_PDF_ドキュメントのテキストを認識する')?['body']?['responsev2']?['predictionOutput']?['fullText']}

次にまたAI-BuilderでGPTプロンプトを使用してテキストを作成するを行います

プロンプトはカスタムプロンプトで前回の記事を参考にしてください

さあ値が取得できたらSharepointリストに登録です

 

じゃあ実行してみましょうか

まずフロー全体はこんな感じです

 

では実行です

無事完了したようですね

ではリストを見てみましょう

 

いやーできましたね

 

このフローの意味するところ

世の中にはいまだに手書きやFAXだらけの職場があります

そんな職場でもこのようにAIを使えば入力いらずの職場にすることができます

私の職場はまだまだ手書き手入力がたくさんありますが、こんなツールを使えば業務が大幅に効率化していくことを伝えていきたいと思います

ファイルをどこかに保存するだけで登録、夢のような時代ですね

AI-Builderとカスタムプロンプトで楽天カード明細を抽出してみる(明細登録編)

AI凄すぎます!!

前回の記事では文字を読み取ってJSON形式で出力するところまでやりました

今回は読み取って、それを登録するということにチャレンジです

 

今回は前回に引き続き楽天カード利用明細を使いますが、本来的には手書き等のFAX帳票だとその威力がめちゃめちゃ発揮されると思います。

 

ということでまずはカスタムプロンプトを少々いじる

今回は抽出する項目を絞ってみました、最低限の3項目にしています

まあ、利用日、利用店名、利用金額くらいあればデータとしては十分では

 

次にプロンプトです

少しだけ追加しています、何度か実験したところ利用日のところに不要な半角スペースが入ることがあったので、ここで形を指示してあげます

カスタムプロンプトは以上です(笑)

ってこんなに簡単でいいの?というレベルです

 

さてアプリにいきましょうか

おっとだいぶんスッキリしましたね(笑)

ではまずはテキスト認識をしてみましょう



無事とれているようですね

では次にカスタムプロンプトを投げてみます

読み取りボタンを押してみますね

読み取りボタンには

Set(varSummary,楽天カード明細抽出.Predict(TextInputCanvas1.Value))
としてあります

おっと明細が現れましたね

そのままお見せするのはよろしくないので(笑)

 

ギャラリーのItemは

ForAll(ParseJSON(varSummary.Text).ご利用明細,
{利用日:ThisRecord.利用日,利用店名:ThisRecord.利用店名,利用金額:ThisRecord.利用金額})

 

テキストインプットのValue

Text(ThisItem.利用日)
Text(ThisItem.利用店名)
Value(ThisItem.利用金額)
 
ちなみにテキストインプットを使い修正可能にしてあります
 

読み取りに間違いがあったという前提で修正してみますね
修正したらあとは登録です
 
登録ボタンには
 
ForAll(Gallery11.AllItems,Patch(RakutenCardList,Defaults(RakutenCardList),
{UseDay:Text(ThisRecord.TextInput利用日.Value),
UseShop:Text(ThisRecord.TextInput利用店名.Value),
Price:Value(ThisRecord.TextInput利用金額.Value)}))
 
さて登録してみますか
 
リストを確認してみますね
 

大丈夫そうですね
 
 
こんなふうにAIの力を借りれば手書き帳票やFAXも怖くないかもしれませんね
本当にすごい技術だと思います
 
 

AI-Builderとカスタムプロンプトで楽天カード明細を抽出してみる

はじめに

この記事は特に技術的なことを書いているわけではなく、どなたでもこのとおりにやれば概ねそのような結果が得られると思われます。

私の職場は未だに紙やFAXがたくさんあり、そのような環境に置かれている方のデジタル化にホンノ少しでもお役に立てればとこの記事を書いた次第です。

 

話は7月3日にさかのぼる

この日、私はとあるコミュニティにオンライン参加します。

がしかし、疲労困憊のため思わず寝落ち(笑)

なんですが、耳に入ってきたのはAI-Builderなる単語

見たい、聞きたい・・・がしかし、眠い

人間弱いものですねぇ、結局睡魔に負けました

 

で翌週

またもコミュニティに参加します。

そこで先週のお話を伺い、自分の環境で再現を試みる・・・

あ・・・ライセンスの試用期間終わってる・・・

これは課金しないと何も前に進まないやつ

ということで、その場でPowerAutomateプレミアムライセンスに課金!!

 

ワクワクが止まらない

いや~こんな気分40年ぶりくらいじゃないですかね(笑)

子供のころ欲しいオモチャを買ってもらったら触りたくて仕方なかったじゃないですか

あの気分です

早速、職場でサンプルアプリ作成です。もちろん狙いは手書きFAX帳票

 

で自宅で楽天カード明細の抽出にチャレンジ

楽天カード明細ってCSVで落とせね?みたいなツッコミはなしでお願いします

手元に定型的なPDFがこれしかなかっただけです

まずはカスタムプロンプト

たったこれだけです(笑)

ではプロンプト設定を少々見ていきましょう

入力もテキストと設定しただけです

サンプルデータは一度取得したあとに念のために入れてみただけです

*たぶんなくても大丈夫ではないかと思います

今回、これをやってみたくなったのはこの機能です

出力がJSONです!!

では編集ボタンを押してみましょう

このJSONですが、当初帳票をみながらすべて指定してみたのですがどうもうまくいきませんでした

その後、項目無指定で取得してきたのがこの形式になります

PowerAutomateでJSONスキーマ知りたくて一回フロー動かす、みたいな感じですね

もう一度言いますが、無指定でこの状態ですからね!!

 

ではアプリに実装です

まずはデータソースの追加からカスタムプロンプトを追加します

楽天カード明細抽出(笑)いましたね、なんか意味あるんでしょうかね(笑)

アプリ自体はこんなです

左にTextRecognizerを置いて、右の上にその結果を表示して

JSON化ボタンはカスタムプロンプトのJSON無指定バージョン
カスタムボタンは先ほど作成したカスタムプロンプトを仕込んであります


ボタンに仕込んだ関数は

Set(varSummary,楽天カード明細抽出.Predict(TextInputCanvas1.Value))
たったこれだけ(笑)
 
今回はこの程度しか機能つけていませんが、値が取得出来ているということは、そのままデータベース化可能になりますね
 

デジタル化の進んでいない職場では、いまだにFAXで受注がきて、それを手入力したりしているものです。

私は手書き手入力が死ぬほど嫌いなので、正直自分がもしそんな職場にいるのなら多分辞めてしまうと思います。

ですが、そんな職場は普通に存在します。

こんな素晴らしい技術やツールが少しでも広まって、業務が効率化することを願って他愛もない記事ですが書いてみました。

 

少し前ならJSON化することのありがたみをわからなかったでしょうね

ということでおうじゃさん、いつもありがとうございます。

oujasan-to-issho.connpass.com

 

 

PowerAutomateとClaude3.5Sonnetを使ってメール返信文案を自動で(笑)

メールの返信文案を生成AIに考えさせてみる

普通の常識で考えるとメールの返信文って自分で考えますよね

ええ、当たり前の話です(笑)

なんですが、時に考えても考えても文面が思い浮かばないときってありませんかね

そんなときには生成AIに文面案を考えさせてみてはというのが今回の趣旨です(笑)

 

まずはClaude3.5を叩いてみる

とりあえずこんな感じのフローで返信文案を作ってみましょう

これができたら次に返信文案だけを取り出してみます

式はこんな感じ

body('HTTP_Claude3.5Sonnet')?['content'][0]?['text']

 

さて、ここからはいつもの写経タイムです

今回はささみさんの記事を参考にさせていただきました

いつも知見をありがとうございます

sasami-axis.hatenablog.com

 

これで返信メール作ることができるんですね

ということはそこに返信文案を反映させれば!!

 

まさに写経ですね(笑)、まんまです

違うのはcontentのところだけですかね

 

じゃ、ちょっとやってみましょうか

こんなメールが来たという想定で

さて、フローの結果やいかに

まあ、成功はしてますね(笑)

さて、内容は

まあまあいい感じじゃないですかね、多少の修正で使えそうですね

ということで、完成です、使うかどうかは別問題ですが(笑)

メールに素早くアクセスしたいとき(共有メールボックス編)

昨日の朝、記事を書いて意気揚々と職場にて

HTTP要求でwebLink取得出来たらそりゃあOKだと思いますよね。

がしかし、そこが素人オジサンの浅はかなところ(笑)

意気揚々と実践するも、そこではたと気が付く・・・

あーこれ共有メールボックスじゃん・・・と

 

いやー試しましたよ、ありとあらゆるアクション

色んなアクション試しましたねえ、でもですね、webLinkはないんですよ・・・

でもメールって個人のアドレスだろうが、共有メールボックスだろうが単体で開きますよね・・・

ということは何らかのアドレスがあるはずなんですよ・・・

 

さらなる追い打ち

普通ネットで検索して調べますよね、そうしたらyahoo知恵袋にこんな記事が

detail.chiebukuro.yahoo.co.jp

あー出来ないのかあ、知恵袋も言ってるしなあ・・・と半ばあきらめ

 

がしかし、やっぱりあきらめたくない

ということで検証続行です(笑)

HTTP要求かけるときのアドレスに着目

https://graph.microsoft.com/v1.0/me/とだいたいの場合は叩きます

いやー共有だしなあ、meじゃねえよなあ・・・としばし考える

まさか、ひょっとしてということで

https://graph.microsoft.com/v1.0/users/共有メールボックスのアドレス/

とやってみました

そうすると・・・・

 

で、できた・・・・

記念すべき初回成功時のですね(笑)

いやー嬉しかったですね、当然webLinkも取得出来てます

ということで、昨日の記事は個人アドレスだろうが、共有メールボックスだろうが全然問題なしということになりました

 

昨日(7月1日)の14時くらいからハマって、夜にこれがわかり、そして今日(7月2日)職場で検証してみました(かつ教えた)

 

私はこの程度しか出来ませんが、出来なかったことが出来るようになるのはとても嬉しいことですね!

 

ということで、ホンノ僅かですがまた前進できたような気がします