はじめに
Microsoft365を使っていると、Microsoft Message Center、Azure、Security関係など英語で届くメールがとても多い。怪しいメールはスルーしておけば良いけど、大切なメールを見逃してしまうのが怖いので、Power Automateを使って翻訳したメールが受け取れないか、いろいろ試してみた!
テンプレートを使って実現する
Power Automate に入り、「翻訳」で検索してみると、いろんなテンプレートが表示される。
設定のやり方などよく分からないけど、テンプレートを流用して日本語に変換できないか?と思い、いくつかのテンプレートを見て中身をチェックしてみた。すると、翻訳前の言語判定が「en」を含まないもの、翻訳語の言語指定が「English」となっているのを発見! そこを変えてあげれば良さそうだと思い、早速セットしてみる。
(テンプレート「英語以外の電子メールを翻訳する」を使っています)
上の「en」を「ja」に、下の「English」に変更し、フローを保存。
これで動かしてみると、やった! 翻訳されたメールが届くようになった!!
でも、翻訳メールが届かない(ことがある)
英語のメールが来ているのに、翻訳されたメールが届かないことがあるぞ?ということで、「実行履歴」を確認してみる。
「The maximum request size has been exceeded.」というエラーが発生している。
何かの制限に引っかかっているようだ。ググってみると、「Power Apps Community」なる場所で、以下のようなやり取りを見つけた。
■Microsoft Translator error rate limit is exceeded
日本語で、制限についてまとめたページはこちら
テンプレートをそのまま使うと、受信トレイ(inbox)に入ったメールすべてを対象に、
- 言語をチェックする
- 日本語以外のメールは翻訳する
という処理が走るので制限超えてしまいました、というのが原因のようです。
目に見えないヘッダなども含めると、結構なサイズになるのかな?
翻訳する対象を制限してみる(差出人で)
今回は、Microsoftから来る大切な英語のメールを見逃さないことが目的なので、差出人を「microsoft.com」に絞ることで、翻訳処理が走る回数を減らすことにする。
- 新規にメールを受信する
- その内容を取得する
- メールの言語を調べる(Translator が動く)
- 本文を翻訳する(Translator が動く)
それまでに差出人をチェックして、「microsoft.com」以外から来たメールについては、その後のフローが走らないようにしてみよう。具体的には、「On new email (webhook)」と「Get email」の間で、差出人を絞るロジックを入れてみる。
「アクションの追加」をクリックする。
これで、条件が設定できた。
「はいの場合」=「microsoft.comから来たメールの場合」なので、本当は「はいの場合」の中に、「Get email」とか「Detect language」など後続のフローが流れていくべきだと思うが、すでに設定されているフローをそのまま生かしたいので、「いいえの場合」のほうでフローを終了するアクションを入れる(=「はいの場合」は、続きのフローが実行される)ことにしよう。
「いいえの場合」にある「アクションの追加」をクリック。
「コネクタとアクションを検索する」欄に、「終了」と入力して検索。
検索結果として表示されるアクションの中から、「終了」をクリックして選択。
これで、「条件」の設定に加えて、「いいえの場合」に終了する設定が完了!
設定した内容は、以下のとおり。
保存し、フローチェッカーやテスト等で問題なければOK。
さあ、これで英語のメールをスルーすることも無くなるか!?
本文が大きすぎて失敗している
翻訳されたメールが来るとき、来ないときがある様子なので、実行履歴をチェックしてみる。
・取り消し済み:差出人が「microsoft.com」以外なので、処理されなくて良いメール
・成功:差出人が「microsoft.com」で、無事に翻訳と送信が完了したメール
「失敗」がなぜ発生したのか、チェックしてみよう。
クリックして中身を確認してみると、Detect language で失敗しているようだ。
「Message: the parameter 'text' must be less than '10241' characters」
本文が大きすぎて、失敗している様子。
なるほど~。では、本文の長さがある程度以上あるときは、超えた分をカットして処理するようにしてみよう。
本文の長さを調整する
Detect language で本文の長さが引っかからないようにするため、Get emailとDetect language の間でチェック&調整できるようにしてみる。
フローの間にある「+」をクリックし、新しいステップを挿入する。
続けて、「アクションの追加」をクリック。
if(greater(length(body('Get_email')?['body']),10000), substring(body('Get_email')?['body'],0,10000), body('Get_email')?['body'])
フローの名前を適宜付けて(変更して)あげて(ここでは「長さ調整した本文」としている)、入力した数式がセットできていればOK。
0 件のコメント:
コメントを投稿