OAuth 2.0の使用 - サーバーレス関数

OAuth 2.0

OAuth 2.0プロトコルを使用して、関数にアクセスできます。OAuth 2.0メソッドを使用すると、特定のデータへのアクセスを許可する特定のスコープを持つことで、ユーザー名とパスワードを非公開にしながら、特定のデータを任意のアプリケーションと共有できます。

OAuth 2.0メソッドで関数を利用できるようにするには、まずクライアントをZoho CRMに登録する必要があります。クライアントアプリケーションの登録方法については、こちらをご覧ください。

ただし、次のいくつかの点に注意する必要があります。

  1. HTTP GET方式を使用する場合のクライアントのスコープは、次のとおりです。

    ZohoCRM.functions.execute.READ

  2. HTTP POST方式を使用する場合のクライアントのスコープは、次のとおりです。

    ZohoCRM.functions.execute.CREATE

認証が完了したら、関数の作成に進むことができます。

関連項目

APIとして使用可能な関数を使用できる状況は数多くあります。たとえば、組織の業績の統計データを確認し特定の制限を超えた場合にトリガーするように関数を設定できます。このドキュメントでは、関数がAPIとして提供される外部ソースを介して実行されるサンプル関数を紹介しています。

サンプル関数:

シナリオ:

顧客の同意を得て、顧客をニュースレターに登録する必要があるとします。これは、セキュリティーを有効にし、プライバシーを侵害しないようにするためです。

連絡先データの表示ページにボタンがあります。ボタンをクリックするとウィジェットが開き、(エージェントが入力する)登録フォームが表示されます。ウィジェットを作成するには、ウィジェットのヘルプを参照してください。

ウィジェットを通じて、登録フォームが送信されます。同意フォームが記載されたメールを投稿すると、お客さまに送信されます。お客さまが同意フォームに同意すると、連絡先に関する情報がMailChimpのキャンペーンのリストに追加されます。

必要なアプリケーション:

  • MailChimp - ニュースレター用
  • Google ドライブ - 同意フォーム

要件:

  1. MailChimpとGoogle ドライブの外部連携を設定してください。
  2. この関数で、MailChimpとGoogle ドライブAPIを呼び出します。
  3. 関数をAPIに変換します。
  4. ウィジェットを作成し、その中で関数を呼び出します。

外部連携の設定:

関数で外部サービスアプリケーションを利用してデータ転送をしやすくするには、まずZoho CRMと外部サービスソフトウェアとの連携を設定する必要があります。この例では、MailChimpとGoogle ドライブが使用されます。詳細はこちらをご覧ください

MailChimpの場合:

Google ドライブの場合:

関数の作成:

要件に従って関数を作成する手順は、2つの部分に分かれています。

パート1:関数コードの書き込み

次のコードを使用してスタンドアロン関数を作成してください。

関数コードは次のとおりです。

+

string subscribeNewsletter(string listId,string emailAddress,string extraDetails){
  mailChimpURL = "https://us18.api.mailchimp.com/3.0/";
  if(isNull(listId))
  {
    //デフォルトリスト
    listId = "2a9a3690fd";
  }
  if(isNull(emailAddress))
  {
    return "Email Address cannot be null";
  }
  //すべてのメンバーを取得
  membersList = invokeurl
  [
    url :mailChimpURL + "/lists/" + listId + "/members"
    type :GET
    parameters:""
    connection:<CONNECTION_LINKNAME>
  ];
  //リストに登録されているメンバー
  for each memberInfo in membersList.get("members")
  {
    if(emailAddress.equals(memberInfo.get("email_address")))
    {
      return "The member is already subscribed to Zoho Newsletter";
    }
  }
  //Google ドライブからすべてのドキュメントを入手する
  gdriveURL = "https://www.googleapis.com/drive/v2/files";
  fileList = invokeurl
  [
    url :gdriveURL
    type :GET
    parameters:""
    connection:<CONNECTION_LINKNAME>
  ];
  //同意フォームのダウンロードURLを取得する
  webContentLink = null;
  for each fileInfo in fileList.get("items")
  {
    title = fileInfo.get("title");
    if(title.equals("Consent-Form.docx"))
    {
      webContentLink = fileInfo.get("webContentLink");
      break;
    }
  }
  if(isNull(webContentLink))
  {
    return "No Document Found on Drive.Docuemnt Name ::: Consent-Form.docx";
  }
  //通知を送信 -
  name = "Guest";
  signature = "Zoho";
  if(!isNull(extraDetails))
  {
    if(extraDetails.contains("name"))
    {
      name = extraDetails.get("name");
    }
    if(extraDetails.contains("signature"))
    {
      signature = extraDetails.get("signature");
    }
  }
  sendmail
  [
    from :zoho.adminuserid
    to :emailAddress
    subject :"consent form"
    message :"Hi " + name + ",<expression></expression><div><br></div><div>Zohoニュースレターの登録を申し込むには、</div><br /><div><br /><a target='_blank' href='" + webContentLink + "'>同意フォーム</a>をダウンロードしてnewsletter@xyz.comにメールで送信してください。</div><div><br></div><div><br></div><div>よろしくお願いいたします。</div><div>" + signature + "<br></div>" ]   if(extraDetails.contains("mobile"))
  {
    sendsms
    [
      to :extraDetails.get("mobile")
      message:"Consent Form has been sent to your mail id :- " + emailAddress
    ];
  }
  return "Consent form sent successfully"; }

 

  • リクエストボディー全体を関数内で使用することはできません。引数内で送受信する必要があります。

リクエストボディー全体を含む引数を設定してください。

上記の関数では、関数引数の1つとして「extraDetails」があります。これは、ユーザーから名前と署名を取得するために使用されます。これは、関数に渡される引数の数を知る方法がない場合に役立ちます。

関数の中に存在する引数の数を知る方法がないので、1つの引数(この場合は「extraDetails」)の中にリクエストボディー全体を含めることができます。

  • 「listId」の値は「2a9a3690fd」になります(nullの場合)。
  • 「emailAddress」は必須です。
  • 「extraDetails」引数は、リクエストボディー全体を含む、追加情報を渡すために提供されます。
  • 「listId」、「emailAddress」は文字列型です。
  • 「extraDetails」は文字列型であり、JSONを「extraDetails」で渡しています。

パート2:関数をAPIとして使用可能にする

関数が作成、テスト、保存されたら、関数をAPIに変換できます。

  1. [設定] > [開発者向け情報] > [関数]に移動してください。
  2. APIの作成が必要な、対応する関数の[設定]アイコンをクリックしてください。
  3. [REST API]をクリックしてください。
  4. [OAuth2]スライダーを有効にします。
  5. [保存]をクリックしてください。

ウィジェット内での関数の呼び出し

今度は実際の作業部分です。この関数はAPI呼び出しに変換されているため、任意のウィジェット、アプリ、またはソフトウェアでその関数のAPIコードを使用し、要件に基づいてトリガーするように設定できます。

ウィジェットを作成するには、次のHTMLコード(ニュースレターの同意フォーム)を使用します。ウィジェットの作成方法については、ここをクリックしてください。

HTMLコード

<h2>XYZ Newsletter</h2>
<div class="container">
<h2<Subscribe to our Newsletter</h2>
</div>
<div class="container" style="background-color:white">
<input type="text" id="name" placeholder="Name" name="name" required>
<input type="text" placeholder="Email address" name="mail" required id="email">
<label>
<input type="checkbox" checked="checked" name="subscribe">Daily Newsletter
</label>
</div>
<div class="container">
<input type="submit" value="Subscribe" id="subscribeButton">
</div>
<span id="res1">登録を申し込むには上のボタンをクリックしてください</span>

スクリプト(JavaScript):

<script type="text/javascript">

$("#subscribeButton").click(function() {
  var extraDetails = {};
  extraDetails.name = $("#name").val();
  extraDetails.signature = "XYZ";
  var arguments = {};
  arguments.extraDetails = extraDetails;
  arguments.emailAddress = $("#email").val();
  var data = {
      "arguments": JSON.stringify(arguments),
  }

  ZOHO.embeddedApp.init()
    .then(function() {

      ZOHO.CRM.FUNCTIONS.execute("subscribenewsletter", data)
        .then(function(resp) {
        $('#res1').text(JSON.stringify(resp));
        }).catch(function(resp) {
          $('#res1').text(JSON.stringify(resp));
        })
    });
});

  • 上記のスクリプトは、CRM内に配置されたウィジェットに対してのみ機能します。
  • 関数の連携タスクの詳細については、ここをクリックしてください。

結果:

ニュースレターの登録:

登録メールの取得:

同意フォームがメーラーに返送されると、ニュースレター登録が有効になります。

サーバーレス関数を使用しない場合の欠点:

ユーザーは次の操作を手動で行う必要があります。

  • アプリケーションをMailChimpとGoogle ドライブに登録する。
  • OAuth2フローを処理するためのコーディングを行う。
  • MailChimp APIを呼び出して、ユーザーの有無を確認する。
  • Google ドライブAPIを呼び出して、ドキュメントのURLを取得する。
  • お客さまにメールとSMSを送信するためのコーディングを行う。

上記の手順からわかるように、多くの関連する手順があり、ウィジェットのコードとウィジェットの機能を手動で記述する必要があります。しかし、この方法は時間がかかり、多くの手作業が必要になります。サーバーレス関数として機能させることで、このような事態を回避できます。