月別アーカイブ: 2023年1月

リーフのNissan Connectの有効期限はいつまでか?

カーナビで充電器の空き状況を確認したり、乗る前エアコンを起動したり、車と通信をするサービスを利用するにはNissan Connectへの加入が必要です。

2代目日産リーフZE1を初期(2017年~)に購入した方は、そろそろ有効期限が切れるので再加入が必要です。

私のケースでは、納車日から5年と90日後に通信ができなくなりました。カーナビには「ただいま混み合っています」と表示されました。Nissan Connectのサービスは90日以内にアカウントの有効性を確認できないと停止するようなので、納車日から5年で有効期限が切れたのだと気づきました。

充電サービスについてはZESP2が使えなくなったのでZESP3に加入したのですが、そのときディーラーの担当者に聞いてもNissan Connectの扱いは正確に把握しておらず、放置していたらこのような状況になりました。

Nissan Connectに加入する

前述のように一旦使えなくなった通信サービスは、Nissan Connectに加入することで回復しました。

Nissan Connectの申し込みはWEBから手続きできます。同じZE1でも私と同じ初期に製造されたリーフについては、車台番号とカーナビのIDが必要です。

Nissan Connectの登録から、2日程度で新しいIDが通知されました。ここで注意が必要なのは、カーナビやアプリで使用するIDとパスワードが新しく登録したIDとパスワードでなく、以前(新車登録時)から使っていたIDとパスワードであるということです。したがって、Nissan Connectのサービスに登録されたら、カーナビのNissan Connectの画面でIDとパスワードを変えずに「登録」を行うのが適当です。私は新しいIDでカーナビもアプリもログインできないので試しに古いIDとパスワードを使ったら通信機能が回復して混乱しました。

ことの顛末をいつもお世話になっているディーラーに伝えたところ、これが正しい挙動だということです。担当者も驚いていました。Nissan Connectの新しいIDとパスワードは、単に支払情報などを管理するページにログインするためだけに使うようです。

新しめのリーフだとこんなまどろっこしいことにはならないそうですが、そろそろ5年を迎えようという方はご注意ください。

Power Automateでカンマ区切りメールアドレスから複数人にTeamsのメンションをかける

Teamsで複数人にメンションをかける方法が知られています。リンク先の方法では、複数のメールアドレスが配列として得られています。一方で、複数人の宛先を記述するよくやる方法として、カンマ,やセミコロン;で区切って複数のメールアドレスを書き並べた文字列を作ることがあります。本記事では、このようなケースでカンマ区切り文字列から複数のメールアドレスの配列を生成します。

なお、この記事で紹介するフローであれば、カンマ区切りで連結していない単独のメールアドレスが入力であるときも正常に動作します。

フローの全体像

Power Automateのフローは以下の通りです。各処理の中身は後述します。

各アクションの解説

カンマ区切りのメールアドレス

組み込み>データ操作>作成アクションを使用して、このフローで使用するカンマ区切りテキスト形式のメールアドレスを格納します。実際のフローでは、PowerAppsトリガーなどを経由して値を渡します。

ここでは “aa@exaple.com, bb@example.com, cc@example.com” のような形でメールアドレスが記述されています。

メールアドレス配列の初期化

組み込み>変数>変数を初期化するアクションを使用して、カンマ区切り文字列から配列を生成します。

split関数に分割する文字列と、分割する位置を指定する文字(ここではカンマ,)を与えることで、文字列を分割します。注意すべきことに、split関数を使うだけではPower Automateのフローで繰り返し操作の対象となる配列になりません。split関数の出力は文字列です。変数を初期化するアクションに配列のもとと「値」に、このsplit関数の出力を渡す必要があります。

式にはsplit(outputs(‘カンマ区切りメールアドレス’),’,’)のように記述します。

この配列は「メールアドレス配列」という名前で後段で使用できます。

メンショントークンの初期化

各メールアドレスから生成したメンショントークンを格納します。組み込み>変数>変数を初期化するアクションを使用して、空の配列を用意します。

Apply to each

組み込み>コントロール>それぞれに適用するアクションを使用して、「メールアドレス配列」から各メールアドレス要素を取り出してメンショントークンを生成する処理を行います。


ユーザープロフィールの取得

標準>Office365Users>ユーザープロフィールの取得(V2)アクションを使用して、メールアドレスからユーザープリンシパル名を取得します。@mentionトークンを取得するのにユーザープリンシパル名が必要なのに対して、所属組織によってはメールアドレスがユーザープリンシパル名と異なる場合があるためです。

ここで入力には以下のように記述しています。
trim(items(‘Apply_to_each’))
trim関数はスペースを削除する関数です。カンマ区切りテキスト形式でメールアドレスを入力する際に、メールアドレス間にスペースを入力することが多いので、スペースを除去する処理を介在させた方が安全です。

ユーザーの@mentionトークンを取得する

Teamsの当該アクションで、ユーザープリンシパル名から@mentionトークンを生成します。

配列変数に追加

組み込み>変数>配列変数に追加アクションで、生成した@mentionトークンを配列に格納します。

メンショントークンの結合

組み込み>データ操作>結合アクションで、「メンショントークン」配列の要素を結合します。「次を使用して結合」はカンマ,を使用していますが、半角スペースなどでもOKです。

チャットまたはチャネルでメッセージを投稿する

「メンショントークンの結合」アクションの出力をメッセージの中で使用すれば、メンションがかかります。

なお、複数のメンショントークンを作成し、結果としてひとつのメッセージの中で同じユーザーに対して何度もメンションがかかるような本文ができたときは、本文中で最初にそのユーザーが登場する部分だけメンションがかかったように表示されます。


なお、Teamsの制限としてひとつのメッセージでメンションできるユーザーの上限は20人までです。20人以上に同時にメンションするにはタグメンションやチームメンションの使用が必要です。

ユーザーへのメンションに拘る場合、メッセージを投稿した上でスレッドに返信する形でメンションを並べる形が考えられます。。PowerAppsでの実装例を別のページに示します。PowerAutomateではChunk関数を使ってメンションの宛先を分割する方法があります。

Power AutomateでTeamsのスレッドに返信する

Power AutomateでTeamsのスレッドに返信のメッセージを投稿するには、チャネル内のメッセージで応答しますを使用します。新しいスレッドを建てるチャットまたはチャネルでメッセージを投稿するに比べて少々わかりにくい名称ですし、リファレンスを読んでもよくわかりません。こういうときは、Power Automate上で実際に作ってみるのが早いです。

投稿者はFlow BotまたはUserから選択します。投稿先はChannelの一択です。

Message IDはチャットまたはチャネルでメッセージを投稿するのメッセージIDを入力します。チャットまたはチャネルでメッセージを投稿するの出力は、メッセージ ID、メッセージリンク、会話 IDの3個です。なお、私の環境で試したところ会話IDはチャネルIDと同じでした。

TeamとChannelは投稿先のチームとチャネルを指定します。カスタム値の入力を使って、チームIDとチャネルIDから指定することもできます。チームIDとチャネルIDの取得方法は別の記事で紹介しています。

ところで、チャネル内のメッセージで応答しますの出力にもメッセージIDがあります。こちらのメッセージIDに対して返信しようとすると、メッセージが見つからないというエラーがでました。スレッドのトップのメッセージにしか返信できないのかもしれません。