集成&自动化 - FaaS(云)连接器
注意:このドキュメントで説明する機能を使用するには、ユーザーが一定程度の開発スキルを持っている必要があります。
1. 機能紹介
- 宜搭FaaS(クラウド)コネクタは、アリババクラウドのFaaSサービスを基盤としており、開発者はサーバーのデプロイ、運用、スケーリングに気を取られることなく、ビジネスロジックのコード作成に集中することができます。これにより、開発者にはクラウド開発能力が与えられます。
- クラウドIDEでのコード編集を通じて、開発者は自身のビジネスニーズに合った宜搭コネクタを作成でき、柔軟なカスタマイズが可能となります。
- 宜搭コネクタの目指すところを受け継ぎ、さらに低コード製品とサードパーティアプリケーション間の壁を打破する取り組みを推進します。
説明:宜搭は各組織に 1000 回のFaaSコネクタ呼び出し回数を贈呈しています (超過した場合は、1000元で100GBの添付ファイル容量と3万回の呼び出し回数が付与されます)。
2. FaaS(クラウド)コネクタの作成
2.1 クラウドコネクタの作成
FaaSコネクタはイダのカスタムコネクタタイプの一つなので、その作成もコネクターファクトリーを通じて行う必要があります。
操作パス:
- コネクタ作成エントリ:宜搭ウェブサイト>>設定(プラットフォーム管理)>>コネクタファクトリー>>コネクタ管理>>コネクタの作成>>FaaSカスタムコネクタ>>コネクタ名の入力>>確定(操作は図2.1-1を参照)

図2.1-1 クラウドコネクタの作成エントリ
- コネクタの基本情報を入力します:コネクタの名前、アイコン、説明を設定できます。(操作方法は図2.1-2を参照)

図2.1-2 クラウドコネクタの基本情報を入力する
- コネクターパラメータ情報の定義:コネクターの入出力パラメータの名前、フィールド、説明などの情報を設定>>保存>>クラウドIDE開発へ。(操作は図2.1-3を参照)

図2.1-3 コネクターパラメータの定義
「クラウドIDE開発へ」ボタンの説明:
- 機能:このボタンをクリックすると、システムがクラウドリソースを検証し、通過した場合、ページは「阿里云云开发平台」に遷移します。ここでは、開発者がコードを編集してカスタマイズすることができます。
- 表示タイミング:コネクタが新規作成の場合、コネクタに関連する設定を保存した後に表示されます;既存のコネクタの場合、ボタンは直接表示されます。
2.2 クラウドIDEページの概要
拡張読み物:クラウドIDEの詳細については、こちらをご覧ください:クラウド開発プラットフォームとは。
クラウドIDEはクラウド開発プラットフォームのオンラインIDEであり、このプラットフォームは「誰でも使える完全なクラウド開発」、「統一されたチーム向け業務環境」、「一貫したServerless環境」、「ローカライズされたIDE機能と体験」などの極めて優れた特性を備えたクラウド上の開発作業プラットフォームです。開発チームがオンラインでの作業(チームのオンライン化、環境のオンライン化、コードのオンライン化、協調作業のオンライン化)やServerless化された開発モデルを実現し、業界のアーキテクチャ経験やサービスを効率的に共有・伝播することを支援します。これにより、開発効率が極めて向上し、開発コストを大幅に削減することができます。
2.3 クラウド上のFaaSコード
備考: 現在、Java 言語、Python 言語、および NodeJS 言語のFaasテンプレートが接続されています。(新しいコネクターファクトリーでは、追加されたNodeJSとPythonが確認できます)
2.3.1 エントリーファイルのパスと役割
2.3.1.1 Java言語
ファイルパス:src/main/java/com/alibaba/work/faas/FaasEntry.java。(図2.3-1参照)

図2.3-1 エントリーファイルの所在パス
- エントリーファイルの役割:FaaSコネクタに関連するロジックをカスタマイズするために使用され、より柔軟性が高くなります。
2.3.1.2 NodeJS言語
ファイルパス ルートディレクトリ>faasEntry.js

2.3.1.3 Python言語
ファイルパス ルートディレクトリ>faasEntry.py

2.3.2 エントリーファイルのコード説明
備考: 現在はJava言語、Python言語、NodeJS言語のFaasテンプレートを接続しています。(新しいコネクターファクトリーでは追加されたNodeJSとPythonが見えます)。以下はJava言語コードの例です(備考: NodeJS版のFaasテンプレートとJava版のFaasテンプレートは全ての機能が対応しており、ツールクラスとサンプルコードが揃っています。Python版のFaasテンプレートとJava版のFaasテンプレートは一部の機能が対応しています。
//入口文件 FaasEntry.java 初始化代码
package com.alibaba.work.faas;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.work.faas.common.AbstractEntry;
import com.alibaba.work.faas.common.FaasInputs;
import com.alibaba.work.faas.util.DingOpenApiUtil;
import com.alibaba.work.faas.util.YidaConnectorUtil;
import com.alibaba.work.faas.util.YidaConnectorUtil.ConnectorTypeEnum;
import com.alibaba.work.faas.util.YidaConnectorUtil.YidaResponse;
import com.aliyun.fc.runtime.Context;
/**
* @Description 宜搭Faas连接器函数入口,FC handler:com.alibaba.work.faas.FaasEntry::handleRequest
* @Version 2.0
* @Author bufan
**/
public class FaasEntry extends AbstractEntry {
@Override
public JSONObject execute(FaasInputs faasInputs, Context context) {
context.getLogger().info("faasInputs: " + JSON.toJSONString(faasInputs));
//填充宜搭工具类的上下文, 必须调用此方法!!! 请不要删除
initYidaUtil(faasInputs);
//登录态里的钉钉userId
String userId = (String) faasInputs.getYidaContext().get("userId");
//登录态里的钉钉corpId
String corpId = (String) faasInputs.getYidaContext().get("corpId");
//业务传的实际入参(如果您配置了参数映射(也就是点击了连接器工厂里的解析Body按钮并配置了各个参数描述和映射), 那么就是业务实际参数经过参数映射处理后的值)
Map<String,Object> input = faasInputs.getInputs();
/**
* 示例1, 在doYourBusiness方法里编写您的业务代码, 也可以将业务代码封装到其他Class源文件或方法里, cloudIDE和您的本地IDE基本无区别。
*/
// JSONObject result = new JSONObject();
// try {
// Object businessResult = doYourBusiness(input);
// result.put("success",true);
// result.put("result",businessResult);
// result.put("error","");
// return result;
// } catch (Exception e) {
// result.put("success",false);
// result.put("result",null);
// result.put("error",e.getMessage());
// return result;
// }
/**
*示例2, 调用宜搭连接器
*/
// JSONObject result = new JSONObject();
// try {
// Object connectorResult = invokeYidaConnector(faasInputs);
// result.put("success",true);
// result.put("result",connectorResult);
// result.put("error","");
// return result;
// } catch (Exception e) {
// result.put("success",false);
// result.put("result",null);
// result.put("error",e.getMessage());
// return result;
// }
/**
*示例3, 调用钉开放平台OpenAPI
*/
// JSONObject result = new JSONObject();
// try {
// List<String> formInstanceIdList = invokeDingOpenApi();
// result.put("success",true);
// result.put("result",formInstanceIdList);
// result.put("error","");
// return result;
// } catch (Exception e) {
// result.put("success",false);
// result.put("result",null);
// result.put("error",e.getMessage());
// return result;
// }
/**
* 返回的JSONObject并不是一定要带success、result、error, 下面的代码只是示例, 具体返回哪些key-value由您自己决定, 尽量与您在宜搭连接器工厂里配置的出参结构保持一致即可
*/
JSONObject result = new JSONObject();
result.put("success",true);
result.put("result","恭喜您, 成功调用宜搭FASS连接器!");
result.put("error","");
return result;
}
/**
* 将相关参数存到宜搭工具类里, 必须要调用此方法!!! 请不要删除!!!
*
* @param faasInputs
*/
private static final void initYidaUtil(FaasInputs faasInputs){
/**
* 用于调用钉钉开放平台OpenAPI的accessToken, 宜搭提供的, 仅申请了钉钉开放平台的部分OpenAPI的调用权限
* 如果此accessToken不满足您的需求,可在钉钉开放平台创建您自己的钉钉应用并获取appKey和APPSecret并使用com.alibaba.work.faas.util.DingOpenApiUtil获取您自己的customAccessToken
*
* @see com.alibaba.work.faas.util.DingOpenApiUtil#getCustomAccessTokenThenCache(String,String)
*/
String accessToken = (String) faasInputs.getYidaContext().get("accessToken");
// 设置钉开放平台访问token, 后续无需再设置
DingOpenApiUtil.setAccessToken(accessToken);
// try {
// //调用该方法就会自动存储customAccessToken, 之后请不要调用DingOpenApiUtil.setAccessToken(accessToken)将返回的customAccessToken覆盖宜搭传入的accessToken;
// DingOpenApiUtil.getCustomAccessTokenThenCache("您的钉钉应用appKey", "您的钉钉应用appSecret");
// } catch (Exception e) {
// System.out.println("getCustomAccessTokenThenCache error:"+e.getMessage());
// }
/**
*调用宜搭连接器依赖consumeCode
*/
String consumeCode = (String)faasInputs.getYidaContext().get("consumeCode");
//设置连接器消费码, 后续无需再设置
YidaConnectorUtil.setConsumeCode(consumeCode);
}
/**
* 可以将您的业务代码放在这里
*
* @param input
* @return
* @throws Exception
*/
private Object doYourBusiness(Map<String,Object> input) throws Exception{
//取实际的入参
String param1 = (String)input.get("参数1");
String param2 = (String)input.get("参数2");
String paramN = (String)input.get("参数N");
//业务处理
return null;
}
/**
* 示例 调用钉钉官方连接器(待办连接器, 创建待办)
*
* @param faasInputs
* @return
* @throws Exception
*/
private Object invokeYidaConnector(FaasInputs faasInputs) throws Exception {
Map<String,Object> input = faasInputs.getInputs();
String userId = (String)faasInputs.getYidaContext().get("userId");
String corpId = (String)faasInputs.getYidaContext().get("corpId");
JSONObject connectorActionInputs = new JSONObject();
//注意: http连接器的入参是body,query等, 钉钉官方连接器则不是, 请参考宜搭帮助文档 https://www.yuque.com/yida/support/stbfik
{
connectorActionInputs.put("unionId",Arrays.asList(userId));
connectorActionInputs.put("subject",(String)input.get("title"));
connectorActionInputs.put("creatorId",Arrays.asList(userId));
connectorActionInputs.put("description","Faas连接器里调用钉钉官方连接器创建待办");
connectorActionInputs.put("dueTime",System.currentTimeMillis()+600*1000);
connectorActionInputs.put("priority",10L);
}
//请确保调用前设置了consumeCode
//更多钉钉官方连接器ID和动作ID及出入参请参照 https://www.yuque.com/yida/support/stbfik#Mv0dK (如果目标段落不存在, 请访问 https://www.yuque.com/yida/support/stbfik)
YidaResponse response = YidaConnectorUtil.invokeService("G-CONN-1016B8AEBED50B01B8D00009","G-ACT-1016B8B1911A0B01B8D0000I", ConnectorTypeEnum.DING_INNER_CONNECTOR,null,connectorActionInputs);
if (Objects.nonNull(response) && response.isSuccess()){
try {
return YidaConnectorUtil.extractYidaConnectorExecutionResult(response);
} catch (Exception e) {
throw new Exception(e.getMessage());
}
}else {
throw new Exception(Objects.isNull(response)?"执行宜搭连接器失败":response.getErrorCode() +" "+response.getErrorMsg());
}
}
/**
* 示例 批量创建宜搭表单实例
*
* @return
* @throws Exception
*/
private List<String> invokeDingOpenApi() throws Exception {
BatchSaveFormDataRequest request = new BatchSaveFormDataRequest();
request.setAsynchronousExecution(true);
request.setKeepRunningAfterException(true);
request.setNoExecuteExpression(true);
request.setAppType("宜搭应用编码");
request.setUserId("钉钉userId");
request.setSystemToken("宜搭应用systemToken");
request.setFormUuid("表单编码");
JSONObject formData = new JSONObject();
formData.put("表单组件1的ID", "表单组件1的值");
formData.put("表单组件2的ID", "表单组件2的值");
//批量创建200条
request.setFormDataJsonList(Collections.nCopies(200,formData.toJSONString()));
return DingOpenApiUtil.batchSaveFormData(request);
}
}
上述代码拆解:
execute()为入口函数,用于承载FaaS连接器逻辑的编辑。有两个入参,分别为 FaasInputs(需重点关注)及 Context 。FaasInputs参数有两个属性,分别为
yidaContext:用于获取宜搭服务端上下文内容以及附加内容。目前能获得4个上下文变量(以下简称变量。后续会根据需要带出更多相关的上下文变量):
变量userId用于获取当前登录人的钉钉用户ID;
变量corpId用于获取当前登录人所在企业在钉钉的唯一标识;
变量 accessToken 用于调用钉钉开放平台OpenAPI;
备注:Faas代码模板里提供了便捷调用钉钉开放平台OpenAPI的工具类, 您也可以用工具类编写代码获取您自己的accessToken来调用钉钉开放平台OpenAPI。
变量 consumeCode 用于在Faas连接器里调用宜搭连接器(钉钉一方连接器、钉钉三方连接器、自定义HTTP连接器)和宜搭平台接口;
备注:Faas代码模板提供了便捷调用宜搭连接器的工具类。
inputs:传入FC函数的实际入参:
备注:
如果您在连接器工厂里配置了Faas连接器入参的参数映射, 那么实际取到的入参是您调用Faas连接器传的入参对象经过参数映射处理后得到的对象。
如果您没有在连接器工厂里配置Faas连接器入参的参数映射,那么宜搭会将您调用Faas连接器传的入参直接传入FC函数。
- 业务逻辑编写区域:您不必非得在execute()函数内编写业务逻辑,您可以在已有的类里添加新的方法,可以创建新类,可以在maven pom.xml里引入您需要的依赖,您只需要将业务结果在execute函数内返回即可。
返回结果类型为JSONObject:用于存放业务执行结果。
2.3.3 ブレークポイントデバッグ
現在、宜搭FaaSコネクタが提供するFaaSコードテンプレートは、Java、NodeJS、Pythonの開発言語を選択でき、すべての言語でブレークポイントdebugがサポートされています。具体的な操作方法はクラウドIDE内で案内されます。Java言語の場合、クラス内にmain関数を追加し、クラウドIDE内でmain関数を実行し、クラウドIDEのコンソールで出力結果を確認することができます。
Javaのブレークポイントデバッグ
以下の図はJava環境でのブレークポイントデバッグの例です(注:NodeJS、PythonのブレークポイントデバッグもJavaと同様ですが、違いはNodeJSとPythonではIDEが自動的にデバッグ設定ファイルを生成すること、Javaでは自動生成する必要がないことです)


NodeJSのブレークポイントデバッグ
- まず、プロジェクトのルートディレクトリにあるREADME.mdに従ってNodeの依存関係をインストールします。以下の図のように行ってください。

- デバッグパネルに切り替えてデバッグ構成ファイルを追加します(最初に三角形の「デバッグ開始」ボタンをクリックすると、自動的に新しいデバッグ構成ファイル(NodeJS構成を選択)が作成されます。デバッグ構成を自分で入力する必要はありません。
{
// IntelliSenseを使用して関連するプロパティを理解します。
// 既存のプロパティの説明を表示するには、マウスオーバーします。
// 詳細情報についてはこちらをご覧ください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "プログラムの起動",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}/test/tpl.test.js"
}
]
}

(() => {
handler(JSON.stringify({
"body": JSON.stringify({
"inputs": {
},
"yidaContext": {
"accessToken": "17f5033ce3d733fbb0c63fed5f24d9cb",
"consumeCode": "193F27DDD0AD40186D7E4707C12DB4D44CBC2B89E8D4813708ED88D0E7BDF86FF1226683194967A585E53BE531E2A3FA5110FEEFB2363906F055C25B78F3F2EE93EB5B067E0171B5E1C9A18958A43658E3F7289C5FF8A42FE48E288364F14BD661C36AC5F2B459F9DA95ADDB94AB65D6",
"corpId": "あなたのドングリのcorpId",
"userId": "あなたのドングリのuserId"
}
})
}), {}, (error, response) => {
console.info(error ? ("エラー:" + JSON.stringify(error) + " " + error.name + " " + error.message) : "", "\n\nレスポンス:", JSON.stringify(response));
})
})();

- ブレークポイントを設定することも、自分で実行文を追加してブレークポイントを設定することもできます。

- デバッグパネルに切り替えて、デバッグ開始ボタンをクリックしてデバッグ状態に入ります。

Pythonのブレークポイントデバッグ
省略、NodeJSのブレークポイントデバッグを参照してください。
2.3.4 コードの保存、コミット、およびプッシュ
- 変更したソースコードを保存する(ショートカットキー: Macはcommand + s、Windowsはctrl + s)(手動で保存する必要はありません。コミット時にCloudIDEが自動的に保存するかどうかを確認し、はいを選択すると、編集して保存していないすべてのファイルが自動的に保存されます)
- CloudIDEの左側のサイドバーでgitパネルに切り替える(下図参照)、コードをコミットするボタン(アイコンは✔️)をクリックし、表示された入力欄にコミット情報を記入してエンターキーを押す。その後、メニュー(アイコンは三点リーダー)から「プッシュ」を選択すると、リモートリポジトリにプッシュされます。

また、gitコマンドを使用することもできます:クラウドプラットフォームは、皆様がお馴染みのIDEと同じようにGitコマンドを内蔵しています。自身のビジネスロジックコードの作成が完了したら、gitの様々なコマンドを使ってコードの保存、コミット、プッシュ操作を行うことができます。
- 保存:
git add . - コミット:
git commit - プッシュ:
git push
2.3.5 配置
リモートリポジトリにコードをプッシュした後、サイドバーのデプロイボタン>>を選択オンライン環境>>デプロイをクリックします。(操作は図2.3-2をご覧ください)

図2.3-2 アプリケーションのデプロイ
注意:現在、宜搭ではオンライン環境にデプロイされたFaaSコードの呼び出しのみが開放されています(宜搭は後ほどコネクターファクトリーでFaaSコネクターのテストを開放し、FaaSのステージング環境を呼び出します)。そのため、オンライン環境でのデプロイを選択してください。
コードのデプロイが成功しました。これにより、コネクタの作成作業が完了し、次にYiDaで使用することができます。
2.3.6 プリンタと実行ログの表示
2.3.6.1 ログの印刷方法
宜搭はユーザーがログを追加することを強く推奨しています。これにより、問題の調査と特定が容易になります。ログの出力方法はいくつかあります:
- エントリーポイントの第2引数であるContextオブジェクトからLoggerオブジェクトを取得し、ログを出力することができます。具体的には:context.getLogger().info("あなたのログ")、またはcontext.getLogger().warn("あなたのログ")、またはcontext.getLogger().error("あなたのログ")を使用します。
- プログラミング言語独自のログ出力メソッドを使用する
- Java言語では
System.out.printまたは System.out.println メソッドを使用してログを出力できます。(ログにキーワードを追加し、キーワードの前後にスペースを入れてください。そうでないとログ検索時に一致しない場合があります) - NodeJS言語ではconsole.infoを使用してログを出力できます。(ログにキーワードを追加し、キーワードの前後にスペースを入れてください。そうでないとログ検索時に一致しない場合があります)
- Python言語ではloggingモジュール内のloggerを使用してログを出力できます(Python版Faasテンプレート内にすでに提供されています)(ログにキーワードを追加し、キーワードの前後にスペースを入れてください。そうでないとログ検索時に一致しない場合があります)
以下の図に示す通り(Javaの例):

2.3.6.2 プリンタの動作ログを確認する方法:
- コネクタ編集モードに入ります:コネクタファクトリー>>対応するコネクタを見つける>>「クラウドIDE開発へ」をクリックします。(操作は図2.3-3をご覧ください)

図2.3-3 コネクタ編集モードに入る
- アプリケーション一覧に移動する:「アプリケーション管理」>>「クラウドネイティブアプリケーション」。(操作は図2.3-4を参照)

図2.3-4 アプリケーションリストへのアクセス
- 対応するコネクタを選択してログ管理ページにアクセスします:アプリを選択>>運用監視>>ログ管理ページ。(操作は図2.3-5を参照)

図2.3-5 ログ管理へのアクセス
- 環境を選択「オンライン環境」>>ログ照会でreleaseという文字を含むオプションを選択します。例えば、下図では
wblogrelease-fc-2022012501607003を選択しています>>キーワードを入力>>ログ照会を行う(操作は図2.3-6参照)

図2.3-6 ログの確認
2.4 FaaSコネクタの使用
2.4.1 コネクタデータソースでの使用
拡張読書:イータのコネクタデータソース機能に関する詳細な説明は、以下のリンクをご覧ください:リモートデータソースによるカスタムコネクタの呼び出し
2.4.2 インテグレーション&自動化と承認フローでの使用
拡張読書:宜搭の統合&自動化機能に関する詳細な紹介については、こちらをご覧ください:統合&自動化-コネクタ
2.4.3 Faasコード内でイタコネクタを呼び出す
宜搭コネクタを呼び出す: (詳細な説明はfaasコードをご覧ください)
com.alibaba.work.faas.util.YidaConnectorUtil#invokeService(String コネクタID, String アクションID, ConnectorTypeEnum コネクタタイプ, Long 接続, JSONObject 入力)
参考本篇: 実装された機能 エントリーポイントのコード例
2.4.4 Faasコードでイダプラットフォームのインターフェースを呼び出す
宜搭プラットフォームのAPIリファレンス: 宜搭プラットフォームのAPI
イダプラットフォームのインターフェースを呼び出す: (詳細な説明はfaasコードをご覧ください)
com.alibaba.work.faas.util.YidaConnectorUtil
getYidaApi(String path,Map<String,String> headers, Map<String,String> queries)
postYidaApi(String path,Map<String,String> headers, Map<String,String> queries, Map<String,String> bodies)
2.4.5 Faasコード内でDingTalkオープンプラットフォームOpenAPIを呼び出す
ドイングオープンプラットフォームのOpenAPIを呼び出す: (詳細な説明はfaasコードをご覧ください)
com.alibaba.work.faas.util.DingOpenApiUtil
getOpenUrl(String userId,String appType,String systemToken,Long timeout, String url) throws 例外
startProcessInstance(String appType,String systemToken,String userId,String language,String formUuid,String formDataJson,String processCode,String departmentId) throws Exception
saveFormData(SaveFormDataRequest saveFormDataRequest) throws 例外
ちょっと待って
2.4.6 Faasコード内でHTTPサービスを呼び出す
HTTPツールクラスの提供:
com.alibaba.work.faas.util.HttpUtil
doGet(String schemaAndHost, String path, Map<String, String> headers, Map<String, String> queries)
doPost(String schemaAndHost, String path, Map<String, String> headers, Map<String, String> queries, Map<String, String> bodies)
doPost(String スキーマとホスト, String パス, Map<String, String> ヘッダー, Map<String, String> クエリ, String 本文)
doPost(String スキーマとホスト, String パス, Map<String, String> ヘッダー, Map<String, String> クエリ, byte[] 本文)
doPut(String スキーマとホスト, String パス, Map<String, String> ヘッダー, Map<String, String> クエリ, String 本文)
doPut(String schemaAndHost, String path, String method, Map<String, String> headers, Map<String, String> queries, byte[] body)
doDelete(String schemaAndHost, String path, Map<String, String> headers, Map<String, String> queries)
3. 使用案例
3.1 行程コードの認識
3.1.1 ケースシナリオ
感染症の厳格な予防と抑制が求められる中、行動コードと健康コードの確認は防疫作業において最も重要な要素です。これまで、行動コードの確認は手動で行われ、時間と労力のかかる作業でした。現在、イータはFaaSコネクタをイータページのリモートデータソースに使用することで、行動コードの自動認識を実現し、読み取った情報をイータフォームに自動入力します。これにより、防疫担当者の作業負担が大幅に軽減され、確認の正確性も向上します。
3.1.2 動画デモ
宜搭FaaSコネクタの実践例
3.2 SMS通知
3.2.1 FaaSコネクタの作成
上記の作成フローに従ってSMS通知FaaSコネクタを作成し、そのリクエストBodyとJavaコードは以下の通りです
- コネクタリクエストBodyの構成
{
"phoneNumbers": "15915915901",
"signNum": "署名",
"templateCode": "コード",
"templateParam": "パラメータ",
"accessKeyId": "アクセスキーID",
"accessKeySecret": "アクセスキーシークレット"
}

- Javaコード
- pom.xml に新しい依存関係を追加
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.9</version>
</dependency>
- src/FaasEntry.java のコード置き換え
package com.alibaba.work.faas;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.work.faas.common.AbstractEntry;
import com.alibaba.work.faas.common.FaasInputs;
import com.alibaba.work.faas.util.DingOpenApiUtil;
import com.alibaba.work.faas.util.YidaConnectorUtil;
import com.aliyun.fc.runtime.Context;
import com.aliyun.tea.*;
import com.aliyun.dysmsapi20170525.*;
import com.aliyun.dysmsapi20170525.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;
/**
* @Description 宜搭Faas连接器函数入口,FC handler:com.alibaba.work.faas.FaasEntry::handleRequest
* @Version 2.0
* @Author bufan
**/
public class FaasEntry extends AbstractEntry {
@Override
public JSONObject execute(FaasInputs faasInputs, Context context) {
context.getLogger().info("faasInputs: " + JSON.toJSONString(faasInputs));
/**
*用于调用钉钉开放平台OpenAPI的accessToken, 宜搭提供的, 仅申请了钉钉开放平台的部分OpenAPI的调用权限
*如果此accessToken不满足您的需求, 可在钉钉开放平台创建您自己的钉钉应用并获取appKey和APPSecret并使用com.alibaba.work.faas.util.DingOpenApiUtil获取您自己的accessToken
* @see com.alibaba.work.faas.util.DingOpenApiUtil#getCustomAccessTokenThenCache(String, String)
*/
String accessToken = (String)faasInputs.getYidaContext().get("accessToken");
//设置钉开放平台访问token, 后续无需再设置
DingOpenApiUtil.setAccessToken(accessToken);
/**
*调用宜搭的前端消费接口时使用
*/
String consumeCode = (String)faasInputs.getYidaContext().get("consumeCode");
//设置连接器消费码, 后续无需再设置
YidaConnectorUtil.setConsumeCode(consumeCode);
Map<String,Object> input = faasInputs.getInputs();
String ak = (String)input.get("accessKeyId");
String as = (String)input.get("accessKeySecret");
String phoneNumbers = (String)input.get("phoneNumbers");
String signNum = (String)input.get("signNum");
String templateCode = (String)input.get("templateCode");
String templateParam = (String)input.get("templateParam");
JSONObject result = new JSONObject();
result.put("success",true);
result.put("message","");
result.put("code","");
try {
com.aliyun.dysmsapi20170525.Client client = createClient(ak, as);
SendSmsRequest sendSmsRequest = new SendSmsRequest();
// 复制代码运行请自行打印 API 的返回值
sendSmsRequest.setPhoneNumbers(phoneNumbers);
sendSmsRequest.setSignName(signNum);
sendSmsRequest.setTemplateCode(templateCode);
sendSmsRequest.setTemplateParam(templateParam);
SendSmsResponse res = client.sendSms(sendSmsRequest);
String resCode = res.getBody().getCode();
if ("ok".equalsIgnoreCase(resCode)) {
return result;
}
else {
System.out.println("invoke failed:" + JSON.toJSONString(res));
result.put("success",false);
result.put("message",res.getBody().getMessage());
result.put("code",resCode);
return result;
}
}
catch(Exception ex) {
System.out.println("meet errot");
ex.printStackTrace();
result.put("success",false);
result.put("message",ex.getMessage());
return result;
}
}
private static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(accessKeyId)
// 您的AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "dysmsapi.aliyuncs.com";
return new com.aliyun.dysmsapi20170525.Client(config);
}
}
3.2.2 アリババクラウドのSMSサービスを購入する
アリババクラウドで「SMSサービス」を購入し、SMS署名とテンプレートを設定してください(アリババクラウドのドキュメントに従って操作してください)。
3.2.3 自動化プロセスの設定
自動化で設定済みの「SMS通知」FaaSコネクタを使用し、パラメータを設定するだけです。同様に、デザイナー内でコネクタデータソースから「SMS通知」を呼び出すことで、SMSの送信を実現することもできます。

4. よくある質問
Q:FaaSコネクタの適用シナリオは?
A:FaaSコネクタの目的は自動的に阿里云関数計算(FC)サービスのルートとコンテキストを接続することです。もし阿里云関数計算サービスを使用したことがない、またはあまり詳しくない場合は、宜搭のFaaSコネクタを使用することができます。すでに阿里云関数計算サービスをお持ちの場合は、宜搭HTTPカスタムコネクタを使用して接続できます(注意:現在、宜搭コネクタファクトリーは阿里云APIゲートウェイのシンプル認証(AppCode)方式でのAPI呼び出しのみサポートしており、ダイジェスト署名認証方式(APP KeyとAPP Secret)でのAPI呼び出しはサポートしていません。阿里云APIゲートウェイで関数計算を公開する際に設定した認証方式がシンプル認証方式であれば、宜搭HTTPカスタムコネクタを使って関数計算サービスに接続することができます)。
Q:FaaSコネクタがアリババクラウドの関数計算サービスとの接続とコンテキスト機能を実現する過程で、どのような機能を実装しましたか?
A:実装した機能は以下の通りです:
● RAMユーザーを自動で作成し、SAML2.0を通じてRAMユーザーのログイン状態を確立し、提供しているFaasコードテンプレートを読み込みます
● 宜搭のコンテキストを自動的に伝送する(宜搭ログインユーザーのDingTalk userId、宜搭ログインユーザーが所属する企業のDingTalk corpIdなど)
● エコシステムの能力、再利用可能性、ビジネスチャンスなど。
● HTTP呼び出しツールクラスを提供し、HTTPサービスを簡単に呼び出せます。
● 基本的なDingTalkのaccessTokenと、それに対応するツールクラスを提供しており、これらのツールを使用することで、DingTalkオープンプラットフォーム上のイダOpen APIやその他のOpen APIを簡単に呼び出すことができます(独自のaccessTokenを使用することもできます)。
● 既存のイダットコネクタアクション( DingTalk 1方コネクタ、DingTalk 3方コネクタ、カスタムHTTPコネクタ)を簡単に呼び出すためのツールクラス、およびイダットプラットフォームAPIを提供しています。
今後、Faasコードテンプレートにさらに実用的なツールを組み込んでいく予定です。
Q:宜搭FaaSコネクタとアリババクラウドFaaSサービスのマッピング関係は?
A:コネクターファクトリーでFaaSコネクターを作成し保存すると、イータ后台生成了唯一的FaaS连接器ID。ユーザーが初めて「クラウドIDE開発へ」をクリックし、クラウドリソースの検証を行う際に、イータ后台系统会调用阿里云的相关API创建阿里云应用空间,并得到这个应用空间的id,宜搭会记录FaaS连接器的id和阿里云应用空间id的绑定关系。阿里云应用空间id是云IDE的url的一部分,也是阿里云应用的域名的一部分,在运行态时宜搭后台系统可以通过这个阿里云应用空间id和其对应的APP KeyとAPP Secretを署名認証方式で阿里云API网关上暴露的函数计算服务を呼び出すことができます。 注意:翻译过程中发现原文中存在部分未翻译内容,已将其保持原样。如果需要对这些部分进行翻译,请提供进一步的信息。
5. 一般的なエラーと解決策
5.1 実行異常FC function error:NotFound
原因:コードがオンライン環境にデプロイされていないため、デプロイ操作を行う必要があります。(オンライン環境にデプロイされたFaasコネクタのみが、統合自動化デザイナーや承認フローデザイナーに表示されます。ただし、初期段階では、ユーザーがオンライン環境へのデプロイを忘れた場合でも、Faasコネクタの検索システムに異常があると誤解しないように、未デプロイの状態でもコネクタ選択リストに表示されます)
5.2 CloudIDEインターフェースにアクセスした後、「ワークスペースの初期化中」の状態が続く
以下の画像に示す状態が続いている場合、 https://ide.aliyun.com でこのワークスペースを凍結し、CloudIDEページをリフレッシュしてみてください。

5.3 なぜFAASコネクタが10秒間動作後にエラーを発生させるか:読み込みタイムアウト
FAAS 関数の実行時間は600秒に調整できますが、イタダ側でFASSクラウド関数を呼び出して実行結果を待つプロセスのタイムアウト時間は10秒で、現在のところ調整することはできません。
