Requirement 概要
 
  Zoho CRM ユーザーが、各添付ファイルを手動で選択して送信するのではなく、カスタム関数を利用して商談関連のドキュメント(提案書、請求書、契約書など)を顧客へ自動的かつ簡単に共有したいと考えています。
 
 使用する Case
 
  Zoho CRM を利用して電子商品を顧客に販売している企業では、営業プロセスの中で営業チームが複数のドキュメントを商談データにアップロードします:
  
   - 提案書
 
   - 価格資料
 
   - ケーススタディ
 
   - 発注書
 
   - 契約書
 
  
  これらのドキュメントは、Zoho CRM の添付ファイルセクションに、商談ごとに保存されています。
  商談が「完了済み Won」とマークされた際、企業はすべての商談関連ドキュメントを関連付けられた連絡先に送信する必要があります。
  
   
  
  ドキュメントを手動で送信する際の課題:営業担当者は、商談が「完了済み Won」とマークされるたびに「メールを送信する」ボタンをクリックし、関連ドキュメントを一つずつ添付してメールを作成する必要があり、これにより多くの時間がかかってしまいます。
  
  
   
    
    なぜ重要なのか:
    
     - 時間の節約
 
     - エラーゼロ
 
     - 拡張性
 
     - リスクの軽減
 
     - ファイルを即時共有することで顧客体験が向上
 
    
   
  
 
  
 
 
  
   
    
    権限と利用可能範囲
    
    
     -> 管理 Extensibility権限を持つユーザーは、外部連携の作成やカスタム関数の作成が可能です。
    
    
     -> 管理 自動化権限を持つユーザーは、ワークフローのルール設定が可能です。
    
    
     -> 管理 テスト環境権限を持つユーザーは、テスト環境の管理およびこの利用ケースのテストが可能です。
    
   
  
  
 設定
 
  営業担当者がすべてのドキュメントを商談が「完了済み Won」とマークされた際に送信済みにしたい場合、ワークフロールール自動化機能を利用して、商談ステージが「完了済み Won」に更新されるたびにトリガーし、カスタム関数を実行して商談のすべての添付ファイルを取得し、関連付けられた連絡先へメール送信することができます。
 
 
  - 
   
ワークフロールール設定:
 
 
 
  ナビゲート:Zoho CRM の 設定 (⚙️) >> 自動化 >> ワークフロー ルール >> ルールの作成
 
 
  
 
 
  「商談」タブを選択し、ルールに名前と説明を入力します。
 
 
  
 
 
  -> 実行タイミング: データ操作 >> 編集 >> 特定のステージ項目が「完了済み Won」に更新されたとき >> 「繰り返し」有効 
 
 
  -> 条件: すべての商談
 
 
  -> 即時処理: 関数を選択 >> 独自の関数を作成
 
 
  
 
 
 
  - 
   
接続の作成:
 
 
 
  ナビゲート:Zoho CRM の 設定 (⚙️) >> Developer Hub >> 外部連携 >> My Connection >> 接続の作成
 
 
  
 
 
  「Zoho OAuth」をサービスとして選択し、「Connection」に名前を入力します。その後、下記のスコープを選択してください。
 
 
  
   - ZohoCRM.タブ.すべて
 
   - ZohoCRM.設定.すべて
 
   - ZohoCRM.タブ.添付ファイル.すべて
 
  
  
 
 
  
 
 The コード
 
  
   - 無効 自動化.toSendDealDocuments(Int dealRecordID,String associatedContactEmail)
 
   - {
 
   - //商談に関連付けられた連絡先名を取得し、メールメッセージで使用します
 
   - dealData = Zoho.crm.getRecordById('商談',dealRecordID);
 
   - // info dealData;
 
   - dealContact = ifNull(dealData.取得する('Contact_Name'),'');
 
   - dealContactName = ifNull(dealContact.取得する('名前'),'');
 
   - //引数で直接名前を取得することも可能です(連絡先メールと同様)
 
   - // info dealContactName;
 
   - // info associatedContactEmail;
 
   - //商談からすべての添付ファイルを取得
 
   - relatedrcords = Zoho.crm.getRelatedRecords('添付ファイル','商談',dealRecordID);
 
   - info relatedrcords;
 
   - if(relatedrcords.size() > 0)
 
   - {
 
   - attachementIdList = List();
 
   - for each ele in relatedrcords
 
   - {
 
   - attachementId = ele.取得する('id');
 
   - //すべての添付ファイルIDを取得
 
   - attachementIdList.追加する(attachementId);
 
   - }
 
   - info 添付ファイルIDリスト.size();
 
   - fileList = List();
 
   - //添付ファイルIDを使って商談から各添付ファイルを取得し、リストに追加する
 
   - for each index i in 添付ファイルIDリスト
 
   - {
 
   - downloadFile = invokeurl
 
   - [
 
   - url :'https://www.zohoapis.com/crm/v2/商談/'+ dealRecordID + '/添付ファイル/' + 添付ファイルIDリスト.取得する(i)
 
   - 種類 :取得する
 
   - connection:'send_email_with_attachment'
 
   - ];
 
   - //  info downloadFile;
 
   - fileList.追加する(downloadFile);
 
   - }
 
   - //すべての商談関連ドキュメントをメールの宛先連絡先に送信する
 
   - toAddress = 関連連絡先メールアドレス;
 
   - sendmail
 
   - [
 
   - 開始:Zoho.adminuserid
 
   - to :toAddress
 
   - 件名 :'商談 ドキュメント'
 
   - メッセージ :'Hi ' + dealContactName + '、商談に関連するすべての添付ファイルをお送りいたします。'
 
   - 添付ファイル :file:fileList
 
   - ]
 
   - }
 
   - else
 
   - {
 
   - info 'この商談には添付ファイルがありません。';
 
   - }
 
   - }
 
  
  
 
  - 
   
項目 Argument Mapping in Deluge 設定
 
 
 
 
  - 
   
コード 説明
 
 
 
  -> スクリプトは、渡された引数(dealRecordID)を利用して、現在実行中のデータを取得します。
 
 
  -> 取得したデータから、項目(Contact_Name)の値を取得し、その名前を変数に保存します。
 
 
  -> 次に、該当する商談データからアップロードされたすべての添付ファイルを取得し、変数に保存します。後で、添付ファイルが存在するかどうかを確認します。存在する場合はリスト(attachementIdList)を作成し、ループを使って添付ファイルのIDを取得し、そのリストに保存します。
 
 
  -> さらにループを利用して、添付されたIDをもとにすべての添付ファイルを取得し、ファイルとして保存します。これを後でメール送信タスクに渡します。 
 
 Working デモ - スクリーンキャスト
 
  
 
 
  - 
   
最終結果 - Zoho CRMから受信したメール:
 
 
 
 
  
 
 
  
   
    
スムーズな導入を実現するため、設定はテスト環境で事前に構成・検証を行ってから、本番環境へ移行することを推奨します。
    
  
   
  
  
 TIPS: よくあるエラーを回避するコツ
 
  
   -> スクリプト内では、正しい API Namesをタブおよび項目に対して必ず使用してください。
   
    
   
   -> 意図した出力を取得するために、Zoho CRM Function IDEのコンソールセクションで各変数の出力を確認できるよう、info() ログの利用を推奨します。これにより、機能がスムーズに動作しているか確認できます。
   
    
   
   
    -> 関数スクリプト内で外部連携を使用している場合は、目的のAPI操作を実行するために必須スコープを接続に追加してください。また、Deluge Invoke URLまたはIntegrationタスクに渡す際は、外部連携のリンク名(例:crm_connection)を使用することを確認してください。 
    
   
   
    
   
   
    -> 一般的な運用として、US DCのAPIエンドポイントを使用しています。別のDC(例:IN、EU、CA、AU等)のCRMアカウントをご利用の場合は、ご利用のDCに対応したAPIエンドポイントURLを使用することを推奨します。 
    
   
   
    
   
   
    例:
    
   
   
   
    
   
   
    -> 自動化機能(例:ワークフールール)が関係する使用ケースで、意図した機能が動作しない場合は、ユーザーは関連付け済みの関数失敗理由を「設定 >> Developer Hub >> Functions >> 失敗」で確認できます。さらに、ユーザーは特定の作成関数の全実行の完了ログも確認でき、実行履歴を追跡できます( My Functions >> 3点リーダー >> ログ内)。この方法は、ワークフールール経由でCRMデータ内の関数が実行された(タイムラインに表示される)が、データに意図した処理・更新が行われなかった場合にも役立ちます。こうした場合は、Zoho CRM内の関数ログから出力(infoログ)や実行時のエラーを確認してください。
   
   
    
   
  
 
  
   
メモ: 次のガイド - 記事を参照し、コード最適化のベストプラクティスおよびZoho CRM全体でカスタム関数を展開するさまざまな方法をご覧ください。