メインコンテンツまでスキップ

ActionScriptのサンプルコード

ActionScriptのサンプルコードです。

一部のサンプルコードは、アクションスクリプトエディタの右枠で呼出しできます。

blank

ActionScriptは、main関数を呼び出します。

async function main(data) {

}

郵便番号検索

郵便番号検索API | ポストくんを呼び出します。

async function main(data) {
const url = 'https://postcode.teraren.com/postcodes/3230831.json';
const result = await request.get(url, function(error, response, body) {
logger.error("errorMsg:" + error)
logger.log(data)
}
)

return result; //return Promise
}

slack

Slackに通知を送信します。

セットアップ

  1. Slackで自分アプリを用意
  2. スコープを設定する
  3. アプリのインストール

成功すると2つのトークンが生成されます。

  • xoxp- から始まる User OAuth Token
    • ( ユーザーとして API を実行するためのトークン )
    • xoxp-1498610429941-1501698551602-1234567890-XXXXXXXXXXXXXXXXXX
  • xoxb- から始まる Bot User OAuth Token
    • ( ボットとして API を実行するためのトークン )
    • xoxb-1498610429941-1234567890-XXXXXXXXXXXXXXXXXX
  1. チャンネルにアプリを追加する

メッセージを投稿する

以下のエンドポイントにリクエストを送信することでメッセージを投稿できる。

POST https://slack.com/api/chat.postMessage

パラメータ

  • token 生成された OAuth Token
  • channel メッセージの投稿先。
  • text メッセージの本文。マークダウンを使用できる。

curlコマンドで呼び出す

$ curl -X POST 'https://slack.com/api/chat.postMessage' \
-d 'token=xoxb-1498610429941-1234567890-XXXXXXXXXXXXXXXXXX' \
-d 'channel=#test_channel' \
-d 'text=*テキスト*'

サンプルコード

async function main(data) {
const result = await request.post('https://slack.com/api/chat.postMessage', {
form: {
token: '{ここをトークンに置き換える}',
channel: 'sample',
text: JSON.stringify(data),
username: 'bot'
}
}
, function(error, response, body) {
logger.error("errorMsg:" + error)
logger.log(data)
}
)

return result; //return Promise
}

simpleAsync

シンプルなAsync-Awaitコードのサンプルです。

async function main (data) {
// call your sub function
const res = await sub();

return res;
}

// you can define your sub-functions. (but should be kept to a minimum chars)
async function sub(){
return new Promise((resolve, reject) => {
var ok = true; //some logics;
if (ok) {
resolve({result: "OK" }); // return {result: "OK" } object to API result
} else {
reject({result: "NG" });
}
});
}

sendGridExample

async function main (data) {
// call sendMail sub-function
const res = await sendMail();

return res;
}

async function sendMail(){
return new Promise((resolve, reject) => {
const SENDGRID_API_KEY = 'SG.XXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXX';

// you can use 'sendgridMail' as a variable for require('@sendgrid/mail')
// see https://www.npmjs.com/package/@sendgrid/mail about how to use this package

sendgridMail.setApiKey(SENDGRID_API_KEY)
const msg = {
to: '[email protected]', // Change to your recipient
from: '[email protected]', // Change to your verified sender
subject: 'Test mail from my script',
text: 'test mail',
html: '<strong>This is an example.</strong>',
}
sendgridMail
.send(msg)
.then(() => {
logger.info('Email sent');
resolve({result: "email sent successfully" });
})
.catch((error) => {
logger.error(error);
reject({result: "ERROR sending email" });
})

});
}

callAPIAsyncでHexabase APIを1回呼出す

async function main(data) {
return new Promise((resolve, reject) => {

const appId = "APP-AI-posts"; // アプリID
const datastoreId = "Db-Article" // データストアID

logger.info("処理を開始します...");

// 1つ目のAPI呼び出し
const url = "api/v0/applications/" + appId + "/datastores/" + datastoreId + "/items/search"; // APIのURL
const payload = {
use_display_id: true,
omit_fields_data: true,
conditions: [],
per_page: 1,
page: 1
} // APIのリクエストパラメータ
callAPIAsync('POST', url, payload).then(res => {
logger.log(res.data);
logger.info("Proc 1 Called");
resolve();
}).catch(e => {
logger.error("エラーが発生しました");
reject(e);
});
});
}

callAPIAsyncでHexabase APIを2回呼出す

ItemList APIでアイテムを読み込んだ後、UpdateItem APIでアイテムを更新しています。

※「内容を更新する」アクションのActionScriptでUpdate Itme APIを呼び出すと、再帰的に「内容を更新する」アクションが呼ばれます。

async function main(data) {
return new Promise((resolve, reject) => {

const appId = "APP-AI-posts"; // アプリID
const datastoreId = "Db-Article" // データストアID
const comment_fieldId = "answer" // コメントを書き込むフィールドID

logger.info("処理を開始します...");

// 1つ目のAPI呼び出し
const url = "api/v0/applications/" + appId + "/datastores/" + datastoreId + "/items/search"; // APIのURL
const payload = {
use_display_id: true,
omit_fields_data: true,
conditions: [],
per_page: 1,
page: 1
} // APIのリクエストパラメータ
callAPIAsync('POST', url, payload).then(res => {
logger.log(res.data);
logger.info("Proc 1 Called:" + data.i_id)

// 次のAPI呼び出しを返す
const url = "api/v0/applications/" + appId + "/datastores/" + datastoreId + "/items/edit/" + data.i_id; // 次のAPIのURL
const payload = {
"item": {
[comment_fieldId]: data.title
},
"use_display_id": true,
"return_item_result": true,
"is_force_update": true,
"access_key_updates": {
"ignore_action_settings": true,
"overwrite": false,
"apply_related_ds": true,
"groups_to_publish": []
}
} // 次のAPIのリクエストパラメータ
return callAPIAsync('POST', url, payload); // Promiseを返すことができる

}).then(res => {
logger.log(res.data);
logger.info("Proc 2 Called" + data.i_id)

// 処理を続行する場合はresolveを呼び出す
resolve();

}).catch(e => {
logger.error("エラーが発生しました")

// 実行を中止する場合はrejectを呼び出す。eはHexabaseのAPI結果に返される
reject(e);
});

});
}