クエステトラユーザのみなさん、こんにちは。開発責任者の畠中です。

今回は前回のブログの続きです。

ワークフローの途中で、SMS を送信する

Twilio への API リクエストを、メッセージ送信中間イベント (HTTP) で実現していました。

その部分を、あえてスクリプトタスクに変えたいと思います。
スクリプトタスクから、「SMS を送信する API」を呼び出します。

M230: 業務データの複雑なデータ加工が自動実行されるように設定する(ECMAスクリプト)

ワークフロー図は以下のように変わります。

  1. 「入力」で、宛先(電話番号)とメッセージを入力
  2. 「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 です。

[R2301] : Scriptデータ取得/代入


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 を送信する — スクリプトタスク版 —」への1件のフィードバック

  1. ピンバック: ワークフローの途中で、SMS を送信する — サービスタスクアドオン版 — – Questetra Support

コメントは受け付けていません。

%d人のブロガーが「いいね」をつけました。