Microsoft Teams 向け ServiceNow の自動インポート機能<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } はじめに: IT Service Management と Microsoft Teams の統合、および HR Service Delivery と Microsoft Teams アプリケーションの統合に対して要求ベースチャットを構成し、エージェントと従業員の間の Microsoft Teams チャット会話をシステムが自動インポートできるようにします。 エージェントと要求者の間の Microsoft Teams チャットを自動的にインポートするためのデフォルトのチャット構成が OOTB で提供されています。システム管理者は、特定の条件に応じて自動インポート機能を他のテーブルへ拡張できます。 自動インポート機能のセットアップ 以下のテーブルには、Microsoft Teams 自動インポート チャット機能を実行するために必要な構成が含まれています。 Requester Mapping (sn_tcm_collab_hook_chat_requester_mapping) テーブルの Requestor マッピングを格納します。各レコードは、テーブルと sys_user 参照フィールド名とのマッピングです。この構成は、要求者が Microsoft Teams チャットに参加しているかどうかを識別するために使用されます。テーブルに Requester Mapping が存在し、かつ要求者がチャットに参加している場合にのみ、Interaction が作成されます。 Close Conditions (sn_tcm_collab_hook_chat_closing_condition) テーブルのクローズ条件を格納します。これらの構成は、ソースレコードがクローズされているかどうかを識別するために使用されます。ソースレコードが一致する条件を持つ場合、Microsoft Teams チャットをクローズ済みとしてマークします。 Chat Configuration (sn_tcm_collab_hook_chat_config) チャットを自動または手動でインポートするかどうか、および Teams に送信する開始メッセージを指定するための構成が含まれています。テーブルに条件が指定されており、それらの条件に一致するレコードでチャットが開始された場合、該当するメッセージおよび自動/手動インポート構成がそのチャットレコードに適用されます。 自動インポート チャットの使用 エージェントは、"Start Microsoft Teams Chat" UI アクション (Microsoft Teams Integration がインストールおよび設定されている場合のみ表示されます) をクリックしてレコードからチャットを開始できます。ポップアップウィンドウには「Chats will be imported using the auto-import feature」というメッセージが表示されます。 インシデントには、チャットがシステムによって自動インポートされることを示す Work Note が追加されます。 すべての Microsoft Teams チャットは "sn_tcm_collab_hook_ms_teams_chat" テーブルに保存されます。Microsoft Teams のすべてのチャットメッセージは 30 分間隔で ServiceNow インスタンスに自動インポートされます。システムはすべてのチャットにわたって新しいメッセージを検索し、それらを ServiceNow インスタンスにインポートします。 非アクティブな会話に対してポーリングが無期限に実行されることを防ぐため、新しいメッセージが存在しない場合、ポーリング間隔は徐々に長くなり、最終的にポーリングは停止します。 システムは 30 分ごとに Microsoft Teams チャットの新規メッセージを確認します。新しいメッセージがない場合、1 時間、2 時間、4 時間、および 8 時間の間隔で新しいメッセージを確認します。8 時間の間隔で 7 日間新しいメッセージが存在しない場合、自動インポートのポーリングアクティビティは無効になります。自動インポートフラグは、7 日間の制限に達した場合でも true のまま保持されます。その後、タスクがクローズされると、関連付けられたタスクが解決済みまたはクローズ済み (非アクティブ化または Close Conditions に一致) であるため、最後に 1 回チャットのトランスクリプトを取得し、チャットレコードを非アクティブにします。 いずれかの間隔でメッセージが存在する場合、自動インポートタイマーは次の間隔で新しいメッセージを検索し、メッセージをインポートします。その後タイマーは 30 分間隔にリセットされ、前述したようにポーリングループが最初から開始されます。 ポーリングアプローチの詳細 Microsoft Teams チャットからの新しいメッセージのポーリングはサブフローを使用して行われます。サブフローを採用する理由は以下のとおりです。 処理時間が予測可能です。チャットは予定された時刻付近でインポートされます。相当数のチャットを処理するための処理時間も、テスト結果に基づいて管理可能である必要があります。 1. アプローチ ServiceNow インスタンスから新しい Microsoft Teams チャットが作成され、自動インポートが有効になっている場合、ビジネスルールがトリガーされ、チャットレコード作成から 30 分後に開始するようタイマーが設定された "Auto Import Messages Subflow" サブフローを実行します。 サブフローは "Get MS Teams Messages" アクションの実行を試み、ServiceNow インスタンス内のチャットを更新します。 サブフローの実行中に 429 スロットリング (MSFT に対するリクエスト過多) に達した場合、REST コールの再実行を開始する前に 3 分待機し、スロットリング発生の有無を示すテーブルにこれらの詳細を保存します。後続のサブフローを実行する際には、まずこのテーブルを確認し、スロットルフラグが true に設定されている場合は、実行前にさらに 3 分待機するようサブフローを再スケジュールします。 2. Backoff ポリシー チャットメッセージ取得のために ServiceNow インスタンスから Microsoft Graph API へ送信されるコール数を削減し、新規サブフロー作成数を削減するために Backoff ポリシーが設定されています。ServiceNow インスタンスからチャットが作成されると、30 分後に Microsoft Teams チャットからデータを取得するためのサブフローが作成されます。チャットがない場合は、1 時間、2 時間、4 時間、および 8 時間後に試行します。8 時間の制限に達すると、その次の 8 時間後に再試行し、これを 7 日間継続します (最悪のケースでは、ポーリングは 21 回発生します (7 日 × 1 日あたり 3 回の 8 時間スロット))。この 7 日間でメッセージが取得されない場合、チャットは auto-import=false としてマークされ、以降メッセージは自動インポートされません。サブフロー実行時に 7 日以内の任意の時点で新しいメッセージが存在した場合、カウンターはリセットされ、Backoff ポリシーは再び 30 分から開始され、7 日間タイマーもリセットされます。 3. Ceiling Logic デフォルトでは、最初の 30 分間で試行されるチャットの最大数は 500 です。任意の時点におけるチャット総数の上限は 10,000 です。サブフローを持つチャット数が上限を超えた場合、新しい Microsoft Teams チャットは auto-import=false で作成され、エージェントには Start Chat モーダルで上限到達が通知されます。これは、サブフローを持つチャット数が上限未満になるまで継続されます。上限値はシステムプロパティ sn_tcm_collab_hook.teams_auto_import_chat_cycle_ceil_limit によって制御され、必要に応じて 500 を超える値へ変更できます。また、auto-import が有効であり、next_action フィールドが未来の日時に設定されているアクティブレコードについて、sn_tcm_collab_hook_ms_teams_chat テーブルも確認します。これは加算されるものではなく、上限判定のために確認される別の条件です。これはアクティブなサブフロー数と一致するはずですが、自動インポート有効チャットを作成する前に確認される別条件です。 4. レコードアーカイブ Microsoft Teams Chat テーブル (sn_tcm_collab_hook_ms_teams_chat) にはアーカイブルールが提供されており、デフォルト期間は 6 か月です。その後 3 か月でパージされます。 5. シナリオ 親レコードが再割り当てされた場合の自動インポート 自動インポートサブフロー実行中にレコードが再割り当てされた場合: この親レコードに関連付けられた Microsoft Teams Chat レコードの "Initiated By" フィールドは、再割り当て先ユーザーで更新されます。再割り当て後にポーリングが実行される際、新しいチャットメッセージを取得するために再割り当て先ユーザーのトークンが使用されます。再割り当て先ユーザー (Teams 上で有効なユーザーの場合) は、親レコードに関連付けられたすべてのチャットへ追加されます。レコードの再割り当て先ユーザーが有効な Microsoft Teams ユーザーではない場合 (メールアドレスが無効または空)、または有効な Microsoft Teams トークンを持たない場合、親レコードの Work Notes にメッセージが追加され、自動インポートサブフローはキャンセルされます。再割り当て先ユーザーが有効な Microsoft Teams ユーザーではない場合、システムは "Chat Started By" ユーザー (最初にチャットを開始したユーザー) のトークンを使用してメッセージを自動インポートします。"Chat Started By" ユーザーのトークンも無効な場合、自動インポートは停止し、Work Notes にメッセージが投稿されます。自動インポートが停止すると、再開する方法はありません。 親レコードがクローズされた場合の自動インポート 親レコードがクローズ条件に一致する場合: システムは最後にもう一度最新のメッセージ (存在する場合) の取得を試み、有効な場合は "Initiated By" ユーザーのトークン、または "Chat Started By" ユーザーのトークンを使用してチャットのクローズを試みます。メッセージ取得時には、前述と同じメカニズムに従い、トークンの確認および必要に応じたメッセージ投稿を行います。Microsoft Teams チャット内のすべてのメンバーが削除され、実質的に読み取り専用になります。Microsoft Teams Chat レコードは active=false および auto import=false としてマークされ、チャットレコードは読み取り専用になります。チャットメンバーの削除およびチャットのクローズについてのメッセージが親レコードに追加されます。実行中のアクティブな自動インポートサブフローが存在する場合、それらはキャンセル済みとしてマークされます。チャットが Active=False または Auto Import=False としてマークされた後は、再びアクティブにしたり再開したりする方法はありません。