📹カスタムコード活用方法<都道府県名を書式統一するコード例>

Operations Hub には、目玉機能の一つに”データクレンジング”があります。Operations Hub Professional以上のアカウントでワークフローに「データを書式設定」というアクションが追加されており、この機能を使って郵便番号の値に全てハイフンを入れたり、名前の先頭を大文字にしたり、という書式統一を自動化することができます。(ナレッジベース:ワークフローでカスタムコードアクションを使用する

<例>

  • 郵便番号1112222 ⇨ 111-2222
  • 姓名 natsumi mori ⇨ Natsumi Mori

データを書式設定.gif

現在、「データを書式設定」アクションには”名前の先頭を大文字にする”、”全ての文字を小文字にする”などの書式統一オプションがあるのですが、「カスタムコード」を使うと自分で書いたJavaScriptコードをワークフローで実行することができるので、書式統一をさらにカスタマイズして利用することが可能です。

カスタムコード活用方法の一例として、都道府県名を書式統一するコードを紹介します。このコードを挿入してワークフローを有効にすると、ワークフローに登録されたコンタクトの都道府県プロパティーの値が漢字に書式統一されます。

このように自作のコードをワークフローに組み込むことで、さまざまなデータ処理作業を自動化することが可能です。

便利なコードを作成された方や発見した方は、ぜひコミュニティーで共有してください😄 また、「こんなコードがあったら便利!」というアイデアも募集しています、返信↓で教えてください🙌

役立つカスタムコードをどんどん蓄積していきましょう!:smiling_face_with_sunglasses:

<都道府県名を書式統一するカスタムコードをワークフローに実装する>

*カスタムコードのシークレットにHubSpot APIキー(通称HAPIKEY)を入力する必要があります。(Developers document参照)

<都道府県名を漢字に書式統一するコード>

*あくまでサンプルコードですので、動作に関してHubSpotは責任を負いません。あらかじめご了承ください。

GitHubリンク

const hubspot = require('@hubspot/api-client');

/// HubSpotのWorkflow内のIDEの不具合で`async`を使うとエラー扱いになりますが
/// そのままエラーを無視して保存すると問題なく動きます
exports.main = async (event, callback) => {

 const prefectureList = [
 {
 id: "01",
 name: "北海道",
 short: "北海道",
 kana: "ホッカイドウ",
 en: "hokkaidoken",
 enShort: "hokkaido",
 },
 {
 id: "02",
 name: "青森県",
 short: "青森",
 kana: "アオモリケン",
 en: "aomoriken",
 enShort: "aomori",
 },
 {
 id: "03",
 name: "岩手県",
 short: "岩手",
 kana: "イワテケン",
 en: "iwateken",
 enShort: "iwate",
 },
 {
 id: "04",
 name: "宮城県",
 short: "宮城",
 kana: "ミヤギケン",
 en: "miyagiken",
 enShort: "miyagi",
 },
 {
 id: "05",
 name: "秋田県",
 short: "秋田",
 kana: "アキタケン",
 en: "akitaken",
 enShort: "akita",
 },
 {
 id: "06",
 name: "山形県",
 short: "山形",
 kana: "ヤマガタケン",
 en: "yamagataken",
 enShort: "yamagata",
 },
 {
 id: "07",
 name: "福島県",
 short: "福島",
 kana: "フクシマケン",
 en: "fukushimaken",
 enShort: "fukushima",
 },
 {
 id: "08",
 name: "茨城県",
 short: "茨城",
 kana: "イバラキケン",
 en: "ibarakiken",
 enShort: "ibaraki",
 },
 {
 id: "09",
 name: "栃木県",
 short: "栃木",
 kana: "トチギケン",
 en: "tochigiken",
 enShort: "tochigi",
 },
 {
 id: "10",
 name: "群馬県",
 short: "群馬",
 kana: "グンマケン",
 en: "gunmaken",
 enShort: "gunma",
 },
 {
 id: "11",
 name: "埼玉県",
 short: "埼玉",
 kana: "サイタマケン",
 en: "saitamaken",
 enShort: "saitama",
 },
 {
 id: "12",
 name: "千葉県",
 short: "千葉",
 kana: "チバケン",
 en: "chibaken",
 enShort: "chiba",
 },
 {
 id: "13",
 name: "東京都",
 short: "東京",
 kana: "トウキョウト",
 en: "tokyoken",
 enShort: "tokyo",
 },
 {
 id: "14",
 name: "神奈川県",
 short: "神奈川",
 kana: "カナガワケン",
 en: "kanagawaken",
 enShort: "kanagawa",
 },
 {
 id: "15",
 name: "新潟県",
 short: "新潟",
 kana: "ニイガタケン",
 en: "niigataken",
 enShort: "niigata",
 },
 {
 id: "16",
 name: "富山県",
 short: "富山",
 kana: "トヤマケン",
 en: "toyamaken",
 enShort: "toyama",
 },
 {
 id: "17",
 name: "石川県",
 short: "石川",
 kana: "イシカワケン",
 en: "ishikawaken",
 enShort: "ishikawa",
 },
 {
 id: "18",
 name: "福井県",
 short: "福井",
 kana: "フクイケン",
 en: "fukuiken",
 enShort: "fukui",
 },
 {
 id: "19",
 name: "山梨県",
 short: "山梨",
 kana: "ヤマナシケン",
 en: "yamanashiken",
 enShort: "yamanashi",
 },
 {
 id: "20",
 name: "長野県",
 short: "長野",
 kana: "ナガノケン",
 en: "naganoken",
 enShort: "nagano",
 },
 {
 id: "21",
 name: "岐阜県",
 short: "岐阜",
 kana: "ギフケン",
 en: "gifuken",
 enShort: "gifu",
 },
 {
 id: "22",
 name: "静岡県",
 short: "静岡",
 kana: "シズオカケン",
 en: "shizuokaken",
 enShort: "shizuoka",
 },
 {
 id: "23",
 name: "愛知県",
 short: "愛知",
 kana: "アイチケン",
 en: "aichiken",
 enShort: "aichi",
 },
 {
 id: "24",
 name: "三重県",
 short: "三重",
 kana: "ミエケン",
 en: "mieken",
 enShort: "mie",
 },
 {
 id: "25",
 name: "滋賀県",
 short: "滋賀",
 kana: "シガケン",
 en: "shigaken",
 enShort: "shiga",
 },
 {
 id: "26",
 name: "京都府",
 short: "京都",
 kana: "キョウトフ",
 en: "kyotoken",
 enShort: "kyoto",
 },
 {
 id: "27",
 name: "大阪府",
 short: "大阪",
 kana: "オオサカフ",
 en: "osakaken",
 enShort: "osaka",
 },
 {
 id: "28",
 name: "兵庫県",
 short: "兵庫",
 kana: "ヒョウゴケン",
 en: "hyogoken",
 enShort: "hyogo",
 },
 {
 id: "29",
 name: "奈良県",
 short: "奈良",
 kana: "ナラケン",
 en: "naraken",
 enShort: "nara",
 },
 {
 id: "30",
 name: "和歌山県",
 short: "和歌山",
 kana: "ワカヤマケン",
 en: "wakayamaken",
 enShort: "wakayama",
 },
 {
 id: "31",
 name: "鳥取県",
 short: "鳥取",
 kana: "トットリケン",
 en: "tottoriken",
 enShort: "tottori",
 },
 {
 id: "32",
 name: "島根県",
 short: "島根",
 kana: "シマネケン",
 en: "shimaneken",
 enShort: "shimane",
 },
 {
 id: "33",
 name: "岡山県",
 short: "岡山",
 kana: "オカヤマケン",
 en: "okayamaken",
 enShort: "okayama",
 },
 {
 id: "34",
 name: "広島県",
 short: "広島",
 kana: "ヒロシマケン",
 en: "hiroshimaken",
 enShort: "hiroshima",
 },
 {
 id: "35",
 name: "山口県",
 short: "山口",
 kana: "ヤマグチケン",
 en: "yamaguchiken",
 enShort: "yamaguchi",
 },
 {
 id: "36",
 name: "徳島県",
 short: "徳島",
 kana: "トクシマケン",
 en: "tokushimaken",
 enShort: "tokushima",
 },
 {
 id: "37",
 name: "香川県",
 short: "香川",
 kana: "カガワケン",
 en: "kagawaken",
 enShort: "kagawa",
 },
 {
 id: "38",
 name: "愛媛県",
 short: "愛媛",
 kana: "エヒメケン",
 en: "ehimeken",
 enShort: "ehime",
 },
 {
 id: "39",
 name: "高知県",
 short: "高知",
 kana: "コウチケン",
 en: "kochiken",
 enShort: "kochi",
 },
 {
 id: "40",
 name: "福岡県",
 short: "福岡",
 kana: "フクオカケン",
 en: "fukuokaken",
 enShort: "fukuoka",
 },
 {
 id: "41",
 name: "佐賀県",
 short: "佐賀",
 kana: "サガケン",
 en: "sagaken",
 enShort: "saga",
 },
 {
 id: "42",
 name: "長崎県",
 short: "長崎",
 kana: "ナガサキケン",
 en: "nagasakiken",
 enShort: "nagasaki",
 },
 {
 id: "43",
 name: "熊本県",
 short: "熊本",
 kana: "クマモトケン",
 en: "kumamotoken",
 enShort: "kumamoto",
 },
 {
 id: "44",
 name: "大分県",
 short: "大分",
 kana: "オオイタケン",
 en: "oitaken",
 enShort: "oita",
 },
 {
 id: "45",
 name: "宮崎県",
 short: "宮崎",
 kana: "ミヤザキケン",
 en: "miyazakiken",
 enShort: "miyazaki",
 },
 {
 id: "46",
 name: "鹿児島県",
 short: "鹿児島",
 kana: "カゴシマケン",
 en: "kagoshimaken",
 enShort: "kagoshima",
 },
 {
 id: "47",
 name: "沖縄県",
 short: "沖縄",
 kana: "オキナワケン",
 en: "okinawaken",
 enShort: "okinawa",
 }
 ]

 const hubspotClient = new hubspot.Client({
 apiKey: process.env.HAPIKEY
 });
 const results = await hubspotClient.crm.contacts.basicApi.getById(event.object.objectId, ['state'])

 /// コンタクトの今の都道府県
 const currentState = results.body.properties.state
 const lowercaseCurrentState = currentState.toLowerCase().replace(/[ぁ-ん]/g, s => String.fromCharCode(s.charCodeAt(0) + 0x60));

 /// このアクションのアウトプットが入る変数
 let state

 loop1:
 for (const prefectureMap of prefectureList) { /// 上の都道府県リスト一個一個をループし、該当する値がないかチェックする
 for (const prefectureString of Object.values(prefectureMap)) {
 if (prefectureString.includes(lowercaseCurrentState)) {
 /**
 * 該当する値があった場合はアウトプットする値としてname(日本語表記)をインプットする
 * 日本語以外の表記に変換したい場合は'.name'を'.en'や'.enShort'に変えれば英語表記だったりにできる
 */
 state = prefectureMap.name
 break loop1
 }
 }
 }

 /// もし該当する値がなかった場合は今の都道府県をそのまま返す
 if(!state) {
 state = currentState
 }

 callback({
 outputFields: {
 state,
 }
 });
}

お~、正規表現まで書いてくれてるのはありがたいです!

なるほど、データクレンジングを内部でできる感じになるのですね!

これは導入時期にスプシからの移行などがかなり楽になりますね!

最初の移行時期はオペレーションハブを使って、手動でオペレーション作成、半年後にマーケ、セールスの自動化の流れが捗りそうですね!

カスタムコードを使用してのデータクレンジングは、英語だけでなく日本語でもかなり役立ちそうですよね!

また新たにコードの例を発見したら紹介します😄