Zoho Sign書類情報を追加するためのCRMコールバック関数の設定方法

Zoho Sign書類情報を追加するためのCRMコールバック関数の設定方法

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

シナリオ: Zoho CRM で自動化を設定し、ドキュメントを Zoho Sign に送信しています。毎回ドキュメントを確認するたびに、Zoho Sign でドキュメントを開く必要がありますが、この方法ではドキュメントのステータスを確認するのが大変です。CRM 側でコールバック関数を設定して、Zoho Sign ドキュメントの詳細を追加することはできますか?

  1. Zoho Sign の拡張機能を使って CRM から署名用にドキュメントを送信した場合は、ドキュメントは CRM 内で更新されます。ただし、自動化やワークフローなど、その他のケースでは更新されません。
  2. カスタムのコールバック関数を作成する必要があります。以下の手順に従って設定してください。
次のコードを貼り付けます:

  1. crmAPIRequestMap = crmAPIRequest。toMap();
  2. request_body = crmAPIRequestMap。取得する('本文');
  3. info request_body;
  4. requestMap = request_body。toMap();
  5. response = Map();
  6. response。put('status_code',200);
  7. response。put('コンテンツの種類','application/json');
  8. hasRequests = requestMap。containKey('requests');
  9. if(requestMap。containKey('requests') && requestMap。containKey('通知'))
  10. {
  11. notificationMap = requestMap。取得する('通知').toMap();
  12. requestStr = requestMap。取得する('requests');
  13. requestObj = requestStr。toMap();
  14. response。put('本文',{'what we got':requestObj,'通知':notificationMap});
  15. if(requestObj。containKey('request_status') && notificationMap。containKey('operation_type'))
  16. {
  17. operationType = notificationMap。取得する('operation_type');
  18. //if(requestObj.get('request_status').equals('完了'))
  19. if(operationType。equals('RequestCompleted') || operationType。equals('RequestSigningSuccess') || operationType。equals('RequestRecalled') || operationType。equals('RequestRejected') || operationType。equals('RequestExpired'))
  20. {
  21. requestStatus = '署名用に送信済み';
  22. if(operationType。equals('RequestCompleted'))
  23. {
  24. requestStatus = 'Signed';
  25. }
  26. else if(operationType。equals('RequestRecalled'))
  27. {
  28. requestStatus = 'Recalled';
  29. }
  30. else if(operationType。equals('RequestRejected'))
  31. {
  32. requestStatus = '却下済み';
  33. }
  34. else if(operationType。equals('RequestExpired'))
  35. {
  36. requestStatus = '期限切れ';
  37. }
  38. requestId = requestObj。取得する('request_id');
  39. //すでに存在するか確認
  40. zsignrecord = Zoho。crm。searchRecords('zohosign__ZohoSign_Documents','(zohosign__ZohoSign_Document_ID:equals:' + requestId + ')');
  41. if(zsignrecord。size() > 0 && zsignrecord。取得する(0).containKey('zohosign__DeleteEdit_Preview_or_Position_Signature_Fields'))
  42. {
  43. info 'データはすでに存在します';
  44. response。put('本文',{'メッセージ':'データはすでに存在するため、更新します'});
  45. if(zsignrecord。取得する(0).取得する('zohosign__DeleteEdit_Preview_or_Position_Signature_Fields') == 無効)
  46. {
  47. //更新が必要
  48. zsrecordId = zsignrecord.get(0).get('id');
  49. recordInfo = {'zohosign__Document_Status':requestStatus};
  50. resp = Zoho.crm.createRecord('zohosign__ZohoSign_Documents',zsrecordId,recordInfo);
  51. if(resp.containKey('id'))
  52. {
  53. response.put('body',{'message':'データを更新しました'});
  54. }
  55. }
  56. else
  57. {
  58. return {'crmAPIResponse':response};
  59. }
  60. }
  61. else
  62. {
  63. response.put('body',{'request_id':requestId});
  64. associatedModule = 'Contacts';
  65. associatedModuleKey = 'zohosign__Contact';
  66. actions = requestObj.get('actions');
  67. email = actions.get(0).get('recipient_email');
  68. data = Zoho.crm.searchRecords('Contacts','(Email:equals:' + email + ')');
  69. if(data.size() <= 0)
  70. {
  71. data = Zoho.crm.searchRecords('Leads','(Email:equals:' + email + ')');
  72. if(data.size() > 0)
  73. {
  74. associatedModule = 'Leads';
  75. associatedModuleKey = 'zohosign__Lead';
  76. }
  77. }
  78. if(data.size() > 0)
  79. {
  80. info 'data found';
  81. leadid = data.get(0).get('id');
  82. 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};
  83. //CRM に ZohoSign レコードを作成
  84. resp = Zoho.crm.createRecord('zohosign__ZohoSign_Documents',recordInfo);
  85. if(resp.containKey('id'))
  86. {
  87. zsDocId = resp.get('id');
  88. respDoc = Zoho.sign.downloadDocument(requestId);
  89. Zoho.crm.attachFile('zohosign__ZohoSign_Documents',zsDocId,respDoc);
  90. response.put('body',{'attached to record':zsDocId});
  91. //すべての受信者に対して Zoho Sign 受信者レコードを作成
  92. for each action in actions
  93. {
  94. recpStatus = '署名待ち';
  95. if(action.get('action_status').equals('SIGNED'))
  96. {
  97. recpStatus = 'Signed';
  98. }
  99. else if(action.get('action_status').equals('REJECTED'))
  100. {
  101. recpStatus = 'キャンセル済み';
  102. }
  103. 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};
  104. Zoho。crm。createRecord('zohosign__ZohoSign_Recipients',recpRecordInfo);
  105. }
  106. }
  107. else
  108. {
  109. response。put('本文',{'エラー':resp});
  110. }
  111. }
  112. }
  113. else
  114. {
  115. response。put('本文',{'未完了':requestObj});
  116. }
  117. }
  118. else
  119. {
  120. response。put('本文',{'リクエストステータスなし':requestObj});
  121. }
  122. }
  123. else
  124. {
  125. info 'エラー';
  126. response。put('本文',{'エラー':'requests キーがありません'});
  127. }
  128. 返品する {'crmAPIResponse':response}