Power Automate で Microsoft Translatorを使い、日本語以外のメールを日本語に翻訳する

2021年2月6日土曜日

Microsoft365

t f B! P L

はじめに

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)に入ったメールすべてを対象に
  1. 言語をチェックする
  2. 日本語以外のメールは翻訳する
という処理が走るので制限超えてしまいました、というのが原因のようです。
目に見えないヘッダなども含めると、結構なサイズになるのかな?

翻訳する対象を制限してみる(差出人で)

今回は、Microsoftから来る大切な英語のメールを見逃さないことが目的なので、差出人を「microsoft.com」に絞ることで、翻訳処理が走る回数を減らすことにする。


全体で4段階になっているフローをよく見ると、3、4段階目でTranslatorが動くことが分かる。
  1. 新規にメールを受信する
  2. その内容を取得する
  3. メールの言語を調べる(Translator が動く)
  4. 本文を翻訳する(Translator が動く)
それまでに差出人をチェックして、「microsoft.com」以外から来たメールについては、その後のフローが走らないようにしてみよう。具体的には、「On new email (webhook)」と「Get email」の間で、差出人を絞るロジックを入れてみる。


下向きの矢印にマウスカーソルを合わせると、新しいステップを挿入できるようなので、クリックする。

「アクションの追加」をクリックする。


「条件」コントロールをクリックする。


条件の左の枠(値の選択)をクリックし、動的なコンテンツから「差出人」をクリック。


条件の真ん中の枠で、「次の値を含む」をクリック。


条件の右の枠(値の選択)で、「microsoft.com」を手入力する。
これで、条件が設定できた。



条件が設定できたので、次に「はいの場合」「いいえの場合」の設定に入る。

「はいの場合」=「microsoft.comから来たメールの場合」なので、本当は「はいの場合」の中に、「Get email」とか「Detect language」など後続のフローが流れていくべきだと思うが、すでに設定されているフローをそのまま生かしたいので、「いいえの場合」のほうでフローを終了するアクションを入れる(=「はいの場合」は、続きのフローが実行される)ことにしよう。


「いいえの場合」にある「アクションの追加」をクリック。
「コネクタとアクションを検索する」欄に、「終了」と入力して検索。
検索結果として表示されるアクションの中から、「終了」をクリックして選択。


終了した際の状態として、デフォルト値は「失敗」となっているが、条件(差出人がmicrosoft.comである)に合致していないから終了したいだけなので、今回は「取り消し済み」としておく。後で実行履歴を見たとき、本当に失敗したのか、取り消して終了したのかが判別できる。

これで、「条件」の設定に加えて、「いいえの場合」に終了する設定が完了!
設定した内容は、以下のとおり。



保存し、フローチェッカーやテスト等で問題なければOK。
さあ、これで英語のメールをスルーすることも無くなるか!?

本文が大きすぎて失敗している

翻訳されたメールが来るとき、来ないときがある様子なので、実行履歴をチェックしてみる。



・取り消し済み:差出人が「microsoft.com」以外なので、処理されなくて良いメール
・成功:差出人が「microsoft.com」で、無事に翻訳と送信が完了したメール

「失敗」がなぜ発生したのか、チェックしてみよう。
クリックして中身を確認してみると、Detect language で失敗しているようだ。


さらに、中身を開いてみると、innerErrorとして、以下の記述を見つけた。

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。



続けて、言語判定(Detect language)や翻訳処理(Translat text)のテキストを、今はメールの「本文」を指定しているが、「長さ調整した本文」の「出力」に変えてあげる。



修正したフローを検証する

失敗していたメールを使って、変更したフローがうまく処理されるかどうか検証してみよう。
画面右上の「再送信」で、再度試すことができる。



以下のように、「ご利用のフローが正常に実行されました」となれば、無事解決!



ようやく、実用に耐えるものになったかな😀

このブログを検索

サイトマップ

  • ()
  • ()
もっと見る

Google検索

マルウェア「Emotet」に感染したくないから、「EmoCheck」と「EmoKill」の使い方、利用方法をまとめてみた!

  はじめに 世間を騒がしている「Emotet」。2014年ごろから確認されているマルウェアだが、流行と鎮静化を繰り返しながら変異を続けており、今もなお大きな影響を及ぼしている。2020年は、多数の企業が被害を受けた年になった。 Emotetに一旦感染するとやっかいだ。そのモジュ...

QooQ