Zoho Sign書類情報を追加するためのCRMコールバック関数の設定方法
お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の
英語版を参照してください。
シナリオ: Zoho CRM で自動化を設定し、ドキュメントを Zoho Sign に送信しています。毎回ドキュメントを確認するたびに、Zoho Sign でドキュメントを開く必要がありますが、この方法ではドキュメントのステータスを確認するのが大変です。CRM 側でコールバック関数を設定して、Zoho Sign ドキュメントの詳細を追加することはできますか?
- Zoho Sign の拡張機能を使って CRM から署名用にドキュメントを送信した場合は、ドキュメントは CRM 内で更新されます。ただし、自動化やワークフローなど、その他のケースでは更新されません。
- カスタムのコールバック関数を作成する必要があります。以下の手順に従って設定してください。
次のコードを貼り付けます:
- crmAPIRequestMap = crmAPIRequest。toMap();
- request_body = crmAPIRequestMap。取得する('本文');
- info request_body;
- requestMap = request_body。toMap();
- response = Map();
- response。put('status_code',200);
- response。put('コンテンツの種類','application/json');
- hasRequests = requestMap。containKey('requests');
- if(requestMap。containKey('requests') && requestMap。containKey('通知'))
- {
- notificationMap = requestMap。取得する('通知').toMap();
- requestStr = requestMap。取得する('requests');
- requestObj = requestStr。toMap();
- response。put('本文',{'what we got':requestObj,'通知':notificationMap});
- if(requestObj。containKey('request_status') && notificationMap。containKey('operation_type'))
- {
- operationType = notificationMap。取得する('operation_type');
- //if(requestObj.get('request_status').equals('完了'))
- if(operationType。equals('RequestCompleted') || operationType。equals('RequestSigningSuccess') || operationType。equals('RequestRecalled') || operationType。equals('RequestRejected') || operationType。equals('RequestExpired'))
- {
- requestStatus = '署名用に送信済み';
- if(operationType。equals('RequestCompleted'))
- {
- requestStatus = 'Signed';
- }
- else if(operationType。equals('RequestRecalled'))
- {
- requestStatus = 'Recalled';
- }
- else if(operationType。equals('RequestRejected'))
- {
- requestStatus = '却下済み';
- }
- else if(operationType。equals('RequestExpired'))
- {
- requestStatus = '期限切れ';
- }
- requestId = requestObj。取得する('request_id');
- //すでに存在するか確認
- zsignrecord = Zoho。crm。searchRecords('zohosign__ZohoSign_Documents','(zohosign__ZohoSign_Document_ID:equals:' + requestId + ')');
- if(zsignrecord。size() > 0 && zsignrecord。取得する(0).containKey('zohosign__DeleteEdit_Preview_or_Position_Signature_Fields'))
- {
- info 'データはすでに存在します';
- response。put('本文',{'メッセージ':'データはすでに存在するため、更新します'});
- if(zsignrecord。取得する(0).取得する('zohosign__DeleteEdit_Preview_or_Position_Signature_Fields') == 無効)
- {
- //更新が必要
- zsrecordId = zsignrecord.get(0).get('id');
- recordInfo = {'zohosign__Document_Status':requestStatus};
- resp = Zoho.crm.createRecord('zohosign__ZohoSign_Documents',zsrecordId,recordInfo);
- if(resp.containKey('id'))
- {
- response.put('body',{'message':'データを更新しました'});
- }
- }
- else
- {
- return {'crmAPIResponse':response};
- }
- }
- else
- {
- response.put('body',{'request_id':requestId});
- associatedModule = 'Contacts';
- associatedModuleKey = 'zohosign__Contact';
- actions = requestObj.get('actions');
- email = actions.get(0).get('recipient_email');
- data = Zoho.crm.searchRecords('Contacts','(Email:equals:' + email + ')');
- if(data.size() <= 0)
- {
- data = Zoho.crm.searchRecords('Leads','(Email:equals:' + email + ')');
- if(data.size() > 0)
- {
- associatedModule = 'Leads';
- associatedModuleKey = 'zohosign__Lead';
- }
- }
- if(data.size() > 0)
- {
- info 'data found';
- leadid = data.get(0).get('id');
- recordInfo = {'Name':requestObj.get('request_name'),associatedModuleKey:leadid,'zohosign__Document_Status':requestStatus,'zohosign__ZohoSign_Document_ID':requestId,'zohosign__Date_Completed':today,'zohosign__Module_Name':associatedModule,'zohosign__Module_Record_ID':leadid};
- //CRM に ZohoSign レコードを作成
- resp = Zoho.crm.createRecord('zohosign__ZohoSign_Documents',recordInfo);
- if(resp.containKey('id'))
- {
- zsDocId = resp.get('id');
- respDoc = Zoho.sign.downloadDocument(requestId);
- Zoho.crm.attachFile('zohosign__ZohoSign_Documents',zsDocId,respDoc);
- response.put('body',{'attached to record':zsDocId});
- //すべての受信者に対して Zoho Sign 受信者レコードを作成
- for each action in actions
- {
- recpStatus = '署名待ち';
- if(action.get('action_status').equals('SIGNED'))
- {
- recpStatus = 'Signed';
- }
- else if(action.get('action_status').equals('REJECTED'))
- {
- recpStatus = 'キャンセル済み';
- }
- recpRecordInfo = {'名前':操作。取得する('recipient_name'),'zohosign__Email':操作。取得する('recipient_email'),'zohosign__ZohoSign_Document':zsDocId,'zohosign__Recipient_Order':操作。取得する('signing_order'),'zohosign__Recipient_Type':操作。取得する('action_type'),'zohosign__Recipient_Status':recpStatus};
- Zoho。crm。createRecord('zohosign__ZohoSign_Recipients',recpRecordInfo);
- }
- }
- else
- {
- response。put('本文',{'エラー':resp});
- }
- }
- }
- else
- {
- response。put('本文',{'未完了':requestObj});
- }
- }
- else
- {
- response。put('本文',{'リクエストステータスなし':requestObj});
- }
- }
- else
- {
- info 'エラー';
- response。put('本文',{'エラー':'requests キーがありません'});
- }
- 返品する {'crmAPIResponse':response}