
クエステトラユーザのみなさん、こんにちは。開発責任者の畠中です。
今回は前回のブログの続きです。
ワークフローの途中で、SMS を送信する
Twilio への API リクエストを、メッセージ送信中間イベント (HTTP) で実現していました。
その部分を、あえてスクリプトタスクに変えたいと思います。
スクリプトタスクから、「SMS を送信する API」を呼び出します。
M230: 業務データの複雑なデータ加工が自動実行されるように設定する(ECMAスクリプト)
ワークフロー図は以下のように変わります。
- 「入力」で、宛先(電話番号)とメッセージを入力
- 「SMS 送信」はスクリプトタスク。Twilio の「SMS を送信する API」を呼び出す
データ項目に変化はありません。再掲します。
データ項目名 | データ型 | 必須 | 「入力」工程 |
---|---|---|---|
件名 | 文字型単一行 | 編集可 | |
電話番号 | 文字型単一行 | ○ | 編集可 |
満たすべき正規表現: \+81\d{9,10} |
|||
プレースホルダ: +8175205XXXX |
|||
説明:
国番号(+81) から始めてください。<br>ハイフン抜き、数字のみでお願いします。 |
|||
本文 | 文字型複数行 | ○ | 編集可 |
最大文字数: 100 |
スクリプトタスクの設定です。まずスクリプト以外です。
必須データの項目の値をクリアすることを許可する | チェックしない |
---|---|
処理失敗時に、トークンをエラー境界イベントに移動 | チェックしない |
スクリプトエンジン | GraalJS |
スクリプトです。まず全体を載せます。
const accountSID = '[Twilio のアカウント ID (アカウント SID)]';
const authToken = '[API へのアクセスに使用するトークン (AUTHTOKEN)]';
const fromPhone = '[発信用番号]';
const apiUrl = 'https://api.twilio.com/2010-04-01/Accounts/' + accountSID + '/Messages.json';
const toPhone = engine.findDataByName('電話番号');
const message = engine.findDataByName('本文');
const response = httpClient.begin()
.basic(accountSID, authToken)
.formParam('From', fromPhone)
.formParam('To', toPhone)
.formParam('Body', message)
.post(apiUrl);
const responseCode = response.getStatusCode();
const responseBody = response.getResponseAsString();
engine.log("response: " + responseCode);
engine.log(responseBody);
if (responseCode != 201) {
throw "response is not 201: " + responseCode;
}
部分部分、説明していきます。
const accountSID = '[Twilio のアカウント ID (アカウント SID)]';
const authToken = '[API へのアクセスに使用するトークン (AUTHTOKEN)]';
const fromPhone = '[発信用番号]';
スクリプトタスクからは、アプリ内で設定している変数を参照できません。
仕方がないので、スクリプトの先頭で同じものを変数 (定数) として定義しています。
お持ちの Twilio アカウントに応じた内容に置き換えてください。
const apiUrl = 'https://api.twilio.com/2010-04-01/Accounts/' + accountSID + '/Messages.json';
const toPhone = engine.findDataByName('電話番号');
const message = engine.findDataByName('本文');
続いて、アクセスする API を使用し、SMS 送信先の電話番号と本文を取得しています。engine.findDataByName()
は、指定した名前のデータ項目の値を取得する、スクリプトタスク用の API です。
const response = httpClient.begin()
.basic(accountSID, authToken)
.formParam('From', fromPhone)
.formParam('To', toPhone)
.formParam('Body', message)
.post(apiUrl);
続いて、スクリプトタスク用の API を使って、Twilio の API にアクセスしています。
[R2300] : スクリプトタスクで利用できる Java クラス
httpClient.begin()...post()
で、POST リクエストを実行し、レスポンスを返します。
途中、basic()
で Basic 認証用ヘッダ、formParam()
でリクエストボディに application/x-www-form-urlencoded 形式のパラメータを指定しています。
const responseCode = response.getStatusCode();
const responseBody = response.getResponseAsString();
engine.log("response: " + responseCode);
engine.log(responseBody);
if (responseCode !== 201) {
throw "response is not 201: " + responseCode;
}
レスポンスからステータスコードとレスポンスボディを取得し、ログ出力しています。
リクエストが正常に終了すると 201 応答が返されるので、201 応答でない場合にスクリプトタスクが「処理失敗」となるよう、例外をスローするようにしています。engine.log()
は、ログ出力する API です。以前のブログで触れたものと、同じものです。
スクリプトタスクのデバッグに、ログ出力を使用する
これでアプリの開発は以上です。Twilio の API にアクセスすると、以下のようなログが出力されます。失敗した場合も、類似のログが出力されます。
次回は、このスクリプトタスクをふまえて、サービスタスク (Add-on) の作成に取り組みたいと思います。それではまた。
ピンバック: ワークフローの途中で、SMS を送信する — サービスタスクアドオン版 — – Questetra Support