Google ChatからSalesforceの商談を自動作成する
TL;DR
Google Chat → GAS → n8n → Salesforce → Chat/Slack の流れで商談を自動作成します。
GAS 実装
Google Apps Scriptで以下の機能を実装します:
- スラッシュコマンド
/opportunityでダイアログを表示 - フォーム入力をn8nのWebhookに送信
- 顧客名のオートコンプリート機能(スプレッドシート連携)
ダイアログのイメージ
主要ハンドラ
// 設定
const CONFIG = {
WEBHOOK_URL: 'https://your-n8n.com/webhook/your-id',
CUSTOMER_SHEET_ID: 'YOUR_SPREADSHEET_ID',
CUSTOMER_SHEET_NAME: '取引先'
};
function onMessage(e) {
if (e.appCommandMetadata?.appCommandType === 'SLASH_COMMAND') {
return openInitialDialog(e);
}
return { text: '使い方: /opportunity と入力してください。' };
}
function submitForm(e) {
const formData = extractFormData(e);
// Webhook送信
const threadId = e.message?.thread?.name || '';
const spaceId = e.space?.name || '';
sendToWebhook(formData, threadId, spaceId);
return {
actionResponse: {
type: 'DIALOG',
dialogAction: { actionStatus: 'OK' }
}
};
}
function onWidgetUpdate(e) {
if (e.action?.actionMethodName === 'handleCustomerAutocomplete') {
return handleCustomerAutocomplete(e);
}
return {};
}
オートコンプリート機能
function handleCustomerAutocomplete(e) {
const inputValue = e.common?.parameters?.autocomplete_widget_query || '';
if (inputValue.length < 2) {
return {
actionResponse: {
type: 'UPDATE_WIDGET',
updatedWidget: {
suggestions: {
items: [{ text: '2文字以上入力してください' }]
}
}
}
};
}
const customers = searchCustomers(inputValue);
const suggestions = customers.map(customer => ({ text: customer }));
return {
actionResponse: {
type: 'UPDATE_WIDGET',
updatedWidget: {
suggestions: { items: suggestions }
}
}
};
}
function searchCustomers(query) {
// 実際の運用では、スプレッドシートから毎回取得すると性能問題が発生するため
// PropertiesServiceを使ったキャッシュ機能の実装を強く推奨(本記事では割愛)
const customerList = getCustomerListFromSheet();
const queryLower = query.toLowerCase();
return customerList
.filter(customer => customer.toLowerCase().includes(queryLower))
.slice(0, 10);
}
function getCustomerListFromSheet() {
const sheet = SpreadsheetApp.openById(CONFIG.CUSTOMER_SHEET_ID)
.getSheetByName(CONFIG.CUSTOMER_SHEET_NAME);
const values = sheet.getRange('A2:A').getValues();
return values
.map(row => row[0])
.filter(name => name && name.toString().trim() !== '')
.map(name => name.toString().trim());
}
Google Cloud Console 設定
Apps ScriptをGoogle Chatアプリとして動作させるための設定を行います:
- GASをGoogle Chat アプリのコマンドに応答する
- アプリを Google Workspace Marketplace に公開する
- Chat投稿用にサービスアカウント作成
1. GASをGoogle Chat アプリのコマンドに応答させる設定
Apps ScriptをChatアプリとして設定:
- Cloud Console で Google Chat API を有効化
- Apps Script エディタで「デプロイ」→「新しいデプロイ」
- 種別: Google Chatアプリ を選択
- デプロイID を控える
- Chat API 設定画面で インタラクション にデプロイIDを指定
-
スラッシュコマンド:
/opportunityを設定
参考
2. Google Workspace Marketplace への公開設定
組織内でアプリを利用可能にする:
- OAuth同意画面 でユーザータイプを 内部 に設定
- アプリ名、説明、ロゴなどの基本情報を入力
- Chat API 設定で 可視性 を 組織内 に設定
- 必要に応じて特定のスペースやユーザーに制限
参考
3. Chat投稿用サービスアカウント作成
n8nからGoogle Chat APIを呼ぶための認証設定:
- Cloud Console →「IAMと管理」→「サービスアカウント」
- 新しいサービスアカウントを作成
- 役割: Chat Bot を付与
- JSONキー を生成してダウンロード
- n8nのGoogle認証情報に設定して投稿機能を有効化
参考
4. 動作確認
- 対象スペースにアプリを追加
-
/opportunityコマンドでダイアログが表示されることを確認
n8n / Salesforce 連携
ワークフロー
詳細は割愛しますが、ざっくりとした流れは以下の通りです。
- Webhook受信(GASから)
- データ整形(日付FMTなど)
- Salesforce参照(取引先idなどを取得)
- 商談作成
- Chat投稿
Chat投稿はスレッドに返信する形としたかったので、GoogleChat専用のノードではなくHTTP Requestのノードを使いました。
まとめ
いかがだったでしょうか。
Salesforceの入力が課題になるケースが多い中、Google Chatから直接商談を作成できるようになると、営業の生産性向上に寄与できると思います。
ぜひ試してみてください!

