Googleフォームと連携する
Googleフォームの回答を Google Apps Script(GAS)から nocall の公開 API へ送り、フォーム送信後に即時架電します。
- Google アカウントと nocall アカウントがある
- 架電に使うエージェントと登録先のコンタクトグループを作成済み
- Googleフォームの回答先を Googleスプレッドシートに設定済み
- nocall の API キーを発行済み
フォームには少なくとも電話番号の質問が必要です。氏名や会社名などは任意で、エージェントが必要とするカスタム変数に合わせて用意します。
1. Apps Scriptを開く
Section titled “1. Apps Scriptを開く”Googleフォームの回答先スプレッドシートを開き、メニューの「拡張機能」→「Apps Script」を選択します。
2. APIキーを保存する
Section titled “2. APIキーを保存する”Apps Script の「プロジェクトの設定」→「スクリプト プロパティ」に次の値を追加します。
| プロパティ | 値 |
|---|---|
NOCALL_API_KEY |
nocall で発行した API キー |
NOCALL_AGENT_ID |
架電に使うエージェント ID |
NOCALL_USER_GROUP_ID |
登録先のコンタクトグループ ID |
3. スクリプトを追加する
Section titled “3. スクリプトを追加する”フォームの質問名に合わせて namedValues のキーと attributions を変更してください。
function onFormSubmit(event) { const values = event.namedValues; const phoneNumber = firstValue(values, "電話番号");
const payload = { phoneNumber: toE164Japan(phoneNumber), agentId: getRequiredProperty("NOCALL_AGENT_ID"), userGroupId: getRequiredProperty("NOCALL_USER_GROUP_ID"), attributions: [ { label: "氏名", value: optionalValue(values, "氏名") }, { label: "会社名", value: optionalValue(values, "会社名") }, { label: "メールアドレス", value: optionalValue(values, "メールアドレス") }, ].filter((attribute) => attribute.value), };
const response = UrlFetchApp.fetch( "https://api.nocall.ai/api/v1/end-users/add-and-call", { method: "post", contentType: "application/json", headers: { "x-api-key": getRequiredProperty("NOCALL_API_KEY") }, payload: JSON.stringify(payload), muteHttpExceptions: true, }, );
if (response.getResponseCode() >= 300) { throw new Error(`nocall API error: ${response.getContentText()}`); }}
function firstValue(namedValues, questionName) { const value = namedValues[questionName]?.[0]; if (!value) throw new Error(`${questionName}が空です`); return String(value).trim();}
function optionalValue(namedValues, questionName) { return String(namedValues[questionName]?.[0] ?? "").trim();}
function toE164Japan(value) { const normalized = String(value).replace(/[\s()-]/g, ""); if (normalized.startsWith("+")) return normalized; if (normalized.startsWith("0")) return `+81${normalized.slice(1)}`; throw new Error("電話番号は0または+から始めてください");}
function getRequiredProperty(name) { const value = PropertiesService.getScriptProperties().getProperty(name); if (!value) throw new Error(`${name}が設定されていません`); return value;}4. トリガーを設定する
Section titled “4. トリガーを設定する”- Apps Script 左メニューの「トリガー」を開きます。
- 「トリガーを追加」を選択します。
- 実行する関数に
onFormSubmitを指定します。 - イベントのソースに「スプレッドシートから」を指定します。
- イベントの種類に「フォーム送信時」を指定して保存します。
- 初回の権限確認を完了します。
スクリプトをウェブアプリとしてデプロイする必要はありません。
フォームの質問を変更する
Section titled “フォームの質問を変更する”サンプルと異なる質問を使う場合は、namedValues のキーを Googleフォームの質問名と完全に一致させ、取得した値を attributions に追加します。
たとえば「部署」という記述式の質問を追加する場合は、次のように変更します。
const department = values["部署"]?.[0] ?? "";
const payload = { // phoneNumber、agentId、userGroupIdは省略 attributions: [ { label: "部署", value: department }, ],};空欄を許可しない質問では firstValue(values, "部署") を使用できます。エージェントのプロンプトで {部署} のようなカスタム変数を使う場合、同じ名前の label を attributions に含めてください。
5. テストする
Section titled “5. テストする”Googleフォームからテスト回答を 1 件送信します。Apps Script の「実行数」で成功を確認し、nocall のコンタクトと通話履歴に結果が作成されることを確認します。
うまく動かない場合
Section titled “うまく動かない場合”- 質問名と
namedValuesのキーが完全に一致しているか確認する - Apps Script の「実行数」からエラーメッセージを確認する
- エージェントが必要とする属性を
attributionsに含める - 電話番号を
+81から始まる形式へ変換できているか確認する - API キー、エージェント ID、コンタクトグループ IDを確認する
詳細は Google Apps Script のインストール型トリガー と イベントオブジェクト を参照してください。
