注意: この記事は、Adobe、Genesys Cloud、Google、Microsoft Dynamics 365、Salesforce、Webサービス、Zendeskデータアクションの統合に適用されます。

一部の API、特にログイン API では、HTTP リクエストの URL フォーム エンコードが必要です。 Genesys Cloud データ アクションを URI エンコード用に設定するには:

  1. Content-Type リクエストヘッダーを作成し、値x-www-form-urlencoded を指定します。

  2. UIではRequest Body Template を、JSONやTerraformではrequestTemplate を、パラメータをアンパサンド(&)で区切ったキーバリューペアで設定します。 例えば、key1=value1&key2=value2です.

    注意: リクエストボディはJSONではなく、URLクエリ引数としてフォーマットされた文字列です。

  3. 使用$esc.uriEncode() / などの URL 予約文字を含む値または変数の周囲? :@ – 。 _ ! ~ $ & ' ( ) * + , ; =。

JSONの例

"config": { 
     "request": { 
          "requestTemplate": "grant_type=client_credentials&scope=customers_read_write&audience=$esc.uriEncode(\"https://api.example.com/v1/customers\")", 
          "headers": { 
               "Authentication": "Basic $encoding.base64(\"${credentials.clientid}:${credentials.clientSecret}\"", 
               "Content-Type": "application/x-www-form-urlencoded" 
               },
          "requestType": "POST", 
          "requestUrlTemplate": "${credentials.loginUrl}" 
       } 
   } 

次の例は、予約文字を持つユーザー入力値を示しています。

"config": {
	"request": {
		"headers": {
			"Content-Type": "application/x-www-form-urlencoded"
		},
		"requestUrlTemplate": "https://api.example.com/v1/customers",
		"requestTemplate": "description=$esc.uriEncode(\"${input.DESCRIPTION}\")&email=$esc.uriEncode(\"${input.EMAIL}\")",
		"requestType": "POST"
	}
}
 メモ:   インジェクション攻撃から保護するには、常に$esc.uriEncode()ユーザー入力による関数。 データ アクションでは特殊文字を使用したユーザー入力を自動的にエスケープできないため、セキュリティ上の目的で該当する場合はこの関数を使用する必要があります。 データは Architect や Script などの呼び出されるエンティティから取得されますが、URL および URL フォームを処理する際にはエスケープを行う必要があります。

統合の詳細については、 データアクションの統合についてをご覧ください。