0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google ChatからSalesforceの商談を作成させる

Last updated at Posted at 2025-09-20

Google ChatからSalesforceの商談を自動作成する

TL;DR

Google Chat → GAS → n8n → Salesforce → Chat/Slack の流れで商談を自動作成します。

image.png

GAS 実装

Google Apps Scriptで以下の機能を実装します:

  • スラッシュコマンド /opportunity でダイアログを表示
  • フォーム入力をn8nのWebhookに送信
  • 顧客名のオートコンプリート機能(スプレッドシート連携)

ダイアログのイメージ

image.png

主要ハンドラ

// 設定
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 連携

ワークフロー

詳細は割愛しますが、ざっくりとした流れは以下の通りです。

  1. Webhook受信(GASから)
  2. データ整形(日付FMTなど)
  3. Salesforce参照(取引先idなどを取得)
  4. 商談作成
  5. Chat投稿

Chat投稿はスレッドに返信する形としたかったので、GoogleChat専用のノードではなくHTTP Requestのノードを使いました。

まとめ

いかがだったでしょうか。
Salesforceの入力が課題になるケースが多い中、Google Chatから直接商談を作成できるようになると、営業の生産性向上に寄与できると思います。
ぜひ試してみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?