Zendesk-Salesforce 同期
このガイドでは、Salesforce(信頼できる唯一の情報源)から Zendesk へ顧客組織とユーザーデータを同期する、自動化された毎時処理である Zendesk-Salesforce Sync を説明します。この同期により、正確な Support entitlement、適切な SLA の適用、Zendesk 内の最新の顧客メタデータが確保されます。
同期は GitLab CI/CD パイプラインを通じて 9 つの順次ステージで実行されます。このドキュメントでは同期の仕組みを説明し、管理者向けのトラブルシューティングガイダンスを提供します。
管理者は管理者タスクセクションをレビューしてください。
技術的な詳細
Zendesk-Salesforce Sync を理解する
Zendesk-Salesforce Sync とは
Zendesk-Salesforce Sync は、Salesforce から Zendesk へ顧客データを同期する、相互接続された 9 つの GitLab CI/CD プロジェクトの集合です。同期では次を扱います。
- 顧客組織: Zendesk Global と US Government の両方のアカウントメタデータ、Support entitlement、サブスクリプション階層、ARR。
- パートナー組織: パートナーアカウント用の個別の同期プロセス(Zendesk Global のみ)。
- ユーザーの関連付け: Salesforce の連絡先に基づくユーザーから組織への自動リンク(Zendesk US Government のみ)。
同期は毎時実行され、収集、処理、比較、同期という順次ステージでデータを処理します。
Zendesk-Salesforce Sync の仕組み
Zendesk-Salesforce Sync は、すべての Zendesk 本番インスタンスを Salesforce と同期させるために「ステージ」で実行される複雑な一連のプロジェクトです。ステージは次のとおりです。
graph LR A--> B B--> C C--> D C--> E D--> F E--> G F--> H G--> I A(Account gathering) B(Organization gathering) C(Processing) D(Comparing - Global) E(Comparing - US Government) F(Syncing - Global) G(Syncing - US Government) H(Partner Sync - Global) I(User Sync - US Government)
アカウントの収集
ソースプロジェクト: Salesforce Accounts
これは Zendesk-Salesforce Sync のプロセス全体を開始するステージです。ソースプロジェクトのスケジュール済みパイプラインが、毎時 UTC の開始時(0 * * * *)に実行されます。これは bin/gather スクリプトを使用し、次を行います。
次の SOQL クエリを使用して Salesforce アカウントのリストを取得します。
クリックして展開
SELECT Account_ID_18__c, Name, CARR_This_Account__c, Type, Ultimate_Parent_Sales_Segment_Employees__c, Account_Owner_Calc__c, Technical_Account_Manager_Name__c, Restricted_Account__c, Solutions_Architect_Lookup__r.Name, Account_Demographics_Geo__c, Account_Demographics_Region__c, Latest_Sold_To_Contact__r.Email, Latest_Sold_To_Contact__r.Name, Partner_Track__c, Partners_Partner_Type__c, Support_Hold__c, Account_Risk_Level__c, Support_Instance__c, ( SELECT Id, Name, Subscription_ID_18__c, Zuora__Status__c, Zuora__SubscriptionStartDate__c, Zuora__SubscriptionEndDate__c, Sold_To_Email__c FROM Zuora__Subscriptions__r WHERE Zuora__Status__c != 'Cancelled' AND Zuora__SubscriptionEndDate__c >= #{end_date} ), ( SELECT Id, Name, Zuora__SubscriptionRatePlanChargeName__c, Zuora__Subscription__c, Zuora__EffectiveStartDate__c, Zuora__EffectiveEndDate__c, Zuora__Quantity__c FROM Zuora__R00N40000001lGjTEAU__r WHERE Subscription_Status__c != 'Cancelled' AND Zuora__EffectiveEndDate__c >= #{end_date} ) FROM Account WHERE Type IN ('Customer', 'Former Customer')見つかったすべての Salesforce アカウントをアカウントオブジェクトに再マッピングします。
sales_segment属性はUltimate_Parent_Sales_Segment_Employees__c値から導出されます。- 値がある場合はすべて小文字に設定します。値がない場合は
unknownに設定します。
- 値がある場合はすべて小文字に設定します。値がない場合は
region属性はAccount_Demographics_Geo__cとAccount_Demographics_Region__cの値から導出されます。Account_Demographics_Geo__cの値がAMER、APJ、またはEMEAの場合は、その値を使用します。- これらの値でない場合、
Account_Demographics_Region__cの値がAMER、APJ、またはEMEAであればその値を使用します。 - これらの値でもない場合は、
nilに設定します。
restricted属性はRestricted_Account__c値から導出されます。Restricted_Account__cの値がRestricted Partyならtrueに設定し、それ以外はfalseに設定します。
escalated属性はAccount_Risk_Level__c値から導出されます。Account_Risk_Level__cの値がAt Risk - Escalatedならtrueに設定し、それ以外はfalseに設定します。
exception属性はSupport_Instance__c値から導出されます。Support_Instance__cの値がfederal-supportならtrueに設定し、それ以外はfalseに設定します。
subs属性はZuora__Subscriptions__r値から導出されます。charges属性はZuora__R00N40000001lGjTEAU__r値から導出されます。
再マッピングされた Salesforce アカウントを含むアーティファクトファイル(
data/salesforce_accounts.json)を作成します。
実行が完了すると、生成されたアーティファクトファイルは次のステージである組織の収集に渡されます。
組織の収集
ソースプロジェクト: Zendesk Orgs
このステージはアカウントの収集の完了時にトリガーされます。
これは次の 2 つのスクリプトを使用します。
bin/gather_globalbin/gather_us_government
正確な属性はスクリプトごとに異なりますが、両スクリプトの一般的な動作は同じです。
- List organizations API エンドポイントを使用して、インスタンスのすべての Zendesk 組織を収集します。
- 見つかったすべての組織をアカウントオブジェクトにマッピングします。
- 再マッピングされた組織を含むアーティファクトファイルを作成します。
bin/gather_globalの場合はdata/zendesk_global.json。bin/gather_us_governmentの場合はdata/zendesk_usgov.json。
実行が完了すると、生成されたアーティファクトファイルとアカウントの収集で生成されたファイルは、次のステージである処理に渡されます。
処理
ソースプロジェクト: Processor
このステージは組織の収集の完了時にトリガーされます。同期自体に必要なすべての変換を行うため、ステージの中で最も複雑です。
これは bin/processor スクリプトを使用し、次を行います。
必要なデータを読み込みます。
- 管理対象コンテンツプロジェクトである Zendesk Global Organization Entitlement Overridesから override ファイルを取得します。
data/plans.ymlファイルを読み取ります。- アーティファクトファイルからデータを読み取ります。
分析および操作するデータ量が非常に多いため、検索構造を生成します。
名前 説明 オブジェクトタイプ global_orgs_by_id salesforce_id キーを使用して Hash に変換されたすべての Global 組織 Hash usgov_orgs_by_id salesforce_id キーを使用して Hash に変換されたすべての US Government 組織 Hash partners_by_sfdc_id すべてのパートナー組織の salesforce_id Array overrides_by_id salesforce_id キーを使用して Hash に変換されたすべての override Hash plan_lookup 対応するサブスクリプションタイプに結び付いたすべての製品チャージ名 Hash all_valid_plans すべての種類のアカウントに結び付いたすべての製品チャージ名 Array usgov_plan_names_for_exceptions 例外がある US Government アカウントに結び付いたすべての製品チャージ名 Array usgov_plan_names 例外がない US Government アカウントに結び付いたすべての製品チャージ名 Array today 今日の日付 Date expired_end_date 15 日前 Date three_years_out 3 年と 1 日前 Date 各アカウントの Global オブジェクトを判断します。
- Zendesk 組織の属性に一致する Hash を作成します。
- 対応する Salesforce アカウントからすべてのサブスクリプションを分析します。
- アカウントの US Government 例外設定に応じて、Global オブジェクトに適用されるサブスクリプションのみを最初に選択します。
- 次に、アカウントのサブスクリプションに結び付いた製品チャージ名に基づいて、オブジェクトのサブスクリプション値を判断するため、それぞれを反復処理します。
- すべての製品チャージの有効終了日の最大値に基づいて
expiration_date値を設定します。 - アカウントに記載された override があるかを確認し、それに従ってオブジェクトを変更します。
- オブジェクトの support_level を最高レベルの Support に設定します。
- Ultimate > Gold > Premium > Silver > Consumption Only > Custom > Community > Expired
- オブジェクトの
support_levelが expired と表示されていない限り、オブジェクトのtypeをcustomerに設定します。 - オブジェクトの
support_levelが expired と表示されている場合、オブジェクトのaarを 0 に設定します。 - オブジェクトの
sub_ss_enterpriseが true の場合、sub_ss_ase値を true に設定します。 - オブジェクトの
expiration_dateと検索オブジェクトthree_years_outの値の関係を確認して、アカウントを同期に含めるか判断します(前者が小さい場合、含めません)。
各アカウントの US Government オブジェクトを判断します。
- Zendesk 組織の属性に一致する Hash を作成します。
- 対応する Salesforce アカウントからすべてのサブスクリプションを分析します。
- アカウントの US Government 例外設定に応じて、US Government オブジェクトに適用されるサブスクリプションのみを最初に選択します。
- 次に、アカウントのサブスクリプションに結び付いた製品チャージ名に基づいて、オブジェクトのサブスクリプション値を判断するため、それぞれを反復処理します。
- すべての製品チャージの有効終了日の最大値に基づいて
expiration_date値を設定します。 - アカウントに記載された override があるかを確認し、それに従ってオブジェクトを変更します。
- オブジェクトの support_level を最高レベルの Support に設定します。
- Ultimate > Gold > Premium > Silver > Consumption Only > Custom > Community > Expired
- オブジェクトの
support_levelが expired と表示されていない限り、オブジェクトのtypeをcustomerに設定します。 - オブジェクトの
support_levelが expired と表示されている場合、オブジェクトのarrを 0 に設定します。 - オブジェクトの
usgov_fedrampが true の場合、オブジェクトのsub_gitlab_dedicatedとsub_usgov_24x7を true に設定します。 - オブジェクトの対応するスケジュール(12x5 と 24x7)を設定します。
- オブジェクトの
expiration_dateと検索オブジェクトthree_years_outの値の関係を確認して、アカウントを同期に含めるか判断します(前者が小さい場合、含めません)。
各種オブジェクトからアーティファクトファイルを作成します。
- Global オブジェクト用の
data/global_accounts.json。 - US Government オブジェクト用の
data/usgov_accounts.json。
- Global オブジェクト用の
実行が完了すると、2 つの別個のステージがトリガーされます。
- Comparing - Global。組織の収集からのアーティファクトファイルと
data/global_accounts.jsonを渡します。 - Comparing - US Government。組織の収集からのアーティファクトファイルと
data/usgov_accounts.jsonを渡します。
Comparing - Global
ソースプロジェクト: Global Org Compare
このステージは処理の完了時にトリガーされます。
これは bin/compare スクリプトを使用し、次を行います。
- アーティファクトファイルからデータを読み取ります。
salesforce_idを統一フィールド(Zendesk 組織と組織オブジェクトを関連付けるフィールド)として使用し、すべてのデータを比較にかけて 3 つの配列を生成します。zendesk_only_objects: 一致する組織オブジェクトがない Zendesk 組織。ssot_only_objects: 一致する Zendesk 組織がない組織オブジェクト。different_objects: 一致する Zendesk 組織があるものの、2 つに含まれるデータが等しくない組織オブジェクト。
- 次に 3 つのアーティファクトを生成します。
data/global_updates.json:different_objects内の項目を含みます。data/global_creates.json:support_levelがexpiredのものを除いたssot_only_objects内の項目を含みます。data/global_not_in_sync.json:zendesk_only_objects内の項目から次を除いたものを含みます。typeがalliance_partner、open_partner、またはselect_partnerのもの。protected_ids関数で定義された配列にsalesforce_idを含むもの。
実行が完了すると、生成されたアーティファクトファイルは次のステージであるSyncing - Globalに渡されます。
Comparing - US Government
ソースプロジェクト: US Government Org Compare
このステージは処理の完了時にトリガーされます。
これは bin/compare スクリプトを使用し、次を行います。
- アーティファクトファイルからデータを読み取ります。
salesforce_idを統一フィールド(Zendesk 組織と組織オブジェクトを関連付けるフィールド)として使用し、すべてのデータを比較にかけて 3 つの配列を生成します。zendesk_only_objects: 一致する組織オブジェクトがない Zendesk 組織。ssot_only_objects: 一致する Zendesk 組織がない組織オブジェクト。different_objects: 一致する Zendesk 組織があるものの、2 つに含まれるデータが等しくない組織オブジェクト。
- 次に 3 つのアーティファクトを生成します。
data/usgov_updates.json:different_objects内の項目を含みます。data/usgov_creates.json:support_levelがexpiredのものを除いたssot_only_objects内の項目を含みます。data/usgov_not_in_sync.json:zendesk_only_objects内の項目から次を除いたものを含みます。protected_ids関数で定義された配列にsalesforce_idを含むもの。
実行が完了すると、生成されたアーティファクトファイルは次のステージであるSyncing - US Governmentに渡されます。
Syncing - Global
ソースプロジェクト: Zendesk Global Org Sync
このステージはComparing - Globalの完了時にトリガーされます。
これは bin/sync スクリプトを使用し、次を行います。
- アーティファクトファイルからデータを読み取ります。
data/global_creates.jsonアーティファクトファイルのオブジェクトリストを反復処理し、次を行います。- Zendesk の Create Organization API エンドポイントを使用して組織を作成します。
sold_tos属性から新しく作成した組織にユーザーを関連付けます。- 関連付け可能なユーザーがいない場合は、Customer Support Systems チームに通知する投稿を #customer_support_systems Slack チャンネルに作成します。
data/global_updates.jsonアーティファクトファイルのオブジェクトをバッチに分割し(API の制限により最大 100)、次を行います。- Zendesk の Update Many Organizations API エンドポイントを使用して更新ジョブを作成します(以前に判断した内容と一致するよう更新します)。
data/global_not_in_sync.jsonアーティファクトファイルのオブジェクトをバッチに分割し(API の制限により最大 100)、次を行います。- Zendesk の Update Many Organizations API エンドポイントを使用して更新ジョブを作成します(削除対象としてマークするよう更新します)。
実行が完了すると、次のステージであるPartner Sync - Globalがトリガーされます。
Syncing - US Government
ソースプロジェクト: Zendesk US Government Org sync
このステージはComparing - US Governmentの完了時にトリガーされます。
これは bin/sync スクリプトを使用し、次を行います。
- アーティファクトファイルからデータを読み取ります。
data/usgov_creates.jsonアーティファクトファイルのオブジェクトリストを反復処理し、次を行います。- Zendesk の Create Organization API エンドポイントを使用して組織を作成します。
data/usgov_updates.jsonアーティファクトファイルのオブジェクトをバッチに分割し(API の制限により最大 100)、次を行います。- Zendesk の Update Many Organizations API エンドポイントを使用して更新ジョブを作成します(以前に判断した内容と一致するよう更新します)。
data/usgov_not_in_sync.jsonアーティファクトファイルのオブジェクトをバッチに分割し(API の制限により最大 100)、次を行います。- Zendesk の Update Many Organizations API エンドポイントを使用して更新ジョブを作成します(削除対象としてマークするよう更新します)。
実行が完了すると、次のステージであるUser Sync - US Governmentがトリガーされます。
Partner Sync - Global
ソースプロジェクト: Partner Sync
このステージはSyncing - Globalの完了時にトリガーされます。Zendesk Global の観点から見た Zendesk-Salesforce Sync の最終ステージとして機能します。
このステージは複数スクリプトのプロセスです。
bin/salesforce。次を行います。次の SOQL クエリを使用して Salesforce アカウントのリストを取得します。
クリックして展開
SELECT Account_ID_18__c, Name, Account_Owner_Calc__c, Technical_Account_Manager_Name__c, Restricted_Account__c, Solutions_Architect_Lookup__r.Name, Partner_Track__c, Support_Hold__c, Account_Risk_Level__c, Type, Partners_Partner_Status__c FROM Account WHERE Account_ID_18__c = 'REDACTED' OR ( Type = 'Partner' AND Partners_Partner_Status__c IN ('Authorized') AND Partner_Track__c IN ('Open', 'Select') )見つかったすべての Salesforce アカウントをアカウントオブジェクトに再マッピングします。
account_type属性はPartner_Track__cおよびAccount_ID_18__c値から導出されます。Account_ID_18__cが特定の Salesforce アカウントの値なら、alliance_partnerに設定します。Partner_Track__cがOpenなら、open_partnerに設定します。Partner_Track__cがSelectなら、select_partnerに設定します。- 以前に一致した基準がない場合は、
nilに設定します。
restricted_account属性はRestricted_Account__c値から導出されます。Restricted_Account__cの値がRestricted Partyならtrueに設定し、それ以外はfalseに設定します。
org_in_escalated_state属性はAccount_Risk_Level__c値から導出されます。Account_Risk_Level__cの値がAt Risk - Escalatedならtrueに設定し、それ以外はfalseに設定します。
再マッピングされた Salesforce アカウントを含むアーティファクトファイル(
data/salesforce_accounts.json)を作成します。
bin/zendesk。次を行います。- List organizations API エンドポイントを使用して、インスタンスのすべての Zendesk 組織を収集します。
- パートナータイプ以外の組織を除外します(
account_typeがalliance_partner、open_partner、またはselect_partnerのいずれかです)。 - 残りのすべての組織を組織オブジェクトにマッピングします。
- 再マッピングされた組織を含むアーティファクトファイル(
data/zendesk_orgs.json)を作成します。
bin/compare。次を行います。- アーティファクトファイルからデータを読み取ります。
salesforce_idを統一フィールド(Zendesk 組織と組織オブジェクトを関連付けるフィールド)として使用し、すべてのデータを比較にかけて 3 つの配列を生成します。zendesk_only_objects: 一致する組織オブジェクトがない Zendesk 組織。ssot_only_objects: 一致する Zendesk 組織がない組織オブジェクト。different_objects: 一致する Zendesk 組織があるものの、2 つに含まれるデータが等しくない組織オブジェクト。
- 次に 3 つのアーティファクトを生成します。
data/updates.json:different_objects内の項目を含みます。data/creates.json:ssot_only_objects内の項目を含みます。data/not_in_sync.json:zendesk_only_objects内の項目を含みます。
bin/sync。次を行います。- アーティファクトファイルからデータを読み取ります。
data/creates.jsonアーティファクトファイルのオブジェクトリストを反復処理し、次を行います。- Zendesk の Create Organization API エンドポイントを使用して組織を作成します。
data/updates.jsonアーティファクトファイルのオブジェクトをバッチに分割し(API の制限により最大 100)、次を行います。- Zendesk の Update Many Organizations API エンドポイントを使用して更新ジョブを作成します(以前に判断した内容と一致するよう更新します)。
data/not_in_sync.jsonアーティファクトファイルのオブジェクトをバッチに分割し(API の制限により最大 100)、次を行います。- Zendesk の Update Many Organizations API エンドポイントを使用して更新ジョブを作成します(削除対象としてマークするよう更新します)。
User Sync - US Government
ソースプロジェクト: Zendesk US Government User Sync
このステージはSyncing - US Governmentの完了時にトリガーされます。Zendesk US Government の観点から見た Zendesk-Salesforce Sync の最終ステージとして機能します。
このステージは複数スクリプトのプロセスです。
bin/zendesk_orgs_gather。次を行います。- List organizations API エンドポイントを使用して、インスタンスのすべての Zendesk 組織を収集します。
- すべての組織を組織オブジェクトにマッピングします。
- 再マッピングされた組織を含むアーティファクトファイル(
data/zendesk_orgs.json)を作成します。
bin/zendesk_users_gather。次を行います。- List Users API エンドポイントを使用して、インスタンスのすべての Zendesk ユーザーを収集します。
- 保護されたすべてのユーザー(メールドメインが
gitlab.comまたは管理下にあるエンドユーザーのメールアドレスのユーザー)を除外します。 - すべてのユーザーをユーザーオブジェクトにマッピングします。
- 再マッピングされたユーザーを含むアーティファクトファイル(
data/zendesk_users.json)を作成します。
bin/salesforce。次を行います。アーティファクトファイル
data/zendesk_orgs.jsonを読み取り、salesforce_id値だけを含む 500 個ずつのチャンクにリストを分割します(SOQL の制限によるものです)。次の SOQL クエリを使用して Salesforce 連絡先のリストを取得します。
クリックして展開
SELECT Name, Email, Account.Account_ID_18__c FROM Contact WHERE Inactive_Contact__c = false AND Role__c INCLUDES ('Gitlab Admin') AND Name != '' AND Email != '' AND Account.Account_ID_18__c IN (#{chunk.map { |i| "'#{i}'" }.join(',')})chunk部分は、各チャンクに含まれるsalesforce_id値のリストです。
見つかったすべての Salesforce 連絡先を連絡先に再マッピングします。
organization_id属性は、一致する Zendesk 組織のsalesforce_id値のid値から導出されます。
無効な連絡先をすべて削除します。
email値がないもの。- 重複するもの(
email値で一致)。
再マッピングされた Salesforce 連絡先を含むアーティファクトファイル(
data/salesforce_contacts.json)を作成します。
bin/compare。次を行います。- アーティファクトファイルからデータを読み取ります。
emailを統一フィールド(Zendesk ユーザーとユーザーオブジェクトを関連付けるフィールド)として使用し、すべてのデータを比較にかけて 3 つの配列を生成します。zendesk_only_objects: 一致する組織オブジェクトがない Zendesk 組織。ssot_only_objects: 一致する Zendesk 組織がない組織オブジェクト。different_objects: 一致する Zendesk 組織があるものの、2 つに含まれるデータが等しくない組織オブジェクト。
- 次に 3 つのアーティファクトを生成します。
data/updates.json:different_objects内の項目を含みます。data/creates.json:ssot_only_objects内の項目を含みます。data/not_in_sync.json:zendesk_only_objects内の項目を含みます。
bin/sync。次を行います。- アーティファクトファイルからデータを読み取ります。
data/creates.jsonアーティファクトファイルのオブジェクトリストを反復処理し、次を行います。- Zendesk の Create User API エンドポイントを使用してユーザーを作成します。
data/updates.jsonアーティファクトファイルのオブジェクトをバッチに分割し(API の制限により最大 100)、次を行います。- Zendesk の Update Many Users API エンドポイントを使用して更新ジョブを作成します(以前に判断した内容と一致するよう更新します)。
data/not_in_sync.jsonアーティファクトファイルのオブジェクトをバッチに分割し(API の制限により最大 100)、次を行います。- Zendesk の Update Many Users API エンドポイントを使用して更新ジョブを作成します(削除対象としてマークするよう更新します)。
管理者タスク
注記
- このアクションには、Zendesk-Salesforce Sync プロジェクトに対する
Developerレベルのアクセスが必要です。
Zendesk-Salesforce Sync を変更する
警告
- これは、対応するリクエスト Issue(機能リクエスト、Administrative、Bug など)が存在する場合にのみ実行します。存在しない場合は、先に作成し、作業する前に標準プロセスを通過させてください。
Zendesk-Salesforce Sync を変更するには、対応するプロジェクトリポジトリで MR を作成する必要があります(どのリポジトリかは行う変更によります)。正確な変更内容はリクエスト自体によって異なります。
同僚が MR をレビューして承認した後、MR をマージできます。これは Ad-hoc デプロイタイプのため、変更は次回のスケジュール済み実行で使用されます。
どこでどの変更を行うかのクイックリファレンス
- SKU の変更: 詳しくは SKU Mapping のドキュメントを参照してください。
- entitlement 計算の変更: Processorプロジェクトで変更します。
- パイプラインスケジュールの変更: Salesforce Accountsプロジェクトで変更します。
- オブジェクト属性の変更: すべての プロジェクトで変更する可能性があります。
一般的な問題とトラブルシューティング
Runner エラー
Runner が完全に失敗する、タイムアウトするなどが含まれます。発生した場合に取れる対応は 2 つあります。
- 同期を最初から再開する。
- 次の同期実行を待つ。
実行の早い段階(毎時の開始から最初の 5 〜 10 分以内)で問題が発生した場合は、再開しても問題ありません。それより後の場合は、次の同期実行を待つ必要があります。
これが繰り返し発生する場合は、Fullstack Engineer に通知するため Issue を起票してください。
長時間実行されるジョブ
プロセス全体が 45 分を超えることはありません。長時間実行されるジョブに関するアラートが出た場合は、次のいずれかを行うのが最適です。
- 古いパイプラインをキャンセルする。
- 新しいパイプラインをキャンセルする。
実行を継続した一方がこれを処理でき(キャッシュを使用していないため)、自動的に修正されるはずです。
これが繰り返し発生する場合は、Fullstack Engineer に通知するため Issue を起票してください。
データの不一致
これは、計算上の問題または期待値上の問題のいずれかであるため、解決が複雑になる場合があります。実際にデータの不一致(すなわち計算上の問題)があるのか、単に期待値上の問題なのかを判断するには、ソース(Salesforce、Zendesk)のデータを慎重にレビューする必要があります。
- 計算上の問題の場合は、Fullstack Engineer に通知するため Bug レポートを起票してください。
- 期待値上の問題の場合は、差異とその値になる理由を説明します。
- その会話の結果、計算を変更したい場合は、報告者に機能リクエスト Issue を起票してもらってください。
スクリプトエラー
これに使用する各スクリプトは、可能な限り多くの詳細を提供するようにコーディングされています。スクリプトエラーが発生したとき、まず実際のスクリプトエラーなのか、単にネットワークの問題(スクリプトエラーを引き起こしている)なのかを結論付ける必要があります。
確認する最も簡単な方法は、過去の同期実行とその次の実行を確認することです。本当のスクリプトエラーは毎回繰り返されます。毎回発生していない場合は、ネットワークの問題です。
- ネットワークの問題の場合は、Runner エラーを参照してください。
- 本当のスクリプトエラーの場合は、Fullstack Engineer に通知するため Issue を起票してください。
c955a93f)